MySQL数据表的约束

数据表约束:对于某一列的值能添加哪些内容做了一定的限制,这种限制的手段就称为约束。

(一)约束的类型

NOT NULL  指示某列不能存储 NULL 值。
UNIQUE 保证某列的每行必须有唯一的值。
DEFAULT 规定没有给列赋值时的默认值。
PRIMARY KEY  NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。 
FOREIGN KEY  保证一个表中的数据匹配另一个表中的值的参照完整性。 
CHECK  保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 CHECK子句。(MySQL8.016版本后才支持check约束)

(二)非空约束(NOT NULL)

           若在某一属性定义时规定该属性 not null ,不能将空值存放在该属性中。

MySQL数据表的约束_第1张图片

 在创建表之后添加非空约束,必须将当前表中要添加非空约束的属性为null的行先删除或者修改为非空。

MySQL数据表的约束_第2张图片

MySQL数据表的约束_第3张图片

(三)唯一约束(UNIQUE)

        指的是对应字段是唯一的,不能重复。一个表的唯一约束可以有多个

MySQL数据表的约束_第4张图片

MySQL数据表的约束_第5张图片

null值不受唯一键的约束

MySQL数据表的约束_第6张图片

 查看唯一约束 show keys from tb_name;

创建表之后想修改某一属性为唯一约束:alter table tb_name add unique(属性名称); 

注意:添加前要保证当前表中要添加的属性没有重复值。

MySQL数据表的约束_第7张图片

(四)默认值约束 (DEFAULT)

规定了默认值的表,在插入数据时若没有指定该列,则使用默认值插入数据

MySQL数据表的约束_第8张图片

若显示对默认值的列插入null值,不会触发默认值

MySQL数据表的约束_第9张图片

(五)主键约束(PRIMARY KEY)

MySQL数据表的约束_第10张图片

1.primary key = unique + not null   

在MySQL中,某个属性使用 unique + not null -->默认会将该属性置为主键!(第一个unique + not null),因为一个表中只能有一个主键

MySQL数据表的约束_第11张图片

MySQL数据表的约束_第12张图片

MySQL数据表的约束_第13张图片

(2)主键列的值不能重复,不能为null

MySQL数据表的约束_第14张图片

(3)删除表中主键

alter table tb_name drop primary key;

MySQL数据表的约束_第15张图片

(4)创建表之后添加主键     前提:当前表中没有主键约束

alter table tb_name add primary key(作为主键的属性名称);

(4-1)单一主键

MySQL数据表的约束_第16张图片

(4-2)联合主键 :主键约束可以由多列共同组成

MySQL数据表的约束_第17张图片

MySQL数据表的约束_第18张图片

(5)自增主键 auto_increment

一般来说作为主键的列都是int 或者是定长的char 类型,且因为主键不重复且不为空,因此我们可以将主键的增长交给数据库自动执行。

(5-1)自增主键可以显示的插入 null 或者不写,都会触发自增操作

MySQL数据表的约束_第19张图片

 (5-2)自增主键是以当前已经出现过的数字最大值 + 1;

(5-2-1)delete 删除表数据

MySQL数据表的约束_第20张图片

 (5-2-2)truncate删除表数据

truncate 表数据后,插入数据会还原自增主键的值

MySQL数据表的约束_第21张图片

 (5-3)可以显示给自增主键插入一个值

下次触发自增操作时,仍然是以当前出现过的数字最大值作为基准自增

MySQL数据表的约束_第22张图片

MySQL数据表的约束_第23张图片

(5-4)插入失败,报错也会使用自增主键

(六)外键约束 (FOREIGN KEY)

外键用于关联其他表,涉及多个表之间的关联约束,语法:

                foreign key (当前表中的哪个属性) references 主表(关联属性)

 MySQL数据表的约束_第24张图片

 (1)添加时,主表中的关联属性必须存在相应值后才能在从表(当前表)中插入数据。

student表中 class_id关联class表的id属性,student表中插入数据时,属性class_id要能正确插入,class表中的id值必须存在。

MySQL数据表的约束_第25张图片

 (2)删除时,先看从表,从表中外键约束的属性关联的所有记录都删除后才能在执行主表的删除操作。

MySQL数据表的约束_第26张图片

 MySQL数据表的约束_第27张图片

 

你可能感兴趣的:(mysql,数据库)