MySQL中关于NULL值的六大坑!你被坑过吗?
NULL值是我们在开发过程中的老朋友了,但是这个老朋友在MySQL中有很多坑,我通过这篇文章来总结分享一下,欢迎大家在评论区分享你的看法和踩坑经历。
1、NULL不等于NULL
在MySQL中,执行以下SQL会返回NULL

假如t表有以下数据,其中有一条a为null的记录

如果执行以下SQL将会返回空集合,明明有a为null的记录,但却没查到,好坑!

假如我们认为NULL等于NULL,那么这就会导致误解,从而导致业务逻辑出现问题。
大家觉得:NULL应不应该等于NULL呢?
事实上,我们得通过is null来判断某个值是不是null,可为啥要这么设计呢?

2、NULL与任何值比较都为NULL
实际上,NULL与任何值比较都为NULL


这里的重点是,并不是返回的0,而是null,既然不相等,为什么不返回0呢?不是1代表相等,0代表不相等吗?好坑!
3、NULL导致唯一索引不唯一
我们给a、b两个字段创建唯一联合索引
alter table t add unique idx_ab(a,b);
由于是唯一索引,所以第二次插入(1,1)时会报错
insert into t(a,b) values(1,1);
insert into t(a,b) values(1,1);
但如果是插入(2,null)则不会报错
insert into t(a,b) values(2,null);
insert into t(a,b) values(2,null);
最终表中的结果为

不是说ab是唯一索引吗,怎么还能有重复记录?好坑!
4、NULL对排序的影响
当前表的数据为

我们对a字段先进行升序排序

嗯…NULL排在了最前面,两个NULL也按id进行了升序排序,这倒是能理解,那反过来进行降序排序呢

嗯…NULL排在了最后面,这倒没问题,可是两个NULL的记录能不能也按id进行降序排序呢?你觉得是坑吗?
5、聚合函数不会统计NULL值
对于上表,总共有8条记录,其中a为null的有两条,执行count语句,以下结果大家应该能理解,count(a)时不会统计a为null的记录。

但是如果对a字段执行求平均数,那么结果为4.1667

计算方法为8+6+5+3+2+1=25,然后25/6=4.1667,关键是,到底应该是25/6还是25/8呢?你们觉得呢?
6、NULL导致函数结果为NULL
有时,我们可能会在SQL进行字符串连接,比如执行

为什么要返回null呢?返回’daduduzhouyu’应该更好吧?
欢迎大家在评论区聊聊你对这六大坑的看法,或者自己的踩坑经历,谢谢大家的阅读,记得点赞、关注哦。
我的所有文章汇总在了我的公众号:IT周瑜,欢迎大家关注,同时公众号内还有我整理的100道面试真题,有需要的兄弟关注后即可领取。
相关文章:
MySQL中关于NULL值的六大坑!你被坑过吗?
NULL值是我们在开发过程中的老朋友了,但是这个老朋友在MySQL中有很多坑,我通过这篇文章来总结分享一下,欢迎大家在评论区分享你的看法和踩坑经历。 1、NULL不等于NULL 在MySQL中,执行以下SQL会返回NULL 假如t表有以下数据&#…...
学生学习动机测试:激发潜能,引领未来
学习动机、学习兴趣和学习目标制定是影响学生学习成效的三个关键因素。通过对学生学习动机的测试,我们可以深入了解学生的学习状态,进而采取针对性的措施,激发他们的学习潜能,引导他们走向更加光明的未来。本文将从学习动机、学习兴趣和学习目标制定三个方面,详细探讨学生…...
基于SSM党务政务服务热线管理系统的设计
管理员账户功能包括:系统首页,个人中心,用户管理,部门管理,办事信息管理,信息记录管理,系统管理 前台账号功能包括:系统首页,个人中心,部门,信息…...
OSI参考模型详解:初学者指南与实践案例
OSI参考模型详解:初学者指南与实践案例 OSI(Open System Interconnect)参考模型是一个由国际标准化组织(ISO)提出的七层网络分层模型,它为全球所有互联计算机系统提供了一个通用的通信框架,解决…...
S7-200 SMART 与 S7-1200 之间 TCP 通信— S7-200 SMART 作为服务器
TCP 协议通信 TCP 通信为面向连接的通信,需要双方都调用指令以建立连接及交换数据。S7-200 SMART 与 S7-1200 通过 TCP 通信,在 S7-1200 调用 T-block 指令 ( TCON, TDISCON, TSEND, TRCV ) ,在 S7-200 SMART 调用 Open User Communication …...
Java @RequestPart注解:同时实现文件上传与JSON对象传参
RequestPart注解:用于处理multipart/form-data请求的一部分,通常用于文件上传或者处理表单中的字段。 java后端举例: PostMapping("/fileTest")public AjaxResult fileTest(RequestPart("file") MultipartFile file,Req…...
深度学习基础知识-02 数据预处理
深度学习的数据预处理通常包括: 1.数据清洗:去除错误或不完整的数据。 2.归一化:调整数据范围,如将像素值缩放到0-1。 3.数据增强:通过旋转、缩放等方法增加数据多样性。 4.数据划分:将数据分为训练集、验证…...
【CTF刷题9】2024.10.19
[MoeCTF 2021]babyRCE 考点:关键词过滤(绕过方法参考往期博客) 来源:nssctf <?php$rce $_GET[rce]; if (isset($rce)) {if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\|\%|\&g…...
WPF中的Setter
在 WPF (Windows Presentation Foundation) 中,Setter 是一个定义控件属性值的标记,通常用在 Style 或 Template 中。Setter 用于指定当某些条件满足时,控件的属性应该如何设置。以下是 Setter 的一些关键点: 属性设置:…...
RabbitMQ下载与配置
安装Erlang Erlang 下载地址如下: https://erlang.org/download/otp_versions_tree.html 安装 RabbitMQ RabbitMQ 下载地址如下: https://www.rabbitmq.com/install-windows.html 查看服务,服务已经正常启动 打开Command Prompt 输入rabb…...
【数据结构与算法】力扣 54. 螺旋矩阵
问题描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入: matrix [[1,2,3],[4,5,6],[7,8,9]] 输出: [1,2,3,6,9,8,7,4,5]示例 2: 输入: ma…...
速通不了的人工智能
下面是一个详细且系统的人工智能学习框架,涵盖了从基础理论到实际应用的各个方面。这个框架包括理论学习、编程实践、项目实战和资源推荐。为了帮助你更好地理解和应用,我会提供一些具体的代码示例。 人工智能学习框架 1. 基础理论 1.1 数学基础 线性代数:向量、矩阵、特…...
微信新功能上线,找工作也能“附近”搞定
大家好,我是小悟 你们听说了吗?微信又双叒叕出新功能啦!这次可不是什么微整形、小游戏之类的小打小闹,而是实实在在的大招——查找附近的工作!没错,你没听错,就是那个在你家门口就能找到工作的…...
CANoe与C#联合仿真方案
引言 CANoe作为一款强大的网络仿真工具,能够模拟各种通信协议,尤其是在汽车领域的CAN、LIN、Ethernet等协议。而C#作为一种广泛使用的编程语言,能够为CANoe提供灵活的用户界面和逻辑控制。本文将探讨如何将CANoe与C#结合,实现高效的联合仿真方案。 1. 系统架构 联合仿真…...
公交信息在线查询系统|基于java和小程序的公交信息在线查询系统小程序设计与实现(源码+数据库+文档)
公交信息在线查询系统小程序 目录 基于java和小程序的公交信息在线查询系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂…...
[LeetCode] 1162. 地图分析
题目描述: 你现在手里有一份大小为 n x n 的 网格 grid,上面的每个 单元格 都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地。 请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的,并返…...
CentOS 上安装 MySQL(附卸载教程)
在 CentOS 上安装 MySQL 5.7: 1. 添加 MySQL Yum 存储库 首先,确保你已添加 MySQL Yum 存储库。因为你已经安装了 mysql57-community-release-el7-11.noarch,如果需要重新添加,可以使用以下命令: sudo yum localins…...
如何在Matlab界面中添加日期选择器?
在Matlab界面中添加日期选择器,可以让用户通过图形界面方便地选择日期。Matlab提供了uidatepicker函数,允许用户在App Designer设计的GUI中添加日期选择器组件。以下是如何在Matlab界面中添加日期选择器的详细步骤: 1. 使用App Designer添加…...
保险系统的部分模式01
Wolfgang Keller 著,liwenhua 译 摘要 对于许多保险公司来说,要建立一个能够缩短产品周期,柔性灵活的保险系统可谓是一个挑战。虽然这个系统有着巨大的市场,围绕这些相同的问题开展了许多项目,但是这些项目似乎仍然有…...
用你的手机/电脑运行文生图方案
随着ChatGPT和Stable Diffusion的发布,最近一两年,生成式AI已经火爆全球,已然成为移动互联网后一个重要的“风口”。就图片/视频生成领域来说,Stable Diffusion模型发挥着极其重要的作用。由于Stable Diffusion模型参数量是10亿参…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
