主页 > 人工智能  > 

MySQL——数据库约束

MySQL——数据库约束
一、什么是数据库约束?

数据库约束是用于强制数据完整性的规则,包括:主键(唯一标识)、外键(关联其他表)、唯一(禁止重复)、非空(值必填)、检查(符合条件)等,确保数据有效且关系正确。


二、约束类型


三、NOT NULL非空约束 

定义:定义表示,若某些列不允许为空,就可以为列添加非空约束。

 示例:

比如创建⼀个学生表,学生名为NULL时,这条记录是不完整的 :

我们可以通过将name字段设置为非空约束来解决:


四、DEFAULT默认值约束 

定义:DEFAULT 约束⽤于向列中插入默认值,如果没有为列设置值,那么会将默认值设置到该列 

示例:

 重构学生表,新增年龄列:


五、UNIQUE唯一约束

定义:指定了唯一约束的列,该列的值在所有记录中不能重复,比如⼀个人的身份证号,学生的学号等。

示例:

 重构学生表,新增学号列:


六、PRIMARY KEY主键约束

 定义:主键约束唯一标识数据库表中的每条记录。             主键必须包含唯一的值,且不能包含 NULL 值。              每个表只能有一个主键,可以由单个列或多个列组成。             通常为每张表都指定一个主键,主键列建议使用BIGINT类型

示例:

(一)基础用法

重构学生表,为id列添加非空和唯一约束:

查看表结构,添加非空唯一约束之后key列为PRI(主键):

当id列相同时触发主键冲突:

通常将主键列设置为自增长,让数据库维护主键值:

插入数据时不必设置主键列的值:

查看表结构,Extra列显示auto_increment 表示自增 :

如果数据行写入失败(如语法错误),新生成的主键值作废:

主键值可以不连续,且下次自增从主键最大值开始:


(二)其它情况

<1>主键或唯一键冲突时的更新操作:

语法:INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ...

(如已有id为100,下次通过这个id产生冲突时,会将id为100的数据行进行跟新)

示例:  插入ID为100,学号为100100的学生记录时,报主键冲突:

可以使用以上语法,如果插⼊时有冲突则更新当前列的值:


<2>替换,如果存在冲突则替换,不存在冲突则插入

语法:

其实就是将插入语句的insert改为replace

示例:

写入或更新id为101的记录(101记录存在,更新值):

写入或更新id为102的记录(102记录不存在,直接插入):


<3> 一个表中不能有多个主键:


<4>复合主键:由多个列共同组成的主键,主键是否冲突以多个列的组成进行判定

重构学生表并设置符合主键:

插入两个相同数据:

修改插入的第二个数据的任意一列即可插入成功:


七、FOREIGN KEY外键约束

 定义:

外键用于定义主表和从表之间的关系

外键约束主定义在从表的列上,主表关联的列必须是主键或唯⼀约束

当定义外键后,要求从表中的外键列数据必须在主表的主键或唯⼀列存在或为null

语法:foreign key 从表字段 references 主表字段

示例:

创建班级表(主表)并初始化数据:

重构学生表(从表),添加外键约束:

查看表结构,Key列的值为MUL表示外键约束的列:

正常插入数据:

再次向student插入一条数据,班级编号为100:

向student中插入一条数据,id为null:

分别删除class表中id为5和2的两条数据:


八、CHECK约束

 定义:可以应用于⼀个或多个列,用于限制列中可接受的数据值,从而确保数据的完整性和准确性。

语法:check(条件)

示例:

重构学生表,要求年龄不小于60,性别只能是男或女:

创建新表,c1的值不能为0,c2的值必须大于0,c3的值不小于c2:

 

标签:

MySQL——数据库约束由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“MySQL——数据库约束