MySQL 字段为 NULL 的5大坑,99%人踩过
数据库字段允许空值(null)的问题,你遇到过吗?
在验证问题之前,我们先建一张测试表及测试数据。
数据库字段允许空值(null)的问题,你遇到过吗?
在验证问题之前,我们先建一张测试表及测试数据。

构建的测试数据,如下图所示:

有了上面的表及数据之后,我们就来看当列中存在 NULL 值时,究竟会导致哪些问题?
1.count 数据丢失
我们都知道,count是用来计数的,当表中某个字段存在NULL 值时,就会造成count计算出来的数据丢失,如下 SQL 所示:

查询执行结果如下:

从上述结果可以看出,count(*)和count(name)的值不一样,即当使用的是 count(name) 查询时,就丢失了两条值为 NULL 的数据。
解决方案
如果某列存在 NULL 值时,就是用 count(*) 进行数据统计。
扩展知识:不要使用 count(常量)
说明:count(*) 会统计值为 NULL 的行,而 count(列名) 不会统计此列为 NULL 值的行。
2.distinct 数据丢失
当使用语句count(distinct column1,column2)时,如果有一个字段值为空,即使另一列有不同的值,那么查询的结果也会将数据丢失, SQL如下所示:

查询执行结果如下:

数据库的原始数据如下:

从上述图所示,mobile列的10条数据都是不一样,但是查询的结果却只有8条。
3.select 数据丢失
如果某列存在 NULL 值时,如果执行非等于查询(<>或者!=)会导致为 NULL 值的结果丢失,比如下面的这些数据:

当我们查询name不等于"Java"的所有数据时,预期结果应该是id从2到10的数据,但是执行以下sql查询时:

查询结果如下所示:

可以看出id=9和id=10的name为 NULL 的两条数据没有查询出来,这个结果并不符合我们的正常预期。
解决方案
要解决以上的问题,只要修改条件,将姓名不等于Java或者是空值的查出来即可,执行 SQL 如下:

执行结果如下:

可以看出10条数据都查询出来了,这个结果符合我们的正常预期。
4.导致空指针异常
当我们使用一些函数,比如求和函数sum(column) 或者平均值之类的函数,如果所求的字段中有空值,所求的值就会为空而非0。
如果 sum 查询的结果为 NULL 就可以能会导致程序执行时空指针异常(NPE),我们来演示一下这个问题。
为了演示这个问题,首先我们先构建一张表和一些测试数据:

表中原始数据如下:

接下来我们使用 sum 查询,执行以下 SQL:

查询执行结果如下:

当查询的结果为 NULL 而非 0 时,就可以导致空指针异常。
解决空指针异常
可以使用ifnull()对空值进行处理来避免空指针异常:

查询执行结果如下:

5.增加了查询难度
当字段中有了空值,对于null值或者非null值的查询难度就增加了,必须使用与null匹配的查询方法,比如IS NULL或者IS NOT NULL又或者是IFNULL(cloumn)这样的表达式进行查询,传统的 =、!=、<>...这些表达式就不能使用了,这就增加了查询的难度。
还是以 person 表为例,它的原始数据如下:

错误用法 1:

执行结果为空,并没有查询到任何数据,如下图所示:

错误用法 2:

执行结果也为空,没有查询到任何数据,如下图所示:

正确用法 1:

执行结果如下:

正确用法 2:

执行结果如下:

推荐用法
阿里巴巴《Java开发手册》推荐我们使用 ISNULL(cloumn) 来判断 NULL 值,原因是在 SQL 语句中,如果在 null 前换行,影响可读性;而 ISNULL(column) 是一个整体,简洁易懂。从性能数据上分析 ISNULL(column) 执行效率也更快一些。
总结
本文我们讲了当某列为 NULL 时可能会导致的 5 种问题:丢失查询结果、导致空指针异常和增加了查询的难度。因此在最后提倡大家在创建表的时候尽量设置 is not null 的约束,如果某列确实没有值,可以设置空值('')或 0 作为其默认值。
通过命令:
location VARCHAR(50) DEFAULT 'Beijing'
通过工具:

相关文章:
MySQL 字段为 NULL 的5大坑,99%人踩过
数据库字段允许空值(null)的问题,你遇到过吗? 在验证问题之前,我们先建一张测试表及测试数据。 数据库字段允许空值(null)的问题,你遇到过吗? 在验证问题之前,我们先建一张测试表及测试数据。 构建的测试…...
深入理解计算机系统--理解编译器编译的过程
前言 大家在学习C语言的时候,相信对编译器这个词并不会感到陌生。我们也会知道编译器编译的过程是:预处理-》编译-》汇编-》链接。这篇文章主要介绍这四个过程中,编译器究竟做了那些工作,它是如何让一份高级程序转换成机器语言的…...
实现PXE批量网络装机及kickstrat无人值守安装(富士山终究留不住欲落的樱花)
一、PXE概述和部署PXE批量装机 1.PXE简介 PXE(预启动执行环境,在操作系统之前运行)是由Intel公司开发的网络引导技术,c/s架构,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统…...
4.23日报
MySQL 索引是怎么实现的? 索引是满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从而实现高效查找数据。 具体来说 MySQL 中的索引,不同的数据引擎实现有所不同,但目前主流的数据库引擎的索引都…...
【数据治理】数据治理方面的证书有哪些?
目前数据治理领域最专业的职业认证有: 中文版: ①DAMA国际CDGA数据治理工程师、DAMA国际CDGP数据治理专家 (先获得CDGA认证才能申请CDGP认证考试) ②DGSP数据治理与管理认证 英文版: ③CDMP数据管理专业人士 一、…...
Let’s Make C++ Great Again——set与vector
文章目录 set常用的set方法:set实现去重的例子:自定义比较函数的例子,按照字符串长度从小到大排序:使用set容器求两个集合的交集的例子: vector创建vector对象插入和删除元素获取vector的大小和容量检查vector是否为空…...
Nginx+Tomcat负载均衡、动静分离
一.Nginx负载均衡实现原理 Nginx实现负载均衡是通过反向代理实现 1、 反向代理原理 2、反向代理的概念 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服…...
SpringCloud入门实战(七)-Hystrix服务熔断
📝 学技术、更要掌握学习的方法,一起学习,让进步发生 👩🏻 作者:一只IT攻城狮 。 💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看&…...
百度平地起“雷”,突然爆出的QPS数据意味着什么?
鲁迅先生1923年在北师大发表了著名的演讲《娜拉走后怎样》,其中的提问与思考方式振聋发聩,直到今天也依旧有效。面对很多产业现象、技术趋势,我们也不妨多问几个“之后怎样”。 比如说,自ChatGPT爆火之后,中国各个互联…...
电子模块|外控集成 LED 光源 WS2812模块---硬件介绍和stm32驱动
电子模块|外控集成 LED 光源 WS2812模块 模块简介模块特点机械尺寸单线归零码通讯方式24bit 数据结构 stm32 驱动 模块简介 WS2812是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能…...
Jenkins+Python自动化测试持续集成详细教程(全网独家)
目录 一、前言 二、环境准备 三、创建Jenkins Job 四、编写Python自动化测试脚本 五、测试报告生成与展示 六、持续集成流程优化 七、实战演练 八、常见问题及解决方案 九、结论 一、前言 Jenkins是目前最为流行的CI/CD工具之一,它可以支持多种语言和技术…...
运维监控工具PIGOSS BSM扩展指标介绍
PIGOSS BSM运维监控工具,除系统自带指标外,还支持添加SNMP扩展指标、脚本扩展指标、JMX扩展指标、自定义JDBC指标等,今天本文将介绍如何添加SNMP扩展指标和脚本扩展指标。 添加SNMP扩展指标 前提:需要知道指标的oid 例子ÿ…...
一些前端问题2
1.业务场景中需要嵌入公司其他行业线的页面,这种不使用 iframe 该怎么办? 答:理论上应该让他们给你做个组件出来,但是如果实在没别的办法,就使用 iframe 吧。 2.jquery ajax 同步请求的原理是? 目前用 axios 库&…...
Moviepy模块之视频添加图片水印
文章目录 前言视频添加图片水印1.引入库2.加载视频文件3.加载水印图片4.缩放水印图片大小5.设置水印的位置5.1 相对于视频的左上角5.2 相对于视频的左下角5.3 相对于视频的右上角5.4 相对于视频的右下角5.5 相对于视频的左中位置5.6 相对于视频的正中位置5.7 相对于视频的右中位…...
day35—编程题
文章目录 1.第一题1.1题目1.2思路1.3解题 2.第二题2.1题目2.2思路2.3解题 1.第一题 1.1题目 描述: 今年公司年会的奖品特别给力,但获奖的规矩却很奇葩: 首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;待所有…...
Linux安装Nginx
前言 提示:这里可以添加本文要记录的大概内容: Linux安装Nginx的详细步骤。 一、安装Nginx的相关依赖 1、安装gcc,PCRE pcre-devel,zlib,OpenSSL, 提示:安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境。 PCRE(…...
Qt 项目Mingw编译器转换为VS编译器时的错误及解决办法
错误 在mingw生成的项目,转换为VS编译器时通常会报些以下错误(C4819警告,C2001错误,C2143错误) 原因及解决方式 这一般是由于字符编码引起的,在源代码文件中包含了中文字符导致的。Qt Creator 生成的代码文…...
大学生用什么蓝牙耳机好?2023好用的蓝牙耳机推荐
近几年,蓝牙耳机市场不断扩大,逐渐取代有线耳机成为最受人欢迎的数码产品之一。作为蓝牙耳机主要受众群的大学生,用什么蓝牙耳机比较好呢?下面,我来给大家推荐几款便宜好用的蓝牙耳机,一起来看看吧。 一、…...
【好题】好题分享
1001-四舍五入_牛客竞赛语法入门班数组模拟、枚举、贪心习题 (nowcoder.com) 题目描述 四舍五入是个好东西。比如你只考了45分,四舍五入后你是50分再四舍五入你就是满分啦!qdgg刚考完拓扑。成绩十分不理想。但老师觉得他每天都很认真的听课很不容易。于是…...
three.js 怎么在自动缩放的时候添加动画效果
要在自动缩放的时候添加动画效果可以使用three.js中的Tween.js库。Tween.js提供了一种简单的方式来创建和管理动画,它可以让开发者通过简单的API来控制对象的属性变化,从而实现动画效果。 以下是一个使用Tween.js实现模型缩放动画的示例: 加…...
SMUDebugTool:5个技巧掌握AMD Ryzen底层硬件调试的完整指南
SMUDebugTool:5个技巧掌握AMD Ryzen底层硬件调试的完整指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https…...
macOS完整安装器下载工具终极指南:轻松获取Big Sur系统安装包
macOS完整安装器下载工具终极指南:轻松获取Big Sur系统安装包 【免费下载链接】DownloadFullInstaller macOS application written in SwiftUI that downloads installer pkgs for the Install macOS Big Sur application. 项目地址: https://gitcode.com/gh_mirr…...
终极指南:3步在电脑上免费畅玩PS4游戏的神器——shadPS4模拟器
终极指南:3步在电脑上免费畅玩PS4游戏的神器——shadPS4模拟器 【免费下载链接】shadPS4 PS4 emulator for Windows,Linux,MacOS 项目地址: https://gitcode.com/gh_mirrors/shad/shadPS4 还在为无法在电脑上体验PS4独占游戏而烦恼吗?shadPS4模拟…...
Sunshine游戏串流服务器:从零部署到专家级调优的完整解决方案
Sunshine游戏串流服务器:从零部署到专家级调优的完整解决方案 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要打造完美的游戏串流体验,却总是被复杂的配…...
高性价比AI编程神器Claude Code+deepseek v4 pro+vscode——详细安装指南(2026最新版)
一.简介 这套组合性价比极高。关于Claude Code:它由Anthropic公司打造,是直接运行在终端中的AI编程助手,让你不用离开命令行就能完成代码生成、调试、重构、甚至Git提交等各种开发任务。本文将带你完成安装与配置。众所周知Claude 模型集强大…...
Blender-Armatures
导航 (返回顶部) 1. Blender-Armatures 1.1 骨架位置1.2 分类1.3 骨骼结构 2. 编辑 2.1 骨骼扭转2.2 拆分 split2.3 分离骨骼 separate2.4 切换方向 3. 镜像编辑 3.1 镜像挤出3.2 命名惯例3.3 对称 4. 属性 4.1 属性结构表4.2 柔性骨骼 Bendy Bones4.3 姿态4.4 关系 5. 骨骼约束…...
魔百盒CM311-1s刷机后体验:安卓9.0固件到底香不香?附5621DS无线实测
魔百盒CM311-1s刷机实战:安卓9.0系统深度评测与无线性能揭秘 当手中的魔百盒CM311-1s遇上安卓9.0系统,这场硬件与软件的碰撞会擦出怎样的火花?作为一款搭载S905L3B芯片的电视盒子,其原生系统往往受限于运营商定制化限制࿰…...
为 OpenClaw 配置 Taotoken 作为自定义 OpenAI 兼容供应商
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为 OpenClaw 配置 Taotoken 作为自定义 OpenAI 兼容供应商 OpenClaw 是一个流行的开源 Agent 框架,它允许开发者通过配…...
颠覆性AI 3D建模:Zoo Text-to-CAD技术将设计效率提升10倍
颠覆性AI 3D建模:Zoo Text-to-CAD技术将设计效率提升10倍 【免费下载链接】text-to-cad-ui A lightweight UI for interacting with the Zoo Text-to-CAD API. 项目地址: https://gitcode.com/gh_mirrors/te/text-to-cad-ui 在机械设计与工程制造领域&#x…...
DeepFace实战:用5行代码快速搭建一个本地人脸搜索系统(附完整代码)
DeepFace实战:5行代码构建本地人脸搜索系统的工程化实践 人脸识别技术早已不再是实验室里的黑科技,而是能够快速落地的实用工具。今天我们将用Python生态中最轻量级的DeepFace库,从工程化角度构建一个真正可用的人脸搜索系统。不同于简单的AP…...
