百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> MySQL中可为空的字段设置为NULL还是NOT NULL
分享文章到:

MySQL中可为空的字段设置为NULL还是NOT NULL

发布时间:05/13 来源:未知 浏览: 关键词:

经常用mysql的人可能会碰到下面几种状况:

1、我字段类型是not null,为何我可以插入空值

2、为何not null的效率比null高

3、判断字段不为空的时候,到底要用

select * from table where column <> ''

还是要用

select * from table where column is not null 

带着上面几个疑难,我们来简略的研究一下null 和 not null 到底有什么不同,他们之间的区别是什么以及各自的效率题目。

首先,我们要搞分明“空值” 和 “NULL” 的概念:

1、空值是不占用空间的

2、mysql中的NULL其实是占用空间的,下面是来自于MYSQL官方的解释

“NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.”

打个比如来说,你有一个杯子,空值代表杯子是真空的,NULL代表杯子中装满了空气,虽然杯子看起来都是空的,但是区别是很大的。

搞分明“空值”和“NULL”的概念之后,题目根本就明了了,我们做个例子测试一下:

CREATE TABLE `codetc` ( 
`col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , 
`col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL 
) ENGINE = MYISAM ;

插入数据:

INSERT INTO `codetc` VALUES (null,1);

mysql产生差错:

#1048 - Column 'col1' cannot be null 

再来一条

INSERT INTO `codetc` VALUES ('',1);

成功插入。

可见,NOT NULL 的字段是不能插入“NULL”的,只能插入“空值”,上面的题目1也就有答案了。

关于题目2,上面我们已经说过了,NULL 其实并不是空值,而是要占用空间,所以mysql在进行比较的时候,NULL 会参与字段比较,所以对效率有一局部影响。

而且B树索引时不会存储NULL值的,所以要是索引的字段可认为NULL,索引的效率会下降许多。

我们再向codetc的表中插入几条数据:

INSERT INTO `codetc` VALUES ('', NULL);
INSERT INTO `codetc` VALUES ('1', '2');

此刻依据需求,我要统计codetc表中col1不为空的所有数据,我是该用“<> ''” 还是 “IS NOT NULL” 呢,让我们来看一下效果的区别。

SELECT * FROM `codetc` WHERE col1 IS NOT NULL;

SELECT * FROM `codetc` WHERE col1 <> '';

可以看到,效果迥然不一样,所以在现实状况中,我们一定要依据业务需求,搞分明是否需要运用null或者not null。

注意:MySQL字段尽量以免NULL,应当指定列为NOT NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化,而且对表索引时不会存储NULL值的,所以要是索引的字段可认为NULL,索引的效率会下降许多。由于它们使得索引、索引的统计信息以及比较运算更加复杂。你应当用0、一个特别的值或者一个空串取代空值。

mysql 设置字段 not null 变成null

语句:

ALTER TABLE 表名 MODIFY 字段名 VARCHAR(20) DEFAULT NULL 

总结

以上就是这篇文章的全部内容了,但愿本文的内容对大家的学习或者工作拥有一定的参考学习价值,感谢大家对脚本之家的支撑。要是你想理解更多相干内容请查看下面相干链接

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有167人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板