MySQL数据表的约束

已经一个星期没更了,因为过年嘛,比较忙,我玩心也大,就没继续更新,在这里给大家道歉,也祝大家新的一年快快乐乐,新年快乐。

为防止数据表中插入错误的数据,MySQL定义了一些规则维护数据库中数据的完整性和有效性,这些规则即表的约束。常见的约束有非空约束、唯一约束、主键约束、外键约束和默认值约束,其中外键约束涉及多表操作,将在后面进行讲解。接下来针对外键约束之外的其他约束进行讲解。

1.非空约束

非空约束用于确保插入字段中值的非空性。如果没有对字段设置约束,字段默认允许插入NULL值。如果数据表中的字段设置了非空约束,那么该字段中存放的值必须是NULL值之外的其他具体值。

例如,在企业的员工管理系统中,如果HR在新增员工信息时没有填写员工姓名等必填信息,系统却允许新增,那么所新增的员工信息没有使用价值。一般情况下,员工管理系统的数据表中都会为必填项信息对应的字段设置非空约束,以确保数据的完整性。为数据表的字段设置非空约束后,如果往该字段中插入的内容为NULL,则所执行的插入操作会报错。

接下来,对设置和删除非空约束进行讲解和演示。

设置非空约束

在MySQL中,非空约束通过NOT NULL进行限定,在数据表中可以为多个字段同时设置非空约束。字段的非空约束可以在创建数据表时进行设置,也可以在修改数据表时进行添加,具体实现如下。

(1)创建数据表时设置非空约束。

如果是创建数据表时给字段设置非空约束,只需要在字段的数据类型后面追加NOT NULL即可。可以在数据表中设置多个非空约束,但是不能设置非空约束为表级约束。

接下来,通过一个案例演示创建数据表时设置非空约束。

创建表时设置非空约束,创建一个部门表dept01:

mysql> create table dept01(-> deptno int,-> dname varchar(14),-> local varchar(13) NOT NULL-> );
Query OK, 0 rows affected (0.03 sec)

从创建语句可以看出我在local这个字段后面设置了非空约束,也就是添加了NOT NULL。

使用DESC语句查询一下表的结构:

mysql> desc dept01;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int         | YES  |     | NULL    |       |
| dname  | varchar(14) | YES  |     | NULL    |       |
| local  | varchar(13) | NO   |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

从结果我们可以看到NULL下面为NO,意思就是是否允许空字段的存在,NO就是不允许。

修改数据表示添加非空约束

如果需要在已经存在的列表中添加非空约束,可以在ALTER TABLE语句中通过使用MODIFY或CHANGE重新定义字段的方式添加非空约束,这两种方式的效果都一样。

接下来通过一个案例演示修改数据表时使用MODIFY添加非空约束。

接上面创建的部门表dept01,这次设置dname字段为非空约束:

mysql> ALTER TABLE dept01 MODIFY dname VARCHAR(14) NOT NULL;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

语句执行成功后使用DESC语句查看表的结构:

mysql> DESC dept01;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int         | YES  |     | NULL    |       |
| dname  | varchar(14) | NO   |     | NULL    |       |
| local  | varchar(13) | NO   |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

从上面的执行结果就可以看出语句修改成功了,现在dname字段也是非空约束。

删除非空约束

非空约束的删除也是通过ALTER TABLE 语句进行的,使用MODIFY或CHANGE方法重新定义字段来实现删除。

具体SQL语句及执行结果如下:

mysql> ALTER TABLE dept01 MODIFY dname VARCHAR(16);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> DESC dept01;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int         | YES  |     | NULL    |       |
| dname  | varchar(16) | YES  |     | NULL    |       |
| local  | varchar(13) | NO   |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

从操作流程来看和定义字段非空约束差不多的。结果显而易见也是成功删除了,其实删除和添加都是通过重新定义的方法来实现的。

我在演示一下通过CHANGE方法来添加非空约束:

mysql> ALTER TABLE dept01 CHANGE dname dname VARCHAR(14) NOT NULL;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> DESC dept01;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int         | YES  |     | NULL    |       |
| dname  | varchar(14) | NO   |     | NULL    |       |
| local  | varchar(13) | NO   |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

结果也是成功的添加了,这个CHANGE方法和之前讲的用法一样。

2.唯一约束

数据表中默认可以保存相同的值,唯一约束用于确保字段中值的唯一性。如果数据表中的字段设置了唯一约束,那么该数据表的这个字段中存放的值不能重复出现。

例如,在企业的员工管理系统中,如果HR在新增员工信息时允许新增员工的企业邮箱重复,那么邮箱信息的有效性会受到很大影响(例如,发送给某位员工的邮件可能会有多名员工收到)。一般情况下,数据表中需要为内容必须保证不重复的字段设置唯一约束,以确保数据的唯一性。为字段设置唯一约束后,如果往该字段中插入已经存在的值,所执行的插入操作会报错。

接下来,对设置和删除唯一约束进行讲解。

设置唯一约束

在MySQL中,唯一约束通过关键字UNIQUE进行设置。设置时,可以在数据表中设置1个或多个唯一约束。字段的唯一约束可以在创建数据表时进行设置,也可以在修改数据表时进行添加,具体如下。

(1)创建数据表时设置唯一约束。

创建数据表时设置唯一约束的方式有两种:一种是设置列级约束;另一种是设置表级约束。列级约束紧跟在字段的数据类型之后,只对该字段起约束作用;表级约束独立于字段,可以对数据表的单个或多个字段起约束作用。如果表级约束对多个字段同时约束,只有当这几个字段的值相同时才视为重复记录,此时约束也称为联合约束或复合约束。

接下来,通过一个案例演示创建数据表时设置唯一约束。

例如,在数据库中创建一个用于存放员工信息的员工表tb_emp01,要求员工表中员工工号不能重复;相同部门中不能包含相同的员工姓名;员工职位不能为NULL值。

员工表的结构如下图:

具体SQL语句及执行结果如下:

mysql> CREATE TABLE tb_emp01(-> deptname VARCHAR(16),-> empno INT UNIQUE,-> ename VARCHAR(16),-> job VARCHAR(16) NOT NULL,-> email VARCHAR(30),-> UNIQUE (deptname,ename)-> );
Query OK, 0 rows affected (0.02 sec)

从上述执行结果的提示信息可以看出,CREATE TABLE语句成功执行。如果想验证字段是否按要求设置约束,可以使用DESC语句查看tb_emp01数据表的表结构信息,具体SQL语句及执行结果如下。

mysql> DESC tb_emp01;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| deptname | varchar(16) | YES  | MUL | NULL    |       |
| empno    | int         | YES  | UNI | NULL    |       |
| ename    | varchar(16) | YES  |     | NULL    |       |
| job      | varchar(16) | NO   |     | NULL    |       |
| email    | varchar(30) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

从上述执行结果可以看出,字段deptname的Key列为MUL,说明该字段是非唯一索引的第1列,此时字段deptname的值可以重复,字段deptname和字段ename共同的值用于唯一性判断;字段empno的Key列为UNI,说明创建数据表时empno字段成功设置了唯一索引。设置唯一约束成功后Key列的值会有变化,是因为字段设置唯一约束时,系统会自动为对应的字段设置唯一索引,即UNI。

修改数据表时添加唯一约束。

如果是修改数据表时设置唯一约束,可以在ALTER TABLE语句中通过使用MODIFY或CHANGE重新定义字段的方式添加,也可以通过ALTER TABLE语句中的ADD添加。使用ADD的方式语法更简洁,通常添加唯一约束时会选择使用这种方式。

接下来,通过一个案例演示修改数据表时使用ADD添加唯一约束。

例如,为数据表tb_emp01中的email字段添加唯一约束,具体SQL语句及执行结果如下。

mysql> ALTER TABLE tb_emp01 ADD UNIQUE(email);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

从上述执行结果的提示信息可以看出,上述命令成功执行。如果想验证email字段是否成功添加唯一约束,可以使用DESC语句查看数据表tb_emp01的表结构信息,具体SQL语句及执行结果如下。

mysql> DESC tb_emp01;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| deptname | varchar(16) | YES  | MUL | NULL    |       |
| empno    | int         | YES  | UNI | NULL    |       |
| ename    | varchar(16) | YES  |     | NULL    |       |
| job      | varchar(16) | NO   |     | NULL    |       |
| email    | varchar(30) | YES  | UNI | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

从上述执行结果可以看出,email字段的Key列为UNI,说明email字段成功添加了唯一约束。

删除唯一约束

创建唯一约束时,系统也同时创建了对应的唯一索引。删除唯一索引时,会将对应的唯一约束同时删除。默认情况下所创建的索引名和字段名一致,如果想要删除字段中已有的唯一约束,可以通过ALTER TABLE语句中的“DROP索引名”实现。

接下来,通过一个案例演示使用DROP删除唯一约束。

例如,将数据表tb_emp01中的empno字段的唯一约束删除,具体SQL语句及执行结果如下:

mysql> ALTER TABLE tb_emp01 DROP INDEX empno;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

从结果可以看出ALTER TABLE 语句执行成功,接下来使用DESC语句查看empno字段的唯一约束是否成功删除:

mysql> DESC tb_emp01;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| deptname | varchar(16) | YES  | MUL | NULL    |       |
| empno    | int         | YES  |     | NULL    |       |
| ename    | varchar(16) | YES  |     | NULL    |       |
| job      | varchar(16) | NO   |     | NULL    |       |
| email    | varchar(30) | YES  | UNI | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

从上述执行结果的empno字段对应的Key列信息可以看出,empno字段的唯一约束已经删除成功。

3.主键约束

在MySQL中,为快速查找到表中的某条记录,可以通过设置主键约束来实现。主键约束相当于非空约束和唯一约束的组合,要求被约束字段中的值不允许重复,也不允许出现NULL值。

例如,在企业内部的员工管理系统中需要高频率地使用员工表中的工号字段,如果允许员工工号重复或者是NULL值,管理员工信息时就会出现混乱,系统也没有任何有效性可言,这时就可以为员工工号设置主键约束。为员工工号设置主键约束后,如果往该字段中插入已经存在的值或NULL值,所执行的插入操作会报错。

设置主键约束

在MySQL中,主键约束是通过PRIMARY KEY进行设置,每个数据表中最多只能设置一个主键约束。设置主键约束的方式有两种,分别为创建数据表时设置主键约束和修改数据表时添加主键约束,具体如下。

(1)创建数据表时设置主键约束。

与设置唯一约束一样,可以在创建数据表时设置列级或表级的主键约束,区别在于列级只能对单字段设置主键约束,表级可以对单字段或多字段设置主键约束。

接下来我们通过一个案例演示创建数据表时设置主键约束

首先我们先在数据库中创建一个class表,设置id、name、age这三个字段,一般来说id是唯一的且不能是空的,因此我们设置为主键约束,name可能会有重复的设置非空即可。具体SQL语句即执行结果如下:

mysql> CREATE TABLE class(-> id INT PRIMARY KEY,-> name VARCHAR(12) NOT NULL,-> age INT-> );
Query OK, 0 rows affected (0.01 sec)

CREATE 语句创建成功,接下来查看表的结构,是否成功设置主键约束:

mysql> DESC class;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(12) | NO   |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

从执行结果可以看出id字段对应的key列的信息为PRI,说明创建表时的id字段成功设置了主键约束。

修改数据表时添加主键约束

如果数据表创建成功后,想要为表添加主键约束,则与修改数据表时添加唯一约束类似,可以在ALTER TABLE语句中通过使用MODIFY或CHANGE重新定义字段的方式添加,也可以通过ALTER TABLE语句中的ADD添加。不同的是,添加主键约束之前需要确保数据表中不存在主键约束,否则会添加失败。

在前面我设置非空约束时创建了一个dept01的数据表,不知道大家是否还记得,这里呢我们就使用这个数据表添加主键约束:

mysql> ALTER TABLE dept01 ADD PRIMARY KEY(deptno);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

修改语句执行成功,接下来使用DESC语句查看数据表的结构:

mysql> DESC dept01;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int         | NO   | PRI | NULL    |       |
| dname  | varchar(14) | NO   |     | NULL    |       |
| local  | varchar(13) | NO   |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

从上述执行结果可以看出,字段deptno的Key列为PRI,说明字段的主键约束添加成功。

不知道你们在了解主键约束时发现没有主键约束就是唯一约束和非空约束的结合,那么我们在同一个字段上同时设置唯一约束和非空约束是否就是主键约束呢?下面来让我们实验一下:

实验的对象是设置唯一约束时的tb_emp01这个部门表:

mysql> ALTER TABLE tb_emp01 MODIFY ename VARCHAR(16) UNIQUE NOT NULL;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

修改语句成功了,接下来查看Key列下面ename有没有PRI:

mysql> DESC tb_emp01;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| deptname | varchar(16) | YES  | MUL | NULL    |       |
| empno    | int         | YES  |     | NULL    |       |
| ename    | varchar(16) | NO   | PRI | NULL    |       |
| job      | varchar(16) | NO   |     | NULL    |       |
| email    | varchar(30) | YES  | UNI | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

从结果中可以看到ename字段后面的Key列下面有PRI。说明我们的猜想成功了。主键约束就是唯一约束与非空约束的结合。

删除主键约束

对于设置错误或者不再需要的主键约束,可以通过ALTER TABLE语句中的DROP进行删除。由于主键约束在数据表中只能有一个,因此不需要指定主键约束对应的字段名称,直接删除即可。删除主键约束时,也会自动删除主键索引。

删除class表中的主键约束:

mysql> ALTER TABLE class DROP PRIMARY KEY;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

语句执行成功,接下来使用DESC语句检查是否删除成功:

mysql> DESC class;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   |     | NULL    |       |
| name  | varchar(12) | NO   |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

从上述执行结果可以看出,id字段的Key列没有内容了,但是Null列还是显示NO,说明删除主键约束时自动将主键索引删除了,但字段的非空约束并没有被同时删除。如果想要删除字段的非空约束,可以参考前面说的删除非空约束的方法。

4.默认值约束

默认值约束用于给数据表中的字段指定默认值,即当在表中插入一条新记录时,如果没有给这个字段赋值,那么数据库系统会自动为这个字段插入指定的默认值。

例如,在企业的员工管理系统中需要记录每个员工的在职状态,以确定员工当前是否在职。如果每次办理员工入职时需要手动设置在职状态,则显得比较烦琐。这时就可以为员工状态设置默认值约束,这样新增员工信息时,即使不填写员工在职状态,数据库也会为员工在职状态插入设置的默认值。

接下来,对设置和删除默认值约束进行讲解。

设置默认值约束

字段的默认值约束可以在创建数据表时进行设置,也可以在修改数据表时进行添加,具体如下。

(1)创建数据表时设置默认值约束。

如果创建数据表时给字段设置默认值约束,只需要在定义字段时使用如下格式即可。

<字段名><数据类型>DEFAULT<默认值>;

接下来,通过一个案例演示创建数据表时设置默认值约束。

例如,创建一个存放学生信息的班级表class01,学生年龄的默认值设置为18

具体SQL语句及执行结果如下:

mysql> CREATE TABLE class01(-> id int primary key,-> name varchar(16) not null,-> age int DEFAULT 18-> );
Query OK, 0 rows affected (0.02 sec)

创建语句执行成功,使用DESC语句检查默认约束是否执行成功:

mysql> DESC class01;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(16) | NO   |     | NULL    |       |
| age   | int         | YES  |     | 18      |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

从执行结果中可以看出age字段中的Default列下面对应的信息为18,说明我们设置默认值成功了。

修改数据表时添加默认值约束。

修改数据表时添加默认值约束与修改数据表时添加非空约束类似,可以在ALTER TABLE语句中通过使用MODIFY或CHANGE重新定义字段的方式添加默认值约束。

接下来修改class01中id字段的默认值,默认值为1,具体SQL语句及执行结果如下:

mysql> ALTER TABLE class01 MODIFY id int DEFAULT 1;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

创建语句执行成功后使用DESC语句查看设置默认约束是否成功:

mysql> DESC class01;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | 1       |       |
| name  | varchar(16) | NO   |     | NULL    |       |
| age   | int         | YES  |     | 18      |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

从上述语句执行结果可以看出,id字段的默认值为1,说明默认约束设置成功了。

删除默认约束

当数据表的某列不需要默认约束时,可以通过修改表的语句删除默认值约束。删除默认约束也是通过ALTER TABLE语句中的MODIFY或CHANGE重新定义字段的方式来实现。

删除id字段的默认约束:

mysql> ALTER TABLE class01 MODIFY id INT;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

删除语句执行成功,使用DESC语句查看是否成功删除:

mysql> DESC class01;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(16) | NO   |     | NULL    |       |
| age   | int         | YES  |     | 18      |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

从结果中可以看到id字段没有了默认约束,成功删除了默认约束。

5.自动增长(自增约束)

设置自动增长

在企业开发中,有时想要数据表为插入的新记录自动生成唯一的ID。例如,在员工管理系统中,当公司HR每次添加员工信息时,如果都需要手动填写员工工号,则会导致新增之前还需要想办法查询最新的工号是多少,也有可能查询出最新工号再进行手动插入时,发现该工号已被其他HR提前添加。此时,可以使用AUTO_INCREMENT解决这类问题,AUTO_INCREMENT可以为新行自动生成唯一标识。

在字段中设置AUTO_INCREMENT的基本语法格式如下。

字段名 数据类型 AUTO_INCREMENT;

使用AUTO_INCREMENT时,需要注意以下4点。

(1)一个数据表中只能有一个字段设置AUTO_INCREMENT,设置AUTO_INCREMENT字段的数据类型可以是整数和浮点类型,并且该字段必须定义为键,如UNIQUE、PRIMARY KEY。

(2)如果为自动增长字段插入NULL,则该字段会自动增长值;如果插入的是一个具体值,则不会自动增长值。

(3)默认情况下,设置AUTO_INCREMENT的字段的值是从1开始自增。如果插入一个大于自动增长值的具体值,则下次自动增长的值为字段中的最大值加1。

(4)使用DELETE删除记录时,自动增长值不会减少或填补空缺。

下面通过班级表class01为大家演示自增约束:

class01中的id字段是有主键约束的,因此是有键的存在的,可以设置自增约束

具体SQL语句及执行结果如下:

mysql> ALTER TABLE class01 MODIFY id int AUTO_INCREMENT;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

这是通过重新定义的方式来添加自增约束,使用DESC语句检查是否添加成功:

mysql> DESC class01;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(16) | NO   |     | NULL    |                |
| age   | int         | YES  |     | 18      |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

在上述执行结果中,id字段中Extra列对应的信息可以看出,我们成功的给id字段添加了自增约束。

我们还可以在创建数据表的时候给字段设置自动增长,只需要在你要设置自动增长的字段的数据类型后面添加AUTO_INCREMENT就可以了。我就不在演示了。

删除自动增长

在MySQL中,如果你想要删除一个字段的自动增长(AUTO_INCREMENT)属性,你可以使用ALTER TABLE语句来修改这个字段。MODIFY方法和CHANGE方法都可以。我演示使用的是MODIFY方法。具体SQL语句及执行结果如下。

mysql> ALTER TABLE class01 MODIFY id int;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> DESC class01;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(16) | NO   |     | NULL    |       |
| age   | int         | YES  |     | 18      |       |
+-------+-------------+------+-----+---------+-------+

从执行结果来看自动增长已经成功的删除了

过年耽误了几天,连夜补出来的,感谢大家的支持,大家新年快乐啊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能专题:2024亚太地区生成式人工智能应用与监管报告

今天分享的是人工智能系列深度研究报告&#xff1a;《人工智能专题&#xff1a;2024亚太地区生成式人工智能应用与监管报告》。 &#xff08;报告出品方&#xff1a;德勤&#xff09; 报告共计&#xff1a;20页 来源&#xff1a;人工智能学派 知识更新&#xff1a;了解传统…

IP地址+子网掩码+CIDR学习笔记

目录 一、IP地址 1、表示方法&#xff1a; 2、特殊IP地址 二、子网掩码 1、判断网络位和主机位 2、子网划分 三、无分类编址CIDR 1、CIDR路由汇聚 汇聚规则&#xff1a; 汇聚ID&#xff1a; 2、最佳路由匹配原则 一、IP地址 1、表示方法&#xff1a; 机器中存放的…

(免费领源码)java#springboot#mysql医院自助服务系统74853-计算机毕业设计项目选题推荐

目 录 摘要 1 绪论 1.1研究意义 1.2研究背景 1.3springboot框架介绍 1.3论文结构与章节安排 2 医院自助服务系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分…

JWT登录验证前后端设计与实现笔记

设计内容 前端 配置全局前置路由守卫axios拦截器登录页面和主页 后端 JWT的封装登录接口中间件放行mysql数据库的连接 详细设计 路由设计 配置全局前置守卫&#xff0c;如果访问的是登录页面则放行&#xff0c;不是则进入判断是否有token&#xff0c;没有则拦截回到登录…

《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)

文章目录 10.1 构建微服务架构 - 探索 Go 语言的微观世界10.1.1 基础知识讲解10.1.2 重点案例&#xff1a;订单处理系统订单服务测试服务 10.1.3 拓展案例 1&#xff1a;用户认证服务安装所需的包实现用户模型和存储实现 JWT 生成和验证实现认证服务测试服务 10.1.4 拓展案例 2…

HarmonyOS—@State装饰器:组件内状态

State装饰的变量&#xff0c;或称为状态变量&#xff0c;一旦变量拥有了状态属性&#xff0c;就和自定义组件的渲染绑定起来。当状态改变时&#xff0c;UI会发生对应的渲染改变。 在状态变量相关装饰器中&#xff0c;State是最基础的&#xff0c;使变量拥有状态属性的装饰器&a…

SpringBoot RabbitMQ收发消息、配置及原理

今天分析SpringBoot通过自动配置集成RabbitMQ的原理以及使用。 AMQP概念 RabbitMQ是基于AMQP协议的message broker&#xff0c;所以我们首先要对AMQP做一个简单的了解。 AMQP (Advanced Message Queuing Protocol) is a messaging protocol that enables conforming client a…

(三十九)大数据实战——Prometheus监控平台的部署搭建

前言 Prometheus监控&#xff08;Prometheus Monitoring&#xff09;是一种开源的系统监控和警报工具。它最初由SoundCloud开发并于2012年发布&#xff0c;并在2016年加入了云原生计算基金会&#xff08;CNCF&#xff09;。Prometheus监控旨在收集、存储和查询各种指标数据&am…

GEE使用 Sentinel-1 SAR影像 和 Otsu 方法绘制洪水地图

洪水是世界上最常见、破坏性最大的自然灾害之一,造成了巨大的生命和财产损失。此外,随着气候变化的影响,近年来,洪灾变得更加频繁和不可预测。为了最大限度地减少生命和财产损失,必须迅速发现洪水蔓延的情况,并及时采取必要的干预措施。洪水蔓延探测大多使用光学传感器或…

大模型基础架构入门

大模型架构 Prefix Decoder 和 Causal Decoder 和 Encoder-Decoder 区别 在于 attention mask不同&#xff1a; https://zhuanlan.zhihu.com/p/626310493 为何现在的大模型大部分是Decoder only结构&#xff1f; https://www.zhihu.com/question/588325646/answer/335725261…

JVM-JVM中对象的结构

对象内存布局 对象里的三个区&#xff1a; 对象头&#xff08;Header&#xff09;&#xff1a;Java对象头占8byte。如果是数组则占12byte。因为JVM里数组size需要使用4byte存储。 标记字段MarkWord&#xff1a; 用于存储对象自身的运行时数据&#xff0c;它是synchronized实现轻…

STM32——OLED菜单

文章目录 一.补充二. 二级菜单代码 简介&#xff1a;首先在我的51 I2C里面有OLED详细讲解&#xff0c;本期代码从51OLED基础上移植过来的&#xff0c;可以先看完那篇文章&#xff0c;在看这个&#xff0c;然后按键我是用的定时器扫描不会堵塞程序,可以翻开我的文章有单独的定时…

MIPS指令集处理器设计(支持64条汇编指令)

一、题目背景和意义 二、国内外研究现状 (略) 三、MIPS指令集处理器设计与实现 (一).MIPS指令集功能性梳理 1.MIPS指令集架构 (1).mips基础指令集格式总结 MIPS是&#xff08;Microcomputer without interlocked pipeline stages&#xff09;[10]的缩写&#xff0c;含义是…

C++友元->全局函数做友元、类做友元、成员函数做友元

全局函数做友元代码&#xff1a; #include<iostream> using namespace std; #include<string> //建筑物类 class Building { //告诉编译器 goodGay全局函数 是 Building类的好朋友&#xff0c;可以访问类中的私有内容 friend void goodGay(Building * bu…

第14讲投票帖子详情实现

投票帖子详情实现 后端,根据id查询投票帖子信息&#xff1a; /*** 根据id查询* param id* return*/ GetMapping("/{id}") public R findById(PathVariable(value "id")Integer id){Vote vote voteService.getById(id);WxUserInfo wxUserInfo wxUserInf…

电商+支付双系统项目------设计数据库

这篇文章将详细介绍电商支付双系统项目的数据库设计。数据库在该项目中扮演着至关重要的角色&#xff0c;它负责存储和管理用户信息、商品数据、订单记录以及支付交易等关键数据。通过精心设计和优化数据库结构&#xff0c;可以实现高效的数据存储和检索&#xff0c;确保系统的…

JavaScript中的常见算法

一.排序算法 1.冒泡排序 冒泡排序比较所有相邻的两个项&#xff0c;如果第一个比第二个大&#xff0c;则交换它们。元素项向上移动至 正确的顺序&#xff0c;就好像气泡升至表面一样。 function bubbleSort(arr) {const { length } arrfor (let i 0; i < length - 1; i)…

详解自定义类型:枚举与联合体!

目录 ​编辑 一、枚举类型 1.枚举类型的声明 2.枚举类型的优点 3.枚举类型的使用 二、联合体类型(共用体&#xff09; 1.联合体类型的声明 2.联合体的特点 3.相同成员的结构体和联合体的对比 4.联合体大小的计算 5.用联合体判断大小端 三.完结散花 悟已往之不谏&…

深入浅出了解谷歌「Gemini大模型」发展历程

Google在2023年12月官宣了Gemini模型&#xff0c;随后2024年2月9日才宣布Gemini 1.0 Ultra正式对公众服务&#xff0c;并且开始收费。现在2024年2月14日就宣布了Gemini 1.5 Pro&#xff0c;史诗级多模态最强MoE首破100万极限上下文纪录&#xff01;&#xff01;&#xff01;Gem…

数据分析 — Pandas 数据加载、存储和清洗

目录 一、文件读取1、常见文件读取函数2、read_csv()3、read_table()4、read_excel()5、read_json()6、read_html()7、大文件读取 二、数据保存1、csv2、excel3、json4、html5、MySQL1、连接数据库2、MySQL 存储到本地3、本地存储到 MySQL 三、数据清洗1、处理缺失值1、判断数据…