MySQL字段属性应该尽量设置为NOT NULL

除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议,请往下看。

1、首先,我们要搞清楚空值("") 和 “NULL” 的概念:
       1)空值是不占用空间的
  2)MySQL中的NULL其实是占用空间的

所谓的NULL就是什么都没有,连\0都没有,\0在字符串中是结束符,但是在物理内存是占空间的,等于一个字节,而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的字段查出来,否则就难以区分到底是没有关联记录还是其他情况

 

posted @ 2017-11-22 14:26  小昌君  阅读(14979)  评论(2编辑  收藏  举报