百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

性能测试:Mysql中的空值陷阱(mysql中空值怎么表示)

wptr33 2025-07-19 23:06 3 浏览

SQL 是一种声明式的语言,我们只需要描述想要的结果(WHAT),而不关心数据库如何实现(HOW);虽然 SQL比较容易学习,但是仍然有一些容易混淆和出错的概念。

今天我们就来说说 SQL 中的空值陷阱,我们可以先看看以下表格的详情。

陷阱一:空值不一定为空

空值是一个比较特殊的字段。在MySQL数据库中,在不同的情形下,空值往往代表不同的含义。这是MySQL数据库的一种特性。如在普通的字段中(字符型的数据),空值就是表示空值。但是如果将一个空值的数据插入到TimesTamp类型的字段中,空值就不一定为空。此时为出现什么情况呢

我先创建了一个表。在这个表中有两个字段:User_id(其数据类型是int)、Date(其数据类型是TimesTamp)。现在往这个表中插入一条记录,其中往Date字段中插入的是一个NULL空值。可是当我们查询时,其结果显示的却是插入记录的当前时间。这是怎么一回事呢?其实这就是在MySQL数据库中执行SQL语句时经常会遇到的一个陷阱:空值不一定为空。在操作时,明明插入的是一个空值的数据,但是最后查询得到的却不是一个空值。

在MySQL数据库中,NULL对于一些特殊类型的列来说,其代表了一种特殊的含义,而不仅仅是一个空值。对于这些特殊类型的列,各位读者主要是要记住两个。一个就是笔者上面举的TimesTamp数据类型。如果往这个数据类型的列中插入Null值,则其代表的就是系统的当前时间。另外一个是具有auto_increment属性的列。如果往这属性的列中插入Null值的话,则系统会插入一个正整数序列。而如果在其他数据类型中,如字符型数据的列中插入Null的数据,则其插入的就是一个空值。

陷阱二:空值不一定等于空字符

在MySQL中,空值(Null)与空字符(’’)相同吗?答案是否定的。

在同一个数据库表中,同时插入一个Null值的数据和一个’’空字符的数据,然后利用Select语句进行查询。显然其显示的结果是不相同的。从这个结果中就可以看出,空值不等于空字符。这就是在MySQL中执行SQL语句遇到的第二个陷阱。在实际工作中,空值数据与空字符往往表示不同的含义。数据库管理员可以根据实际的需要来进行选择。如对于电话号码等字段,可以默认设置为空值(表示根本不知道对方的电话号码)或者设置为空字符(表示后来取消了这个号码)等等。由于他们在数据库中会有不同的表现形式,所以数据库管理员需要区别对待。笔者更加喜欢使用空值,而不是空字符。这主要是因为针对空值这个数据类型有几个比较特殊的运算字符。如果某个字段是空字符,数据库中是利用字段名称来代替。相反,如果插入的是空值,则直接显示的是NULL。这跟其他数据库的显示方式也是不同的。

一是IS NULL 和IS NOT NULL关键字。如果要判断某个字段是否含用空值的数据,需要使用特殊的关键字。其中前者表示这个字段为空,后者表示这个字段为非空。在Select语句的查询条件中这两个关键字非常的有用。如需要查询所有电话号码为空的用户(需要他们补充电话号码信息),就可以在查询条件中加入is not null关键字。

二是Count等统计函数,在空值上也有特殊的应用。如现在需要统计用户信息表中有电话号码的用户数量,此时就可以使用count函数、同时将电话号码作为参数来使用。因为在统计过程中,这个函数会自动忽略空值的数据。此时统计出来的就是有电话号码的用户信息。如果采用的是空字符的数据,则这个函数会将其统计进去。统计刚才建立的两条记录时,系统统计的结果是1,而不是2。可见系统自动将Null值的数据忽略掉了。

判断NULL用is null 或者 is not null。 sql语句里可以用ifnull函数来处理

判断空字符串‘’,要用 ='' 或者 <>''。sql语句里可以用if(col,col,0)处理,即:当col为true时(非null,及非'')显示,否则打印0


相关推荐

面试官:MySQL的自增ID用完了,怎么办?

来自:Java技术驿站既然这块知识点不清楚,那回头就自己动手实践下。首先,创建一个最简单的表,只包含一个自增id,并插入一条数据。create table t0(id i...

SQL 开发必学:深度解析 NULL 值处理的 6 大核心规则与避坑指南

在数据库开发中,NULL值处理是极易引发逻辑错误的技术难点。本文从SQL标准规范出发,系统梳理NULL值的底层逻辑与工程实践要点,帮助开发者建立完整的NULL值处理知识体系。一、三值逻辑...

SQL查找是否&quot;存在&quot;,别再用count了

根据某一条件从数据库表中查询『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECTCOUNT(*)呢?无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往...

一文带你掌握shell脚本中的if条件语句,轻松搞定工作需求

#shell编程##linux#...

一文搞懂MySQL的左、右、内、外连接

一、前言1、MySQL中的左连接...

性能测试:Mysql中的空值陷阱(mysql中空值怎么表示)

SQL是一种声明式的语言,我们只需要描述想要的结果(WHAT),而不关心数据库如何实现(HOW);虽然SQL比较容易学习,但是仍然有一些容易混淆和出错的概念。今天我们就来说说SQL中的空值陷阱...

MySQL--常用函数(MySQL常用函数汇总)

介绍MySQL函数,是一种控制流程函数,属于数据库用语言。MySQL数据库中提供了很丰富的函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数...

MySQL函数详解:IF()、IFNULL()、NULLIF()、ISNULL()、CASE

2025年3月27日,MySQL作为最流行的关系型数据库管理系统之一,其丰富的函数库为开发者提供了强大的数据处理能力。本文将详细解析MySQL中常用的条件判断函数:IF()、IFNULL()、NULL...

java迭代器iterator(java迭代器iterator增加一条记录)

/***iterator迭代器Collection接口继承了Iterable接口iterable可迭代的在Iterable接口中定义了iterator()方法用于生成迭代器...

说说Redis的数据类型(redis中的数据类型)

一句话总结Redis核心数据类型包括:String:存储文本、数字或二进制数据。List:双向链表,支持队列和栈操作。Hash:字段-值映射,适合存储对象。Set:无序唯一集合,支持交并差运算。...

一网打尽-HashMap面试题(hashmap数据结构面试)

全文4896字。读完五分钟,即可获得HashMap理解全部面经和原理。坚持就是胜利1、实现原理...

本地缓存GuavaCache(一)(本地缓存caffeine)

在并发量、吞吐量越来越大的情况下往往是离不开缓存的,使用缓存能减轻数据库的压力,临时存储数据。根据不同的场景选择不同的缓存,分布式缓存有Redis,Memcached、Tair、EVCache、Aer...

想月薪过万吗?计算机安卓开发之&quot;集合&quot;

集合的总结:/***Collection*List(存取有序,有索引,可以重复)*ArrayList*底层是数组实现的,线程不安全,查找和修改快,增和删比较慢...

Spring Boot 控制 Controller 接口的4种方式,哪种更适合你?

环境:SpringBoot3.4.2...

这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试均可)

方法重载和方法重写的区别方法重写重写体现在继承关系上。在Java中,子类继承父类,子类就会具备父类所以的特征,以及父类的方法和变量比如动物类有“叫”的方法,小狗小猫分别继承了动物类,重写方法时就可以...