当前位置:首页 > 杂谈 > 正文内容

MySQL数据库的表中 NULL 和 空值 到底有什么区别呢(数据库中的null和空是什么)

2023-08-02 19:53:59TONY杂谈69

浅谈 NULL 和 空值的区别

NULL也就是在字段中存储NULL值

空字符串值也就是字段中存储空字符()

我们来通过测试来看看 他们彼此的区别:

1、占用空间区别

mysql> select length(NULL), length(), length(1); +--------------+------------+-------------+ | length(NULL) | length() | length(1) | +--------------+------------+-------------+ | NULL | 0 | 1 | +--------------+------------+-------------+ 1 row in set (0.03 sec) 复制代码

==小结== : 从上面的测试可以看出 字符串空值()的长度是0,是不占用空间的, 而的NULL长度是NULL,其实它是占用空间的!

NULL columns require additional space in the row to record whether their values are NULL.

意思是: NULL列需要行中的额外空间来记录它们的值是否为NULL

通俗意义上讲: ()字符串空值就像是一个真空转态杯子,什么都没有,而NULL值就是一个装满空气的杯子,虽然看起来都是一样的,但是有着本质的区别

2、插入方式区别

#创建一个表,tb_test create table tb_test( id int unsigned primary key auto_increment, one varchar(10) NOT NULL, two varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 插入进行验证: #全部插入 NULL,会失败 原因就是指定的不允许插入NULL insert into tb_test(one,two) value (NULL,NULL); 1048 - Column one cannot be null #全部插入 空字符串值,成功 原因就是 () 字符 和 NULL的类型都不一样 指定的是不允许插入NULL,又没有说不允许()空字符串!^.^ insert into tb_test(one,two) value (,); Query OK, 1 row affected #这也是刚刚讲过not null约束测试insert语句的时候, 插入()空字符串会成功的原因! 复制代码

3、在查询方式上的区别对比

#创建一个表,tb_test2 create table tb_test2( id int unsigned primary key auto_increment, one varchar(10) NOT NULL, two varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; #模拟数据: insert into tb_test2(one,two) values (1,NULL); insert into tb_test2(one,two) values (,2); insert into tb_test2(one,two) values (3,3); #查询one字段 #使用 is null 来查询one字段 select * FROM tb_test2 where one is null; #结果就是一条也没有,因为one字段并没有代表为NULL的数据存在! #使用 is not null 来查询one字段 select * FROM tb_test2 where one is not null; #结果被全部查询出来,因为one字段中的三个数据都不为NULL这个类型 #使用 = 和 != 来查询one字段 select * FROM tb_test2 where one =; select * FROM tb_test2 where one != ; #查询two字段 #使用 is null 来查询two字段 select * FROM tb_test2 where two is null; #结果有一条符合NULL, #使用 is not null 来查询two字段 select * FROM tb_test2 where two is not null; #结果是不符合NULL的有两条 #使用 = 来查询two字段 select * FROM tb_test2 where two =; #使用 != 来查询two字段 #这里要注意的是为NULL的并没有查询出来,原因用 != 来查 字符串空()的时候, 会把NULL也当做是字符串空来判断吧! select * FROM tb_test2 where two != ; 复制代码

==小结:== 如果要单纯查NULL值列,则使用 is NULL去查,单纯去查空值()列,则使用 =。

建议查询方式:NULL值查询使用is null/is not null查询,而空值()可以使用=或者!=、<、>等算术运算符来查!

4、在count()统计函数上的区别

#创建一个表,tb_test3 create table tb_test3( id int unsigned primary key auto_increment, one varchar(10) NOT NULL, two varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; #模拟数据: insert into tb_test3(one,two) values (1,NULL); insert into tb_test3(one,two) values (,2); insert into tb_test3(one,two) values (3,3); #使用COUNT函数统计one字段: select count(one) from tb_test3; #结果为: 3 条, 说明 空字符串() 会被count()函数统计! #使用COUNT函数统计two字段: select count(two) from tb_test3; #结果为: 2条, 原因是NULL 不会被count()函数统计到! #注意: 使用 * 号来统计会把NULL算进去! SELECT count(*) FROM tb_test; +----------+ | count(*) | +----------+ | 3 | +----------+ 复制代码

实际开发到底是使用NULL值还是空值()呢?

根据实际业务来进行区分, 个人建议在实际开发中如果没有特殊的业务场景,可以直接使用空字符串值() !

作者:极客小俊GeekerJun

链接:

https://juejin.im/post/6871709918139777037

“MySQL数据库的表中 NULL 和 空值 到底有什么区别呢(数据库中的null和空是什么)” 的相关文章

5118会员优惠码怎么领取?5118网站优惠码怎么使用?买5118会员VIP有什么好处?做5118知乎引流大数据、知乎推广,百度引流等,5118vip会员、专业版会员优惠码免费领都在这!

5118会员优惠码怎么领取?5118网站优惠码怎么使用?买5118会员VIP有什么好处?做5118知乎引流大数据、知乎推广,百度引流等,5118vip会员、专业版会员优惠码免费领都在这!

一、如何领取和使用5118网站会员优惠码? 1. 首先点击链接:https://www.5118.com/?promote=baiyang,然后登录账号,登录状态下进入 5118 会员页面,选择想要选购的 5118 会员级别即可; 2. 在该页面下方的“购买年限”中选择相应...

运营27年后IE将退役:市占率仅剩0.64%,曾是世界第一大浏览器

运营27年后IE将退役:市占率仅剩0.64%,曾是世界第一大浏览器

6月15日消息,微软IE浏览器将于北京时间6月16日起(美国时间15日)正式退役。 据微软Edge浏览器官方微博,IE是微软1995年推出的操作系统Windows 95的默认浏览器,1998年成功成为全球市场份额第一的浏览器。然而,据21世纪经济报道,IE于2012年5月...

视频号内测运费险 或将于 5 月正式面市 智己汽车联席CEO刘涛:第三款车和第四款车分别对标特斯拉Model Y、Model 3

视频号内测运费险 或将于 5 月正式面市 智己汽车联席CEO刘涛:第三款车和第四款车分别对标特斯拉Model Y、Model 3

【亿邦原创】亿邦动力独家消息,微信视频号正在灰度测试运费险,有商家称测试已持续近三个月。此前,有商家告诉亿邦动力,视频号运费险可能会在今年 5 月正式上线。 运费险是电商重要基建之一,几乎是平台标配服务。2020 年,抖音就上线抖店运费险服务,此后不断推出补贴计划。2021 年,快...

领跑一线城市,国家统计局:北京新房同比上涨4.6%

领跑一线城市,国家统计局:北京新房同比上涨4.6%

转自:北京时间 最近,国家统计局发布了2023年3月份70个大中城市商品住宅销售价格指数、二手住宅销售价格指数。70个大中城市中商品住宅销售价格上涨城市个数增加,各线城市商品住宅销售价格环比上涨,一线城市商品住宅销售价格同比上涨、二三线城市同比降幅收窄 一二三线城...

2月份70城房价出炉,湛江新房与二手房价格双双上涨!

2月份70城房价出炉,湛江新房与二手房价格双双上涨!

3月16日国家统计局发布了2月份70个大中城市商品住宅销售价格变动情况 2月份广东省域内上榜城市全部上涨,呈现形势大好、市场信心逐渐回升的现象。另外,湛江继1月成为广东省域内上榜城市涨幅最高城市后2月...

原创
            青岛24小时道路救援拖车-附近24小时流动补胎[距离100米]

原创 青岛24小时道路救援拖车-附近24小时流动补胎[距离100米]

原标题:青岛24小时道路救援拖车-附近24小时流动补胎[距离100米] 青岛市是山东省的一个地级市,下辖7个区和4个县级市。其中,市南区、市北区、李沧区、崂山区、城阳区、黄岛区和胶州市是市辖区,即直属于市政府领导;而即墨市、莱西市、平度市、胶南市则是县级市,即相当于县级行政单位。...