likes
comments
collection
share

浅谈0和NULL在数据库中的区别

作者站长头像
站长
· 阅读数 24

前缀

大家在平常的软件项目开发过程当中肯定会遇到比如说,数据返回0或者null的情况。

从某种角度来说返回0和返回null其实他们都是有意的,即存在就是合理的。

那么为什么要分析零和null有什么区别呢?这其实跟我在项目开发的过程当中经常会遇到这种情况,尤其是在最近做后台管理系统中的一个模块--数据统计的时候就要经常跟这两个数值打交道。

好了下面我们就开始今天的话题吧!!!

概念性

首先我们先看零和null这两个值在数据库中的含义

NULL的含义: null在数据库中表示的是一个字段没有值,它不是一个具体的数值,而是一个特殊的标记,类似于占位吧,我是这样理解的。

0的含义: 相比于null,0是一个具体的数字,能够说明问题的一个值,而且0是可以参与MYSQL数据库聚合函数数学运算的,而且是可以成为数据结果的一个值。

它们两个的主要的就是这些内容,下来我们看看它们两个在数据库中是如何进行使用。

操作性

我们在数据库操作的时候创建表正常的字段一般就默认为null,个别字段比如说是否删除字段,它有两个状态0:未删除,1删除,这个时候,我们比如说查询数据的时候,这个0是可以作为判断条件的。如下图

浅谈0和NULL在数据库中的区别

浅谈0和NULL在数据库中的区别

接下来我们将他们使用在聚合函数中,看看它们的表现如何

先创建一张表并插入数据:

浅谈0和NULL在数据库中的区别 数据库插入成功以后图例

浅谈0和NULL在数据库中的区别 就以这样表为例,我们使用聚合函数count统计表中的卡片的总数,未激活卡片总数,和激活卡片总数。

我们使用case...when...函数进行条件筛选,case...when...的写法格式这里就不在多说,网上都能查到。

我们主要演练的是case...when...函数中使用0和null的区别。

使用null 结果:

    SELECT
                    COUNT( CASE WHEN 1 = 1 THEN 1 ELSE NULL END ) AS totalCards,
                    COUNT( CASE WHEN is_activation = 1 THEN 1 ELSE NULL END )AS notActivationCards,
                    COUNT( CASE WHEN is_activation = 2 THEN 1 ELSE NULL END )AS activationCards
    FROM
                    t_member_card
    WHERE is_delete = 0;

浅谈0和NULL在数据库中的区别 使用0结果:

SELECT
	COUNT( CASE WHEN 1 = 1 THEN 1 ELSE 0 END ) AS totalCards,
	COUNT( CASE WHEN is_activation = 1 THEN 1 ELSE 0 END )AS notActivationCards,
	COUNT( CASE WHEN is_activation = 2 THEN 1 ELSE 0 END )AS activationCards
FROM
	t_member_card
WHERE is_delete = 0;

浅谈0和NULL在数据库中的区别

浅谈0和NULL在数据库中的区别

可以看到,使用null统计出来的结果是正确的,而使用0统计出来的结果是不对的。

所以有时候null也是有作用的,存在即是合理的。

以上分享内容大概就这么多,如果不对的地方请指出,并加以改正。

转载自:https://juejin.cn/post/7393310486149021707
评论
请登录