MySQL 开发避坑:NULL 和空值不是一回事
目录一. NULL和空值定义上的区别二. NULL和空值在表中显示的区别三. NULL值和空值查询方式的区别3.1 NULL 值的查询方式3.2 空值的查询方式3.3 查询NULL的方式可以查询空值3.4 查询空值的方法不可以查询NULL值四. 聚合函数会计算空值但不计算NULL值一. NULL和空值定义上的区别在 MySQL 中NULL 值和空值是两个不同的概念空值就是我们常说的空字符串用两个单引号 代替即可NULL 值在MySQL中是占用空间的而空值则是不占用长度空间的。举个例子如果把数据比作水果表中的每行数据的每个字段空位比作一个个箱子水果要放进箱子里存储NULL就可以理解为空位上有一个箱子但箱子是空的没有存放任何水果空值就可以理解为空位上连箱子都没有真空状态二. NULL和空值在表中显示的区别如下SQL创建一张 user 用户表我将邮箱字段 email 和 性别字段 sex 默认值设计为空值除了主键uid外其余字段默认值设计为NULLCREATE TABLE user ( uid int NOT NULL, username varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, password varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, age int DEFAULT NULL, email varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT , sex varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT , PRIMARY KEY (uid) ) ENGINEInnoDB DEFAULT CHARSETutf8mb3 COLLATEutf8mb3_unicode_ci;特别注明MySQL中创建表默认所有字段都是为NULL上述建表SQL是我修改后展示给各位的方便复制使用如果是自己直接创建的表可以通过执行如下SQL修改字段默认值# 修改语法格式 ALTER TABLE 表名 MODIFY 字段名 字段类型(要修改为的长度) DEFAULT 要修改为的默认值; # 举例语句 # 将 user 表中 age字段长度改为 30默认值改为空 ,如果只修改默认值长度可以写原本的值 ALTER TABLE user MODIFY age VARCHAR(30) DEFAULT ...... 如果要更新多个字段按照字段名字段类型(字段长度) DEFAULT 默认值的方式追加即可然后我在表中添加几条数据有些字段没有设置数据SQL语句如下想自己动手的小伙伴自行复制执行INSERT INTO user VALUES (1, 张三, 12345, 17, 12shfd, 男); INSERT INTO user VALUES (2, 李四, NULL, 18, , 男); INSERT INTO user VALUES (3, NULL, NULL, NULL, 1763qq, 女); INSERT INTO user VALUES (4, 王五, NULL, NULL, , 男); INSERT INTO user VALUES (5, NULL, NULL, NULL, , );执行完毕后数据表如图从这里我们就可以清晰地看出NULL值和空值的区别。如果一个字段默认值为NULL我们没有填写数据在表中就会显示NULL如果一个字段默认值为空值我们没有填写任何数据在表中就是一片空白不会显示NULL这里有一个误区如果存储的数据中某条数据用户名为NULL和在存储的过程中没有传入用户名数据库采用用户名默认值NULL不是相等的这个应该很好理解。举例id 为3的那条数据表示用户名就是字符串 NULL三. NULL值和空值查询方式的区别3.1 NULL 值的查询方式查询一个字段的值是否为NULL判断条件为 IS NULL(字段值为默认值NULL) 或 IS NOT NULL(字段值不为默认值NULL)不能使用 ! 因为这两个判断符号是用来判断值的而 NULL 则代表当前字段没有实际值不能使用 ! 来进行判断。举例一查询 user 用户表中字段 username 为 NULL 值的数据SELECT * FROM user WHERE user.username IS NULL执行SQL查到的只有id5的这条数据符合预期结果举例二查询 user 用户表中字段 username 不为NULL值的数据SELECT * FROM user WHERE user.username IS NOT NULL执行SQL查到的是除了刚才id5以外的四条数据符合预期结果3.2 空值的查询方式空值的查询方式和普通字段查询一样使用 或 ! 即可举例一查询邮箱字段 email 为空值的数据SELECT * FROM user WHERE user.email ;执行SQL结果查询到id245的三条数据符合预期举例二查询邮箱 email 和 性别 sex 都不为空值的数据SELECT * FROM user WHERE user.email ! AND user.sex ! ;执行SQL语句查询到id13的两条数据符合预期3.3 查询NULL的方式可以查询空值举例一查询默认值为空值的字段 email 不为NULL的数据SELECT * FROM user WHERE user.email IS NOT NULL;执行SQL查到了表中全部五条数据举例二查询默认值为空值的字段email不为NULL值的数据SELECT * FROM user WHERE user.email IS NULL;执行SQL没有数据由此也可以说明 空值 ! NULL3.4 查询空值的方法不可以查询NULL值举例一查询字段age默认值为NULL的为NULL的数据SELECT * FROM user WHERE user.age NULL;执行SQL没有查到任何数据但也没有报错举例二查询年龄字段age不为NULL的数据SELECT * FROM user WHERE user.age ! NULL;执行SQL结果仍然为空可以看出查询空值的办法并不适用于查询NULL值查询NULL值只能使用IS NULL(为空)IS NOT NULL(不为空)否则会导致查询结果不准确四. 聚合函数会计算空值但不计算NULL值聚合函数 COUNT()MIN()SUM()等他们在计算数据的时候会计算空值却不会计算NULL值这一点在COUNT() 计数函数中尤为明显SELECT COUNT(user.age) FROM user;执行SQL会发现结果是2为什么呢因为 user 表中id 3id4id5这三条数据的age都是NULL所以COUNT函数没有将它们计算在内得出的结果就只有两条数据我们再来看空值的情况SELECT COUNT(user.email) FROM user;执行SQL得出结果是5和表中总记录数5一致而我们在上面也看到了表中id2id4id5这三条数据的 email 都为空值但是COUNT函数仍然将它们计算在内这就是空值和NULL最大的区别

相关新闻

从告警疲劳到智能运维:Keep构建企业级AIOps监控新范式

从告警疲劳到智能运维:Keep构建企业级AIOps监控新范式

从告警疲劳到智能运维:Keep构建企业级AIOps监控新范式 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep 在数字化转型浪潮中,企业监控体系正面临前所未有的挑…

2026/7/23 14:12:01 阅读更多 →
C++ Web开发革命:Wt框架如何用原生C++颠覆传统Web开发模式

C++ Web开发革命:Wt框架如何用原生C++颠覆传统Web开发模式

C Web开发革命:Wt框架如何用原生C颠覆传统Web开发模式 【免费下载链接】wt Wt, C Web Toolkit 项目地址: https://gitcode.com/gh_mirrors/wt/wt 在Web开发领域,JavaScript和Python等脚本语言长期占据主导地位,但有一个框架正在悄然改…

2026/7/25 7:44:04 阅读更多 →
O3DE引擎架构解构:基于Gem的组件化设计与事件驱动通信机制

O3DE引擎架构解构:基于Gem的组件化设计与事件驱动通信机制

O3DE引擎架构解构:基于Gem的组件化设计与事件驱动通信机制 【免费下载链接】o3de Open 3D Engine (O3DE) is an Apache 2.0-licensed multi-platform 3D engine that enables developers and content creators to build AAA games, cinema-quality 3D worlds, and h…

2026/7/25 7:47:30 阅读更多 →

最新新闻

GitHub_Trending/cla/claude-skills实体识别技能:抽取关键信息的终极指南

GitHub_Trending/cla/claude-skills实体识别技能:抽取关键信息的终极指南

GitHub_Trending/cla/claude-skills实体识别技能:抽取关键信息的终极指南 【免费下载链接】claude-skills 345 Claude Code skills & agent skills & plugins (30 Agents, 70 custom commands, 330 skills, customizable references, scripts)for Claude Co…

2026/7/25 22:44:57 阅读更多 →
如何定制Type Theme:从配置到样式的完整指南,打造专属博客风格

如何定制Type Theme:从配置到样式的完整指南,打造专属博客风格

如何定制Type Theme:从配置到样式的完整指南,打造专属博客风格 【免费下载链接】type-theme A free and open-source Jekyll theme with responsive design. Great for blogs and easy to customize. 项目地址: https://gitcode.com/gh_mirrors/ty/typ…

2026/7/25 22:44:57 阅读更多 →
React Native Countdown Circle Timer:移动端圆形倒计时组件的终极实现方案

React Native Countdown Circle Timer:移动端圆形倒计时组件的终极实现方案

React Native Countdown Circle Timer:移动端圆形倒计时组件的终极实现方案 【免费下载链接】react-countdown-circle-timer Lightweight React/React Native countdown timer component with color and progress animation based on SVG 项目地址: https://gitco…

2026/7/25 22:44:57 阅读更多 →
Go语言类型系统深度探索:泛型、接口与反射在GoCourse中的应用

Go语言类型系统深度探索:泛型、接口与反射在GoCourse中的应用

Go语言类型系统深度探索:泛型、接口与反射在GoCourse中的应用 【免费下载链接】GoCourse Go language course 项目地址: https://gitcode.com/gh_mirrors/go/GoCourse Go语言以其简洁高效的设计理念受到开发者青睐,而其类型系统更是支撑这一特性的…

2026/7/25 22:44:57 阅读更多 →
STM32C542输入捕获频率测量:从原理到误差优化的完整指南

STM32C542输入捕获频率测量:从原理到误差优化的完整指南

在实际嵌入式开发中,频率测量是一个常见需求,无论是用于检测传感器输出、通信信号分析还是电机转速监控,都需要准确捕获外部信号的周期或频率。STM32系列微控制器内置的高级定时器,配合输入捕获功能,可以高效地完成这一…

2026/7/25 22:44:57 阅读更多 →
ObjectivePGP常见问题解答:解决加密解密中的10大痛点

ObjectivePGP常见问题解答:解决加密解密中的10大痛点

ObjectivePGP常见问题解答:解决加密解密中的10大痛点 【免费下载链接】ObjectivePGP ObjectivePGP is an open-source library for iOS and macOS that provides developers with tools for implementing OpenPGP encryption and decryption, digital signing, and …

2026/7/25 22:43:57 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 5:08:22 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 5:13:53 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻