首先说一点,null 和空值不一样,空值不占用空间,null 占用空间,所以字段设置成 not null 之后仍然可以插入空值。
字段设置成 not null 的原因有以下几点:
1.NULL 值会影响一些函数的计算,如 count 函数遇到 NULL 值,这条记录不会统计在内。
2.NOT IN 在有 NULL 值的情况下返回的结果都是空值。
3.B 树不存储 NULL,所以索引用不到 NULL,会造成第一点钟说的统计不到的情况。
select * from `user` where username NOT IN (select username from `user` where id != 0),这条查询语句应该查到 zhangsan 这条数据,但是结果显示为 null。
MySQL 在进行比较的时候,NULL 会参与字段的比较,因为 NULL 是一种比较特殊的数据类型,数据库在处理时需要进行特数处理,增加了数据库处理记录的复杂性。