以下文章来源于何先振,责编小何

检查约束的作用是检查某个字段的值,是否符合要求。一般指的是值的范围。
例如:性别这个字段只能是男或女。
MySQL中使用check关键字进行添加检查约束。
MySQL5.7版本可以使用check约束,但是check约束对数据验证没有任何作用,不会有报错信息和警告信息。
MySQL8.0就可以使用check约束,插入不符合规范的值会报错。
检查约束,举栗子:
创建表

MySQL5.7版本,添加了check约束,插入不符合规范的数据也可以添加进去。

使用MySQL8.0演示,创建check约束

插入数据时不在check 范围就报错

插入在范围的值就不报错,插入数据成功。


默认约束,加了默认约束,如果插入数据时不指定字段的值,就会默认为默认约束指定的值。
默认约束,举栗子:
创建表,添加默认约束

查看表信息,已经添加了默认约束

插入数据时,不指定性别,会给默认值

alter table时,添加默认约束


查看添加成功

删除默认约束

查看删除成功

关于约束面试问题:
问题1:为什么建表时,加not null 或者default?
答:不想让表中出现null值。
问题2:为什么不想要 null值出现?
答:不好比较,null是一种特殊值。比较时只能用专门的is null 和 is not null来比较。碰到运算符,通常返回null。
程序中取数时有null值,容易报null指针异常。
效率不高,影响提高索引效果。
问题3:带auto_increment约束的字段值是从1开始的嘛?
在MySQL中,默认auto_increment的初始值是1,每新增一条记录,字段值自动加1,也可以插入第一条记录时指定插入值,指定插入之后,会在原有值递增。
问题4:每个表都可以任意选择存储引擎的嘛?
外键约束,不能跨引擎使用。
MySQL支持多种存储引擎,每个表都可以指定一个不同的存储引擎。但是如果表之间有外键约束的话,需要保证外键约束的表用相同的存储引擎。
所以每个表并不是随意使用存储引擎的。





