MySQL 不一样的 NULL mysql null比较
wptr33 2024-11-09 15:00 21 浏览
你好,我是yes。
前不久看到面试群里有同学发表了一个疑问:
且这位同学还想了解下其中的原理:
是的,MySQL 中null 值确实无法通过这种条件筛选出来,因为 null 值的定义就跟普通值不一样。
拿官网的例子来说:
mysql> INSERT INTO my_table (phone) VALUES (NULL);
mysql> INSERT INTO my_table (phone) VALUES ('');
第一条 SQL 表达的意思是:不知道这个人的手机号码,用 null 表示未知。
第二条 SQL 表达的意思是:这个人就是没有手机号码,所以存了一个空字符串。
按照这个角度去看待群里同学的提问,其实不难理解为什么 xx!='xx' 查询不出 null 的数据了。
因为 null 值表示未知,它的值可能是任意你能想到的值,目前还不能定义它。
看到有同学可能不服:我不管它到底等于什么,反正从目前来看它是 null,它就 !='xx',所以应该查得出来。
额...怎么说呢,人家规矩就是这样定的,在人家的地盘上就得按人家的规矩办事。
MySQL 说:To look for NULL values, you must use the IS NULL 。
so,事情就是这样,也没啥好纠结的点,查 null 的语法就不一样。
不仅如此,看官网介绍,其实 null 还有其它不一样的地方。
When using DISTINCT, GROUP BY, or ORDER BY, all NULL values are regarded as equal.
当使用 DISTINCT, GROUP BY, 或者 ORDER BY 时候,null 值都会被认为是相等的,这个可以理解。
还有排序的时候,null 值默认会排在最前面,如果想放在最后面,用 DESC。
Aggregate (group) functions such as COUNT(), MIN(), and SUM() ignore NULL values
聚合函数,比如 count、min、max、sum 等,会忽略统计 null 值的字段。
比如现在有一个表 a,一共有 3 条数据,其中两条地址是 null。
当执行SELECT count(address) FROM sys.a;,结果只会返回 1。
所以,如果你实际的需求是统计行数的话,记得用 count(*),而不是某个可能为 null 的字段。
最后
最后提炼下一些日常工作容易出错的点:
- null 值的过滤需要利用 is null 和 is not null,无法用 !=、<> 之类的来判断。
- 聚合函数统计需要注意使用可能为 null 字段的统计不一定是你想要的结果。
- 空指针,聚合函数使用可能为 null 字段时,可能返回值就是 null
还有,如果表中存在可能为 null 的字段,那么在实际存储上每条记录也会多花一个字节来表示当前记录目前某列是否为 null。
因此如果表内字段能确定一定不为 null,为了节省空间,都应该设为 not null。
官网网址:https://dev.mysql.com/doc/refman/8.0/en/problems-with-null.html
相关推荐
- Linux高性能服务器设计
-
C10K和C10M计算机领域的很多技术都是需求推动的,上世纪90年代,由于互联网的飞速发展,网络服务器无法支撑快速增长的用户规模。1999年,DanKegel提出了著名的C10问题:一台服务器上同时...
- 独立游戏开发者常犯的十大错误
-
...
- 学C了一头雾水该咋办?
-
学C了一头雾水该怎么办?最简单的方法就是你再学一遍呗。俗话说熟能生巧,铁杵也能磨成针。但是一味的为学而学,这个好像没什么卵用。为什么学了还是一头雾水,重点就在这,找出为什么会这个样子?1、概念理解不深...
- C++基础语法梳理:inline 内联函数!虚函数可以是内联函数吗?
-
上节我们分析了C++基础语法的const,static以及this指针,那么这节内容我们来看一下inline内联函数吧!inline内联函数...
- C语言实战小游戏:井字棋(三子棋)大战!文内含有源码
-
井字棋是黑白棋的一种。井字棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、三子旗等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时...
- C++语言到底是不是C语言的超集之一
-
C与C++两个关系亲密的编程语言,它们本质上是两中语言,只是C++语言设计时要求尽可能的兼容C语言特性,因此C语言中99%以上的功能都可以使用C++完成。本文探讨那些存在于C语言中的特性,但是在C++...
- 在C++中,如何避免出现Bug?
-
C++中的主要问题之一是存在大量行为未定义或对程序员来说意外的构造。我们在使用静态分析器检查各种项目时经常会遇到这些问题。但正如我们所知,最佳做法是在编译阶段尽早检测错误。让我们来看看现代C++中的一...
- ESL-通过事件控制FreeSWITCH
-
通过事件提供的最底层控制机制,允许我们有效地利用工具箱,适时选择使用其中的单个工具。FreeSWITCH是一个核心交换与混合矩阵,它周围有几十个模块提供各种功能特性。我们完全控制了所有的即时信息,这些...
- 物理老师教你学C++语言(中篇)
-
一、条件语句与实验判断...
- C语言入门指南
-
当然!以下是关于C语言入门编程的基础介绍和入门建议,希望能帮你顺利起步:C语言入门指南...
- C++选择结构,让程序自动进行决策
-
什么是选择结构?正常的程序都是从上至下顺序执行,这就是顺序结构...
- C++特性使用建议
-
1.引用参数使用引用替代指针且所有不变的引用参数必须加上const。在C语言中,如果函数需要修改变量的值,参数必须为指针,如...
- C++程序员学习Zig指南(中篇)
-
1.复合数据类型结构体与方法的对比C++类:...
- 研一自学C++啃得动吗?
-
研一自学C++啃得动吗?在开始前我有一些资料,是我根据网友给的问题精心整理了一份「C++的资料从专业入门到高级教程」,点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!个人...
- C++关键字介绍
-
下表列出了C++中的常用关键字,这些关键字不能作为变量名或其他标识符名称。1、autoC++11的auto用于表示变量的自动类型推断。即在声明变量的时候,根据变量初始值的类型自动为此变量选择匹配的...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mysql max (33)
- vba instr (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)