最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-09 21:17:02
文档

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

MySQL中可为空的字段设置为NULL还是NOTNULL:经常用mysql的人可能会遇到下面几种情况: 1、我字段类型是not null,为什么我可以插入空值 2、为什么not null的效率比null高 3、判断字段不为空的时候,到底要用 select * from table where column <> '' 还是要用 sel
推荐度:
导读MySQL中可为空的字段设置为NULL还是NOTNULL:经常用mysql的人可能会遇到下面几种情况: 1、我字段类型是not null,为什么我可以插入空值 2、为什么not null的效率比null高 3、判断字段不为空的时候,到底要用 select * from table where column <> '' 还是要用 sel

打个比方来说,你有一个杯子,空值代表杯子是真空的,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 

总结

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

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

MySQL中可为空的字段设置为NULL还是NOTNULL:经常用mysql的人可能会遇到下面几种情况: 1、我字段类型是not null,为什么我可以插入空值 2、为什么not null的效率比null高 3、判断字段不为空的时候,到底要用 select * from table where column <> '' 还是要用 sel
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top