MYSQL中的约束
一、数据库约束是什么数据库约束就是给数据库对数据的硬性要求不满足数据库约束的数据不会被插入到数据库中1.not null非空约束定义表时某列不允许为null则可以为这一列设置not null举例如下。通过desc查看student表的字段结构可知s_ id这一字段被设置not null所以null这一列显示no意思是s_ id这一字段不能为空。可以看到插入空值时会报错显示不能为空。2.defalut默认值约束defalut约束用于往列中插入默认值如果设置了defalut约束那一列没有值插入那么他就会插入设置好的默认值。可以看到在不指定年龄时年龄age这一列因为设置了默认值约束所以张三的年龄默认被设置为了18。通过desc来看age的默认值被设置为了18。要注意的是手动指定age为null时还是会显示null。3.unique唯一约束指定了唯一约束的列改列的值不能在所有记录中重复如手机号身份证号码等。通过desc可以看到phone字段已经设置了unique约束。尝试插入两个相同的电话号时发生报错说明unique约束使这一列不能插入相同的数据。设置不同的电话号时即可插入。需要注意设置了unique约束后依然可以插入相同的两个null。因为在sql里nullnull是不成立的。4.primary key主键约束主键约束就是not nullunique即非空约束和唯一约束的集合体而且一张表中只能有一个主键约束可以是单个字段也可以是多个字段组合。可以看到not null和unique与primary key的效果是一样的都会使s_id变为主键字段。通常设置auto_increment自增来让主键列自己增长。可以看到这就是自增主键。没有插入主键值但是主键值会自己增加。给phone加上unique约束后写入两个相同的电话号模拟插入失败的情景然后修改后插入我们发现自增主键列里1完了就是3,2不见了这是因为第二句插入失败后导致s_id为2的主键值作废然后就到了3这说明自增主键的一个特点是如果某条记录写入失败则新生成的主键值会作废。我们继续手动指定一个主键值可以发现下一次自增从主键值最大开始也说明了自增主键的值可以不连续。这是没有影响的主键只需要唯一且不为空不需要连续。复合主键是由多个列组成的主键此时s_id和name共同组成复合主键重复插入两次这个时报错此时插入数据由s_id和name两个同时决定两个数据中有一个不一样即满足了唯一的条件即可插入5.foreign key(外键约束)要点外键用于定义主表和从表之间的关系。外键定义在从表的列上主表关联的列必须是主键或者唯一约束。当定义外键后要求从表中的外键列数据必须在主表的主键或唯一列存在或为null。基本语法foreign key (从表中当做外键的列) references 主表的名字 (主表主键或唯一约束的列的名字);key列的值为MUL表示class_number为student表的外键约束。外键约束如何起作用例如先看看class表和student表自增主键为id列外键列为class_number。此时插入class_number为5的就会报错因为class表中没有id为5的班级此时错误信息就显示外键约束错误。这时把class_number改为4即可成功插入因为class表中有id为4的班级此时表示的就是赵六和钱七都是class表中id为4的班级里的学生也就是他俩是同班同学。若要删除主表class发现会报错这时若要删除主表就要先删除从表再删除主表。6.check约束在mysql8.0.16版本开始支持check约束可以应用于一个或多个列用于限制列中可以接受的数据值从而保证数据的完整性和准确性。语法check条件这里这句的意思就是age必须大于18才能正常插入student表数据。此时插入age为17的数据时就会报check约束错误。因为不满足check约束的条件。但是null值还是可以插入的满足age大于18时插入成功