1

我有一个 InnoDB 表,其中有一列名为“状态”。当代码运行异常时,可以用“成功”或“特殊”或 NULL 填充。

我有一个 cronjob,它查看这个表并尝试重新处理状态不是“成功”或“特殊”的行。但是,我注意到它不起作用。

所以我用以下查询查询了表:

SELECT * FROM master_innodb.some_table WHERE status!= 'succes' AND status!= 'special';

它返回 0 行。

当我将希望它从状态 NULL 返回的行更改为空字段时,查询返回了这一行。

有人可以解释一下吗?

问候,

马蒂斯

4

1 回答 1

1

因此,我认为您可以多了解一下 NULL 值在 MySQL 数据库中的含义。在最好的情况下,NULL 可能是一个令人困惑的野兽。来自MySQL 文档

在您习惯之前,NULL 值可能会令人惊讶。从概念上讲,NULL 表示“缺失的未知值”,它的处理方式与其他值有些不同。

所以 NULL 几乎意味着“没有数据”。因此,当您指定谓词时:

status != 'success' AND status != 'special'

然后status不返回列中带有NULL的行,因为我们不知道带有NULL的行status是等于'succes'还是等于'special'。因此它不会被退回。

你可以试试这个,而不是在你的 CRON 作业中重新处理获取行:

SELECT * FROM master_innodb.some_table WHERE status is null;
于 2013-09-13T13:16:41.400 回答