乐趣区

关于mysql:MySQL约束

束缚:

​ 束缚对象:字段

​ 如何束缚:与字段类型配合一起束缚字段,如不合乎字段类型和束缚的写操作,则会被回绝。

​。unsigned/signed

​ unsigned 无符号(<=0)必须与数值类型配合应用

​ signed 有符号(正数 0 负数)默认,必须与数值类型配合应用

​。not null:非空束缚(不能为空)

​ 为什么生产中倡议应用 not null

​ 容许为 null 的状况下,会有哪些不利的影响?

​ ①. 空值的字段增加索引,空值会寄存在 b +tree 最右边,造成索引性能降落

​ ②. 造成磁盘和内存空间的节约。给空值字段增加索引,会多占用一个字节

​ ③. 造成 count(*) 和 count(name) 统计后果不精确

​ 在 innodb 存储引擎下 select count(*) 为什么慢

​ mvcc 个性,innodb 存储引擎只能全表扫描,累积计数

​。default:给字段指定默认值

​。unique:唯一性束缚(字段值不能反复,然而能够为空)

​ 在生产中,给已有数据增加 unique,前提必须是已有数据不能有反复值

​。auto_increment:自增束缚,必须是与整型配合应用

​ auto_increment 5.7 自增值回溯的问题

​ 起因:5.7 版本表的 auto_increment 是基于内存去存储的,不会长久化到磁盘上,咱们在重启数据库之后,内存中的数据被开释,会从新计算作为下一个自增值。

​ 8.0 版本解决了自增值回溯的问题。

​。primary key:既不能为空也不能反复

退出移动版