//数据库的约束
约束是针对于数据库中输入数据时进行作用,进而限制输入的内容的范围。
数据库中的几类约束---约束是在创建表时针对列进行约束,在输入/修改数据时进行限制
1.not null----约束列是否为空
not null的使用
表示在str表中进行输入数据时,a列不能为空
通过观察表的结构,可知在NULL(是否可为空)处,为NO,表示此列不能为空
2.unique----约束输入/修改列中值时是否唯一存在
由此图可知,当在stm表中的a列重复输入1时,会报错,Duplicate entry ‘1’ for key ‘a’ 表示重复的1被输入到被key(键)修饰的a的列中
通过观察stm表的结构,可知在Key处为UNI ,UNI表示唯一约束键
3.default----设置列的默认值
可知未进行default操作的表未进行输入值时,默认值为null
在创建表示,通过default对列进行约束,将a列的默认值修改为0,将b列的默认值修改为h
4.PRIMARY KEY---主键,在表中用于对行进行‘身份标识’操作
在表中的每一条行都是一条记录,例如在表中输入人的信息时,创建一个有两列的表,一列为人名,一列为身份证号码,身份证号码即可作为人的身份标识(身份标识必须是唯一的(一定存在,且一定不重复)),所以主键也可视为具有unique+not null的功能
PRI表示为主键约束
注意一个表中只能有一个主键
在上述设置主键时,各行的标识符都是通过设计者自己输入的,但也可让系统自动生成,通过在primary key后加auto_increment关键字表示该主键是一个自增主键
自增主键默认从1开始增加,每次加1
注:若将一个表中的自增的这几行删除,再次添加数据,则自增从被删除的下一个数字开始,不会再从一开始自增,因为自增的数字被使用了,另外在自增时,若手动设置一个标识符(注意设置在自增数字之后的数字,若下述图设置1标识符,则自增是从6开始自增),则之后的自增从手动标识符开始向后自增
若该列被自增主键修饰,则在输入数据时在对应位置输入null,即表示让系统对该列进行自增
5. foreign key 外键---用于对不同表之间进行约束
外键的使用
注意外键的使用与其他约束键使用的区别:外键是在创建表的所有列之后进行声明的,foreign key (列名) references 表名 (列名) ,表明该表的(列名)被references后的 表名的(列名)所约束
此处students表的中的classId列被class表中的classId列所约束,通过外键将两表中的classId列与classId列进行联系
students受到class的约束,就把class叫做students的父表(parent),students就是class的子表(child)
此行数据可被成功输入,因为创建students表时,该表被外键修饰的列所要输入的数据必须要属于父表中被关联的列中的数据,该图中输入子表对应的classId列的数据1在父表classId中存在,所以可成功输入
该图中输入子表对应的classId列的数据4在父表classId中不存在,所以报错
在子表中输入/修改关于被外键联系的列的数据时,首先会判断所操作的被外键联系的列的数据是否在父表中被联系的该列中存在,若存在,则可成功进行操作,否则报错,对于输入/修改没被外键联系的列的数据时,则无影响
对于父表和子表,若要修改父表中被外键关联的列的数据时,若在子表中被外键关联的列中包含父表相关列的数据时,则父表中被包含数据的行的相关列数据不能修改
举例:
在子表中被外键关联的列中包含父表相关列classId为1的数据,所以在修改父表时,若修改关于classId=1的行中classId的值会报错,但若修改className则无影响
在子表中被外键关联的列中包含父表相关列classId为1的数据,在修改父表时,若修改不包含classId=1行的列的数据,则可行
注意:在使用外键时,子表中被关联的列要被unique或primary key约束(确保唯一性),否则无法使用外键
子表中被关联的列未确保唯一性
子表中被关联的列通过unique确保唯一性
子表中被关联的列通过primary key确保唯一性