likes
comments
collection
share

Nodejs 第三十三章 SQL语句

作者站长头像
站长
· 阅读数 26

Nodejs 第三十三章 SQL语句

  • 在上一章节中,我们使用了可视化来简单创建了数据库,创建了表和填充删除了数据。

    • 但通过可视化的操作方式,其实操作自由度是不太够的,比开车的自动挡手动挡的区别还大一点
    • 所以掌握命令的写法是势在必得的(就像Git一样,应该没人去用那个可视化),命令写法多快呐
  • 而编写在数据库中的命令就叫SQL

    • SQL(Structured Query Language)是一种用于管理关系型数据库系统的语言。它是一种标准化语言,用于执行各种数据库操作,包括数据查询、插入、更新和删除
    • 其中正常使用掌握增删改查也就够用了,如果需求不满足还可以继续深造,SQL能探索的深度是非常夸张的

数据库的操作

连接数据库

  • 通过命令:mysql -u root -p连接数据库

    • 该命令首先开头mysql是专属于mysql系列的命令标识,在我们前面自己实现脚手架的时候,也实现过的
    • -u是-user(用户名)的缩写,而后面的root就是我们的默认用户名了
    • -p则是password(密码)的缩写,而此时密码是不能跟在-p后面写的,因为我们此时输入的状态还是明文,-p回车之后,我们会进入输入密码的密文状态,此时就没人能看见我们输入的密码是什么了(除非他盯着你的键盘)

Nodejs 第三十三章 SQL语句

  • 查看所有的数据库:show databases;

    • 上一章节讲解过,这里就略过

创建数据库

  • 非常形象化

    • create(创建) database(数据库) 库名
    • 这里命令是不区分大小写的,根据自己的爱好可以来选择,只是说大多数情况下他们会采用大写的写法
 create database 库名

Nodejs 第三十三章 SQL语句

  • 如果进行重复的创建就会失败,数据库不允许重复创建

    • 会报错:Can't create database 'xiaoyu'; database exists
    • 意思就是:无法创建数据库"xiaoyu",数据库已经存在

Nodejs 第三十三章 SQL语句

避免重复创建数据库

  • 为了避免这个问题,我们采用 if not exists命令

    • 此时就不会报错了
    • 该命令的意思是:如果这个数据库不存在,我就创建。如果存在,就什么都不做。
 CREATE DATABASE IF NOT EXISTS `xiaoyu`

Nodejs 第三十三章 SQL语句

添加字符集utf-8

  • 在我们创建数据库的同时,设置默认的字符集(第二行翻译过来就是这句话)
 CREATE DATABASE IF NOT EXISTS `xiaoyu`
 DEFAULT CHARACTER SET = 'utf8mb4'
  • 大家能够看到,我们此时没有在终端继续写命令,而是换到了vscode编辑器中,因为编辑器有代码提示,而且可以换行,是要比在终端输入更加方便的,我们要善于利用工具

SQL书写顺序

此时我需要向你介绍SQL命令书写的最根本原则之一,他的书写顺序是非常核心且基础的内容。只有掌握住这个规律,我们在阅读和书写SQL语句的时候,才不会是生搬硬套,而是真正理解。此时的学习才会轻松

  1. 操作类型关键字:命令始终以操作类型的关键字开始,例如 CREATE, SELECT, INSERT, UPDATE, DELETE 等。

  2. 目标对象:操作类型关键字后通常是目标对象,例如 DATABASE, TABLE, 或具体的表名。

  3. 条件或修饰符:某些命令可能包括条件或修饰符,如 IF NOT EXISTS(用于创建操作),IF EXISTS(用于删除操作),这些修饰符通常紧随目标对象之后。

  4. 详细规范

    • 在创建或修改结构的命令(如 CREATE TABLE)中,详细规范如字段定义、数据类型等紧随条件或修饰符之后。
    • INSERT, UPDATE, SELECT 命令中,字段和值或条件表达式跟在目标对象之后。
  5. 操作细节

    • 对于 INSERT 命令,先定义表名和列名,随后是要插入的值。
    • 对于 UPDATE 命令,先指定表名,接着是 SET 关键字和字段赋值,然后是 WHERE 子句(如果有条件限制)。
    • 对于 SELECT 命令,首先列出要查询的字段,然后是 FROM 关键字和表名,最后是 WHERE 子句(如果有条件限制)。
  6. 结束符:每条命令的末尾都应该有一个分号(;)作为结束符,特别是在同时执行多条命令的情况下。

数据表操作

创建数据表

  • 我们先来看下一个基础的用户表长什么样子,不要被这个密密麻麻的内容所吓倒,其实内容并没我们想象中那么多
 CREATE TABLE `user` (
    id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name varchar(100) COMMENT '名字',
    age int COMMENT '年龄',
    address varchar(255) COMMENT '地址',
    create_time timestamp DEFAULT CURRENT_TIMESTAMP  COMMENT '创建时间'
 ) COMMENT '用户表'
  • 作为一个表最基础的结构其实是很简单的,让我们去掉所有不是必需的内容来看看吧

    • 首先,我们要记住前面SQL的书写顺序,我们就能够知道命令始终以操作类型的关键字开始。而这里,我们要创建一个表,就以CREATE开始,然后是目标对象,我们目标是一个表,而表就是TABLE,在TABLE之后连贯上我们的表名user。
    • 之后加上中括号就好了,中括号内就是我们要定义的表的内容框架了
 CREATE TABLE `user`{
 ​
 }
  • 那此时,我们就要思考,表的内部到底要怎么填写?

    • 内容是不重要的,因为不同的表,需要定义的内容都是不同的。我们所需要掌握的,是填写的方式和顺序,只要有所掌握,我们就能根据自己的需求将其如同搭积木一样搭建起来,自由组合成自己所需的内容

必须的元素

  1. 字段名:每个字段都必须有一个唯一的名称,用于标识该字段
  2. 数据类型:每个字段都必须指定数据类型,它定义了该字段可以存储的数据种类(如 INT, VARCHAR, DATE 等)

元素的顺序

  • 抛开哪些复杂的表面,其实他们的内在规则就由以下这三点按顺序组成,非常好理解

    • 我们所看到的繁复内容,很大程度上是可选属性的堆叠造成的
 字段名 数据类型 可选属性

可选的元素(属性)

  • NULL/NOT NULL:指定字段是否可以存储 NULL 值。
  • DEFAULT:为字段指定一个默认值。
  • AUTO_INCREMENT:对于整数类型的字段,可以设置为自动递增,常用于主键。
  • PRIMARY KEY:将字段指定为表的主键。
  • UNIQUE:确保字段值在表中唯一。
  • COMMENT:为字段添加注释说明。

插入位置详解

  • 数据类型后:大部分可选属性都是跟在数据类型之后,例如 AUTO_INCREMENT, NOT NULL, DEFAULT, COMMENT
  • 字段定义结束后:一些特殊的约束如 PRIMARY KEYUNIQUE 可以在单独的行中定义,也可以直接在字段定义行中指定

定义表内的内容

通过前面的了解后,我们就来看看一开始所看到的基础用户表的内容,我们解析这张用户表其中两行典型案例,而后面的内容都可以用同样的规律所看透

  1. id int NOT NULL AUTO_INCREMENT PRIMARY KEY,

    • 字段名id

    • 数据类型int(整数)

    • 可选属性:

      • NOT NULL:该字段不能存储 NULL 值。
      • AUTO_INCREMENT:该字段的值将自动递增,每插入一条新记录,值自动加一。
      • PRIMARY KEY:该字段是表的主键,用于唯一标识表中的每条记录。
  2. create_time timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'

    • 字段名create_time

    • 数据类型timestamp(时间戳)

    • 可选属性:

      • DEFAULT CURRENT_TIMESTAMP:为字段指定默认值,如果在插入记录时未指定该字段的值,MySQL将自动使用当前的时间戳。就是自动填充默认值功能
      • COMMENT '创建时间':为字段添加注释,说明这是记录创建时间的字段。为了后来者也能够以最快速度知道这行代码的作用,我们可以添加适当的注释
 create table 表名字 (
 id字段名称   int数据类型代表数字类型   NOT NULL(不能为空)  AUTO_INCREMENT(id自增)
 PRIMARY KEY(id为主键)
 name(字段名称) varchar(100)字符串类型100字符 COMMENT(注释)
 age(字段名称) int数据类型代表数字类型  COMMENT(注释)
 create_time(字段名称) timestamp(时间戳) DEFAULT CURRENT_TIMESTAMP(自动填充创建时间)
 )
 CREATE TABLE `user` (
     id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -- 定义一个名为 `id` 的整数字段,设为主键,自增,不能为空
     name varchar(100) COMMENT '名字', -- 名为 `name` 的字符串字段,最大长度100字符,附加注释 '名字'
     age int COMMENT '年龄', -- 名为 `age` 的整数字段,附加注释 '年龄'
     address varchar(255) COMMENT '地址', -- 名为 `address` 的字符串字段,最大长度255字符,附加注释 '地址'
     create_time timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' -- 名为 `create_time` 的时间戳字段,设置默认值为当前时间戳,附加注释 '创建时间'
 ) COMMENT '用户表' -- 对整个表添加注释 '用户表'

Nodejs 第三十三章 SQL语句

  • 我们来随便添加点内容测试一下,插入的命令会附带显示在下面

    • 其中id和时间不填,因为id是自增的,而时间是根据当前时间戳自动填入
 INSERT INTO `user`(`name`,`age`,`address`) VALUES('小余',21,'福建');

Nodejs 第三十三章 SQL语句

  • 可以看到id自己从1开始,而时间就是我写这份笔记的时间

Nodejs 第三十三章 SQL语句

  • 我此时如果把id删掉,就会报错。因为我们前面在创建表的时候对id设置NOT NULL,也就是不能为空

    • 其他部分就没这个报错问题

Nodejs 第三十三章 SQL语句

修改表

修改表名

  • 遇到新的命令,还是遵循我们SQL语句的书写顺序

    • ALTER是操作类型关键字,**TABLE user RENAME user666**是目标对象
    • ALTER是改变的意思,后面的目标对象则是表名user重命名为user666
 ALTER TABLE `user` RENAME `user666`

Nodejs 第三十三章 SQL语句

添加列

  • 对表进行增删改查是最基础的操作命令,此时掌握SQL语句的书写顺序。我们就会很轻松的理解下面这些命令了

    • ALTER 是操作关键字
    • ALTER TABLE user Add COLUMN sex VARCHAR(20) ;是目标对象
  • 我们只需要额外理解的只有Add COLUMN sex VARCHAR(20) 这段内容。

    • 翻译过来就是:添加一列内容,主体是sex字段,限制是VARCHAR(20)。就是让用户填性别
    • 而这段需要额外理解的为什么要写在后面,在我们SQL书写顺序中也有提到
 ALTER TABLE `user` Add COLUMN `sex` VARCHAR(20) ;

删除列

  • DROP:删除一个列

    • 整体:删除user表中的sex
 ALTER TABLE `user` DROP `sex`

Nodejs 第三十三章 SQL语句

编辑表

  • MODIFY:变更

    • 表名: user — 指定了要修改的表名。

    • 字段名: age — 指出要修改的列的名称。

    • 数据类型: VARCHAR(255) — 将 age 列的数据类型从之前的类型(可能是 int 或其他)更改为 VARCHAR(255),即可存储最长为255个字符的字符串。

    • 可选属性:

      • NULL — 允许 age 列存储 NULL 值,表示该列数据可以不提供(可以为空)。
      • COMMENT '年龄2' — 为该列添加或修改注释为 "年龄2",用于说明或标记该列的内容或用途。
 ALTER TABLE `user` MODIFY COLUMN `age` VARCHAR(255) NULL COMMENT '年龄2';
  • 同时这里要说明,不管是删除还是添加、编辑,都是可以同时增删多个的,只需要在要删除或者添加的后面加上逗号,即可继续连贯的写下去

增删改逻辑规律(表)

  • 对于上面的增删改操作表中,我想大家已经可以发现了一些规律,我们来将其总结一下
 ALTER TABLE `user` RENAME `user666`
 ALTER TABLE `user` Add COLUMN `sex` VARCHAR(20) ;
 ALTER TABLE `user` MODIFY COLUMN `age` VARCHAR(255) NULL COMMENT '年龄2';
  • 所有这些操作都以 ALTER TABLE 开始,随后指定操作类型(如 ADD, MODIFY, RENAME),然后是具体的操作细节(如新的表名、列名、数据类型、约束等)

  • 不过这些是对表是本身进行操作的,在开头的ALTER TABLE也印证了这点

    • 我们在往表里添加内容开头则不一样,这好像规律被打破了,但其实不然。我们添加表内容是通过INSERT INTO,而这其实是和ALTER都同属于SQL书写顺序中的操作类型关键字
    • 我们并没有脱离整体的书写规则框架,包括接下来要讲解的查询表内容的SELECT也是操作类型关键字。但查询的方式会更多,我们放到下一章节来讲
转载自:https://juejin.cn/post/7364971987050168371
评论
请登录