当前位置: 首页 > news >正文

MySQL 字段为 NULL 的5大坑,大部分人踩过

数据库字段允许空值(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"的所有数据时,预期结果应该是id210的数据,但是执行以下sql查询时:

 查询结果如下所示:

 可以看出id=9id=10nameNULL 的两条数据没有查询出来,这个结果并不符合我们的正常预期。

解决方案

要解决以上的问题,只要修改条件,将姓名不等于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 作为其默认值。

-END-

相关文章:

MySQL 字段为 NULL 的5大坑,大部分人踩过

数据库字段允许空值(null)的问题&#xff0c;小伙伴你遇到过吗&#xff1f; 在验证问题之前&#xff0c;我们先建一张测试表及测试数据。 构建的测试数据&#xff0c;如下图所示&#xff1a; 有了上面的表及数据之后&#xff0c;我们就来看当列中存在 NULL 值时&#xff0c;究…...

Android SystemUI篇(二)

目录 一、简介 二、SystemUI的架构 三、SystemUI的主要组件 四、SystemUI的主要功能 五、SystemUI的自定义和定制 六、SystemUI的性能优化 一、简介 SystemUI是Android操作系统的一个关键组件&#xff0c;主要负责管理和提供用户界面的核心元素&#xff0c;如状态栏、导航…...

第六讲:“声音”写具体

爸爸又打呼了!“呼噜一呼噜一像一股巨浪腾空而起&#xff0c;以每秒八十米的速度向上冲刺&#xff0c;力图掀开天花板&#xff0c;掀翻整座住宅楼;“呼噜一一呼噜一-”&#xff0c;像一台轰鸣的坦克在穿行&#xff0c;床垫在抖动&#xff0c;吊灯在摇晃&#xff0c;墙灰在簌籁(…...

Unity 向量

向量的加减法本文就不再赘述了&#xff0c;本文侧重介绍脚本中的向量写法 一、向量的数乘 定义&#xff1a;k(x,y,z)(kx,ky,kz) 若向量长度为L&#xff0c;k取1/L&#xff0c;就恰好能让原向量长度变成1&#xff0c;变成了单位向量&#xff0c;这称为向量的标准化 。 由于长度…...

Apache Tomcat AJP协议文件读取与包含

永远也不要忘记能够笑的坚强&#xff0c;就算受伤&#xff0c;我也从不彷徨。 0x01.漏洞情况分析 Tomcat是Apache软件基金会Jakarta 项目中的一个核心项目&#xff0c;作为目前比较流行的Web应用服务器&#xff0c;深受Java爱好者的喜爱&#xff0c;并得到了部分软件开发商的…...

实验10 人工神经网络(1)

1. 实验目的 ①理解并掌握误差反向传播算法&#xff1b; ②能够使用单层和多层神经网络&#xff0c;完成多分类任务&#xff1b; ③了解常用的激活函数。 2. 实验内容 ①设计单层和多层神经网络结构&#xff0c;并使用TensorFlow建立模型&#xff0c;完成多分类任务&#xf…...

OPPO关停哲库业务,工程师造芯何去何从?

5月12日&#xff08;上周五&#xff09;&#xff0c;新浪科技从OPPO处了解到&#xff0c;OPPO将终止ZEKU业务。3000多人团队突然原地解散&#xff0c;网上唏嘘声一片&#xff01; ZEKU最初成立于2019年&#xff0c;是OPPO的全资子公司&#xff0c;欧加集团百分之百注资成立。总…...

面试被问麻了....

前几天组了一个软件测试面试的群&#xff0c;没想到效果直接拉满&#xff0c;看来大家对面试这块的需求还是挺迫切的。昨天我就看到群友们发的一些面经&#xff0c;感觉非常有参考价值&#xff0c;于是我就问他还有没有。 结果他给我整理了一份非常硬核的面筋&#xff0c;打开…...

AspNetCore中的配置文件详解

1 配置文件 程序开发中&#xff0c;有些信息是要根据环境改变的&#xff0c;比如开发环境的数据库可能是本地数据&#xff0c;而生产环境下需要连接生产数据库&#xff0c;我们需要把这些信息放到程序外面&#xff0c;在程序运行时通过读取这些外部信息实现不改变程序代码适应…...

实时更新天气微信小程序开发

1.新建一个天气weather项目 2.在app.json中创建一个路由页面 当我们点击保存的时候&#xff0c;微信小程序会自动的帮我们创建好页面 3.在weather页面上书写我们的骨架 4.此时我们的页面很怪&#xff0c;因为没有给它添加样式和值。此时我们给它一个样式。&#xff08;样式写在…...

css渐变

线性渐变 liner-gradient属性值用来设置线性渐变&#xff0c;第一个参数值是方向&#xff0c;默认是从上往下&#xff0c;往后就是渐变颜色的种类。 background-image:liner-gradient(方向&#xff0c;颜色1&#xff0c;颜色2...) .box {display: flex;width: 400px;height: …...

《斯坦福数据挖掘教程·第三版》读书笔记(英文版) Chapter 2 MapReduce and the New Software Stack

来源&#xff1a;《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 2 MapReduce and the New Software Stack Computing cluster means large collections of commodity hardware, including conventional processors (“compute nodes”) connected by Ethernet …...

HTML零基础快速入门(详细教程)

1&#xff0c;HTML代码特点 <html><head></head><body>hello world!</body> </html>HTML代码有以下特点&#xff1a; html代码是通过标签来组织的&#xff0c;而标签是由尖括号< >组织的&#xff0c;也可被叫作元素&#xff08;ele…...

Kubernetes第5天

第七章 Service详解 本章节主要介绍kubernetes的流量负载组件&#xff1a;Service和Ingress。 Service介绍 ​ 在kubernetes中&#xff0c;pod是应用程序的载体&#xff0c;我们可以通过pod的ip来访问应用程序&#xff0c;但是pod的ip地址不是固定的&#xff0c;这也就意味着…...

RK3568平台开发系列讲解(调试篇)debugfs 分析手段

🚀返回专栏总目录 文章目录 一、enable debugfs二、debugfs API三、使用示例沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux 上有一些典型的问题分析手段,从这些基本的分析方法入手,你可以一步步判断出问题根因。这些分析手段,可以简单地归纳为下图: 从这…...

【Spring框架全系列】SpringBoot配置日志文件

&#x1f367;&#x1f367;哈喽&#xff0c;大家好&#xff0c;我是小浪。那么上篇博客我们学习了SpringBoot配置文件的相关操作&#xff0c;本篇博客我们将学习一个新的知识点&#xff0c;SpringBoot日志文件。&#x1f5a5;&#x1f5a5; &#x1f4f2;目录 一、日志是什么…...

事务 ---MySQL的总结(六)

事务 多进程进行并改变同一个数据&#xff0c;如果没有进行版本控制&#xff0c;就会出现数据不确定的问题&#xff0c;为此引入了事务的概念。可以进行数据回滚&#xff0c;解决潜在的问题。 事务的概念 一组的DML组成&#xff0c;这一些的DML要么同时成功&#xff0c;要么同…...

22 标准模板库STL之容器适配器

概述 提到适配器,我们的第一印象是想到设计模式中的适配器模式:将一个类的接口转化为另一个类的接口,使原本不兼容而不能合作的两个类,可以一起工作。STL中的容器适配器与此类似,是一个封装了序列容器的类模板,它在一般序列容器的基础上提供了一些不同的功能和接口。之所…...

目标检测YOLO实战应用案例100讲-基于深度学习的自动驾驶目标检测算法研究

目录 基于深度学习的自动驾驶目标检测算法研究 相关理论基础 2.1 卷积神经网络基本原理...

服务网关Gateway

前言 API 网关出现的原因是微服务架构的出现&#xff0c;不同的微服务一般会有不同的网络地址&#xff0c;而外部客户端可能需要调用多个服务的接口才能完成一个业务需求&#xff0c;如果让客户端直接与各个微服务通信&#xff0c;会有以下的问题&#xff1a; 破坏了服务无状态…...

Spring Cloud Zuul实战:5分钟搞定微服务网关配置(含Eureka集成)

Spring Cloud Zuul极速实践&#xff1a;从零构建高可用微服务网关 微服务架构的流行让系统拆分变得更加灵活&#xff0c;但同时也带来了新的挑战——如何优雅地管理众多服务的入口&#xff1f;想象一下&#xff0c;当你的系统由数十个微服务组成时&#xff0c;客户端需要记住每…...

2025年网盘直链下载助手完整指南:告别限速,轻松获取高速下载链接

2025年网盘直链下载助手完整指南&#xff1a;告别限速&#xff0c;轻松获取高速下载链接 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 …...

QMC解码器:3分钟解锁QQ音乐加密文件,实现跨平台音乐自由

QMC解码器&#xff1a;3分钟解锁QQ音乐加密文件&#xff0c;实现跨平台音乐自由 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 还在为QQ音乐下载的歌曲只能在特定应用播放…...

私有云 IaaS 平台部署与运维实战 —— 国基北盛 OpenStack 标准化搭建与运维实践

前言在企业数字化转型与云原生普及的趋势下&#xff0c;私有云 IaaS 平台已成为数据中心标准化基础设施。本文以国基北盛云计算私有云 IaaS (2.4) 实训环境为依托&#xff0c;完整记录ControllerCompute 双节点 OpenStack 架构从环境规划、自动化部署、网络与存储配置到云主机交…...

思源宋体TTF完整指南:7种字重免费商用字体如何改变你的设计体验

思源宋体TTF完整指南&#xff1a;7种字重免费商用字体如何改变你的设计体验 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为设计项目寻找既专业又免费的中文字体而烦恼吗&#x…...

AI搜索排名怎么查?2026免费GEO监测手把手教你精准监控品牌AI可见性

一家工业设备制造商的市场总监最近很困惑&#xff1a;他们的官网在百度搜索“高精度传感器”这个关键词上排名前三&#xff0c;SEO团队为此自豪。但当客户用豆包、DeepSeek提问“哪个品牌的传感器精度最高”时&#xff0c;AI的答案里却完全没有他们的影子。客户流失了&#xff…...

5分钟快速解密网易云音乐NCM格式:免费工具实现音乐自由播放

5分钟快速解密网易云音乐NCM格式&#xff1a;免费工具实现音乐自由播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器使用而烦恼吗&#xff1f;ncmdump是一款高效便捷的NCM格式…...

从理论到实践:深入剖析LightGaussian如何实现3DGS的极致压缩与加速

1. LightGaussian为何能成为3DGS压缩的颠覆者 去年还在为3D高斯泼溅&#xff08;3DGS&#xff09;的存储问题头疼的我&#xff0c;第一次看到LightGaussian论文时差点从椅子上跳起来。这个来自德克萨斯大学奥斯汀分校和厦门大学团队的工作&#xff0c;直接把3DGS模型从782MB压缩…...

Three.js进阶技巧:如何让GLTF模型在Vue中实现交互式旋转与缩放

Three.js与Vue深度整合&#xff1a;打造专业级3D模型交互方案 在数字展示领域&#xff0c;3D模型交互已成为提升用户体验的关键要素。想象一下&#xff0c;当用户能够自由旋转、缩放产品模型&#xff0c;从各个角度观察细节时&#xff0c;转化率将获得怎样的提升&#xff1f;这…...

玻璃幕墙U值理论计算与软件分析的对比

摘要:本文通过对隐框和明框玻璃幕墙的U值理论计算和软件分析对比,寻求二者间计算结果的差别。 关键词:热工,普通明框,隐框,隔热明框,玻璃,理论计算,软件分析。 玻璃幕墙作为建筑的外维护体系,对整个建筑的热工性能有较大影响。我国于2005年4月4日发布<公共建筑节能…...