-
约束
约束适用于确保数据库的数据满足特定的商业规则。在mysql中,约束包括了:NOT NULL(非空),UNIQUE(唯一),primary key(主键),foreign key(外键)和check五种。
主键约束:
基本使用: 字段名 字段类型 primary key
例:
主键用于唯一的标示表行的数据,一旦主键约束定义后,该列就不能重复。
由于存在主键约束,而第一条和第三条添加的数据的“id”值是一样的,而我们上面主键约束是不允许出现这种情况的,自然而然,第三条语句是添加不了的,出现了错误。
主键不能为null:
可以看到我们添加的这个语句,id为null,而主键约束不允许为null,所以这样执行语句同样会报错。
一张表只能有一个主键,但是可以是复合主键。那么什么是复合主键?
如上图,我们创建了一个有复合主键的表,当我们插入数据的时候,只有“id”和“name”同时相同的时候,才会出现主键错误,只是其中一个相同,数据依然可以加入。
这里只有第二条和第三条只是id或者name中的其中一个相同,而第四条是这两个都相同,因此第四条语句会执行失败。
主键的指定方式有两种: 1.直接写在字段名后面,就是我们上面的那种。 2.在表定义的最后写主键定义:
非空约束:
如果在列上定义了非空,那么当插入数据时,必须为列提供数据。通俗点就是你不能插入一个空数据。
唯一约束:
基本使用:字段名 字段类型 UNIQUE
当定义了唯一约束后,该列值是不能重复的
如果没有指定not null,则unique 字段可以有多个null,一张表可以不只有一个unique字段。
外键约束:
用于定义主表和从表之间的关系:外键约束要定义在从表上,主表则必须具有主表约束或是unique约束。当定义了外键约束后,要求外键列数据必须在主表的主键列存在或者为null
FOREUGN KEY(本表字段名) REFERENCES 主表名(主键名或者unique字段名)
学生表的class_id和班级表的id形成外键约束后,如果只删除班级表的id = 200或者只删除学生表class_id = 200的数据都会删除失败,需要同时删除。
外键细节说明:
1.表的类型是innodb,这样的表才支持外键
2.外键字段的类型要和主键字段的类型一致(长度可以不同)
3.外键字段的值,必须在主键字段中出现过,或者为null(前提是外键字段允许为null)
4.一旦建立主外键的关系,数据就不能随意更改了。
check约束:
用于强制行数据必须满足的条件,假定在某列上定义了check约束,并要求该列值在某一个范围内,如果该列值不在规定范围内,就会报错