问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MySQL NULL值处理详细说明

发布网友 发布时间:2022-10-10 08:33

我来回答

1个回答

热心网友 时间:2023-10-05 11:57

在讲null之前,我们先看一个例子
表数据如下:

然后我们想查出所有名字不为'chen'的其它行记录,我们有可能这样写:

但是结果好像不太如我们所愿,id为1的那条记录没有被查出来,null肯定和'chen'不相等呀,为什么会查不出呢?

NUll值对于新手来说非常容易混淆,经常会被认为null与空字符串''是一样的,但事实上,这两者是非常不一样,NULL表示的是“a missing unknown value”,而字符串''是一个确定的值,这本质上就已经不一样了。

举个例子:

第一条insert语句认为这个手机号还不确定是多少,是a missing unknown phone number
第二条代表这个手机号码是确定的,它的手机号码为空字符串

为了处理和null相关的比较,在mysql中可以用is null、is not null、<=>、isnull()来测试比较,不能用如=、<、<>来和null值比较测试,任何值(包括和null本身)与null对比和函数运算操作结果都为null

如下三个例子可以说明问题:

但是呢,凡事都有个例外:
当用distinct、group by、order by时,此时不同的null值被视为相等计算。

最重要的是,在mysql中,0和null代表假,其它的任何值都代表真

所以回头看最开始的例子,当我们的where条件为name!='chen'时,它与id=1的行进行比较,即测试:
'chen'!='chen'
这个测试结果为0,为假,所以id=1这一行就不会被查出来。接下来再测试:
'zhang'!='chen'
这个测试结果为1,为真,所以id=2这一行就可以被查出来。接下来再测试:
NULL!='chen'
这个测试结果为NULL,为假,所以id=3这一行就不会被查出来。
所以最终的结果就只有id=2这一行的数据被查出来了。
那如果要达到我们的目地怎么办?

推荐用第一种方法。
因为mysql对了null列的查找是有查询优化的:

而第二种在列上加上函数的查询时索引是不起作用的。

其它注意事项

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 以比特币交易形式吸收不特定人群存款构成非法吸收公众存款罪 国内的私人包机服务现在普遍吗? 从沈阳到南京包机多少钱?就包最小型的飞机 江苏苏北地区一共有多少个县? 东海县2007年最低工资标准 三令五申典故 想买个无线网卡,不知道哪个好,大家帮我推荐一下吧! 吊顶工程龙骨下表面拱度不均匀、不平整甚至成波浪形;龙骨周边不平;出现凹凸变形是什么原因,如何预防? 什么是凹龙骨矿棉板吊顶 听歌不知曲中意,再听已是曲中人 我家的电器作文250字 家中的电器作文 为什么每次用iPad登录农业银行都说暂不支持系统 oppoA30c登录和平精英游戏为什么显示暂未支持机型,建议更换设备? 世界无车日是什么时候 1300买什么手机好? 我在香港.怎么在淘宝买东西哇? 请问一下电缝纫机故障维修技巧 高中物理光学实验 我想问一下大衣蹭上口红怎么办 “快点”这个词在日语、法语、德语、韩语等外语中怎么说 迟到时常说的“快点~快点”的日语如何读? 急に为什么不用いそぎに而用きゅうに 快点过来吃早饭。。用日文怎么说 雪中书怀是赞美老师吗 人类最早截肢手术或在3.1万年前,当时的手术是如何进行的? 云南西双版纳州勐腊县的附近发生3.1级左右地震,遇到地震该怎么做? 原子的相对原子质量 同位素的相对原子质量 同位素的质量数是什么 安全期白带怎么变少了 oppo价格多少 怎么把注销 如何注销 怎样能把注销吗 梦见导弹在我周边爆炸 惠普hp officejet5255打印机墨盒有墨水为什么不显示也打印不了是怎么回事?_百度问一问 小米10se能无线充电吗 使用jsp连接oracle时,rs.next()值始终为false,表中存在数据 myeclipse8.0 jsp连接oracle数据库出现了问题,请教高手!用了ojdbc6.jar。也试过其他驱动和class也没用 怎麽使用jsp与servlet连接oracle数据库编写一个web员工签到系统 使用java从oracle数据库中读取数据,显示到jsp页面上,要实现这种效果 我想买款康佳的电视机,在康佳网上直销商城看到一款50寸的康佳 LED50R5100DE不知道这款机子怎么样?