首页 > 数据库技术 > 详细

为什么建议MySQL列属性尽量用 NOT NULL?

时间:2019-08-09 13:31:54      阅读:110      评论:0      收藏:0      [点我收藏+]

之前面试的时候面试官问在数据库中,两个null是相等的吗?当时天真的我回答应该是吧,其实null是一个空值,如果非要必要比较的话,两个null比较应该还是null。在 MySQL 中,NULL 表示不知道的数据。

字段尽可能用NOT NULL,而不是NULL,除非特殊情况。

技术分享图片
上图是《高性能 MySQL》4.1节中对于null值的描述,由此看来,把null改为not null对于提升索引的性能并没有什么显著的提升。避免使用null值的目的,是为了代码的可读性和可维护性。也为了避免下文出现的一些稀奇古怪的问题。
如下建两个表t1,t2,其中一个表的name字段允许为空,另一个表的name字段不允许为空,分别为name字段建立索引,SQL语句如下。

技术分享图片

技术分享图片

技术分享图片

技术分享图片

#### 1、NOT IN、!= 等负向条件查询在有 NULL 值的情况下返回非空行的结果集 1、NOT IN、!= 等负向条件查询在有 NULL 值的情况下返回非空行的结果集
比如上例中的 t2,我执行如下 SQL 语句。

SELECT * from t2 where name != ‘张三‘

预期返回id为1的行,结果啥都没有。
再举个例子

select * from t2 where name not in (select name from t2 where id!=1)

同样也是返回空结果集。
####2、使用 concat 函数拼接时,首先要对各个字段进行非 NULL 判断,否则只要任何一个字段为空都会造成拼接的结果为 NULL
比如下面的SQL语句。

SELECT CONCAT("1",NULL);

技术分享图片

#### 3、当用count函数进行统计时,NULL 列不会计入统计
技术分享图片
####4、NULL 列需要更多的存储空间,一般需要一个额外的字节作为判断是否为 NULL 的标志位。

为什么建议MySQL列属性尽量用 NOT NULL?

原文:https://www.cnblogs.com/sherlockwhite/p/why_not_null.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!