为什么mysql字段要设置为not null?

2

为什么mysql字段要设置为not null?
现在 大师来跟大家解释解释

首先 我们创建一个表 asd字段为nullqwe字段为not null,都无默认值

CREATE TABLE `tb` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`asd` VARCHAR(45) NULL,
`qwe` VARCHAR(45) NOT NULL,
PRIMARY KEY (`idtb`)
)

然后

insert tb(asd) values('123123123');
insert tb(qwe) values('123123123');

现在 我们来查看这个表
请输入图片描述
可以看出
not nullqwe字段 未设置的时候是个空字符串
nullasd字段 未设置的时候是个NULL

以上结果 大家应该都可以想像到的。
那么为什么要设置NOT NULL
因为 MYSQL不是PHP,NULL不等于空字符串
比如我们查询qwe为空的

select * from tb where qwe=''

可以找到
请输入图片描述
但是

select * from tb where asd=''

则什么都找不到

而我们WEB开发的时候,果然有的地方插入记录 是指定空字符串,有的地方插入记录没有指定值,如果字段没设置NOT NULL,那就是出现:
请输入图片描述

而你查找的时候,只会出现
请输入图片描述

所以 要设置 NOT NULL
这个 就不会有NULL出现了。


后记:好久以前写的一篇文章,忘记了有没有发表,今天整理网盘刚好看到,就发上来了。

你可能感兴趣的

苏生不惑 · 2014年08月24日

谢大师指点,大师的昵称tmdphp,呵呵

回复

王道中强流 作者 · 2014年08月24日

谢谢你的回复,不然我还以为没人看呢~

回复

Drazzi · 2014年08月25日

Try "SELECT * FROM tb where asd IS NULL".

回复

王道中强流 作者 · 2014年08月26日

嗯 这个我知道。
我的意思是如果字段允许为NULL,那么查询非空记录就需要:
SELECT * FROM tb where asd IS NULL OR asd=''
比较麻烦,设置为NOT NULL则不会出现NULL。

回复

dackel · 2015年12月24日

有时候 为确保 查询准确性,再在工具里 SELECT * FROM tb where asd IS NULL OR asd='' 执行一遍。

回复

载入中...