除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议,请往下看。
1、首先,我们要搞清楚空值("") 和 “NULL” 的概念:
- 空值是不占用空间的
- MySQL 中的 NULL 其实是占用空间的
2、其次,在数据库里是严格区分的,任何数跟 NULL 进行运算都是 NULL, 判断值是否等于 NULL,不能简单用=,而要用 IS NULL 关键字。
3、数据库的字段 col1 设为 NOT NULL, 仅仅说明该字段不能为 NULL, 也就是说只有在这种情况下数据库会报错
INSERT INTO table1(col1) VALUES(NULL);
而这种情况不会报错。
INSERT INTO table1(col1) VALUES('');
如果字段是自增 ID,第一句不会报错,这不能说明是可以为 NULL,而是 数据库系统会根据 ID 设的缺省值填充,或者如果是自增字段就自动加一等缺省操作。
4、含有空值的列很难进行查询优化,而且对表索引时不会存储 NULL 值的,所以如果索引的字段可以为 NULL,索引的效率会下降很多。因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用 0、一个特殊的值或者一个空串代替空值。
5、联表查询的时候,例如 LEFT JOIN table2,若没有记录,则查找出的 table2 字段都是 null。假如 table2 有些字段本身可以是 null,那么除非把 table2 中 not null 的字段查出来,否则就难以区分到底是没有关联记录还是其他情况
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于