MySQL:约束

593 阅读3分钟
  • 约束

约束适用于确保数据库的数据满足特定的商业规则。在mysql中,约束包括了:NOT NULL(非空),UNIQUE(唯一),primary key(主键),foreign key(外键)和check五种。

主键约束:

   基本使用: 字段名 字段类型 primary key
   例:

image.png 主键用于唯一的标示表行的数据,一旦主键约束定义后,该列就不能重复。

image.png 由于存在主键约束,而第一条和第三条添加的数据的“id”值是一样的,而我们上面主键约束是不允许出现这种情况的,自然而然,第三条语句是添加不了的,出现了错误。

主键不能为null:

image.png 可以看到我们添加的这个语句,id为null,而主键约束不允许为null,所以这样执行语句同样会报错。

一张表只能有一个主键,但是可以是复合主键。那么什么是复合主键?

image.png

如上图,我们创建了一个有复合主键的表,当我们插入数据的时候,只有“id”和“name”同时相同的时候,才会出现主键错误,只是其中一个相同,数据依然可以加入。

image.png 这里只有第二条和第三条只是id或者name中的其中一个相同,而第四条是这两个都相同,因此第四条语句会执行失败。

主键的指定方式有两种: 1.直接写在字段名后面,就是我们上面的那种。 2.在表定义的最后写主键定义:

image.png

非空约束:

如果在列上定义了非空,那么当插入数据时,必须为列提供数据。通俗点就是你不能插入一个空数据。

唯一约束:

基本使用:字段名 字段类型 UNIQUE
当定义了唯一约束后,该列值是不能重复的

如果没有指定not null,则unique 字段可以有多个null,一张表可以不只有一个unique字段。

image.png

外键约束:

用于定义主表和从表之间的关系:外键约束要定义在从表上,主表则必须具有主表约束或是unique约束。当定义了外键约束后,要求外键列数据必须在主表的主键列存在或者为null
FOREUGN KEY(本表字段名) REFERENCES 主表名(主键名或者unique字段名)

image.png 学生表的class_id和班级表的id形成外键约束后,如果只删除班级表的id = 200或者只删除学生表class_id = 200的数据都会删除失败,需要同时删除。

image.png

外键细节说明:
1.表的类型是innodb,这样的表才支持外键
2.外键字段的类型要和主键字段的类型一致(长度可以不同)
3.外键字段的值,必须在主键字段中出现过,或者为null(前提是外键字段允许为null4.一旦建立主外键的关系,数据就不能随意更改了。

check约束:

用于强制行数据必须满足的条件,假定在某列上定义了check约束,并要求该列值在某一个范围内,如果该列值不在规定范围内,就会报错

image.png