我有一个InnoDB表,其中包含名为' status'的列。这可以用“成功”来填补。当代码运行异常时,或者' special'或者为NULL。
我有一个cronjob查看此表并尝试重新处理状态不是' succes'或者'特殊'。但是我注意到它没有用。
所以我用以下查询查询了表:
SELECT * FROM master_innodb.some_table WHERE status
!=' succes'和status
!='特殊';
返回0行。
当我更改了我期望它从状态NULL返回到空字段的行时,查询返回了此行。
有人可以解释一下吗?
此致
Matthijs
答案 0 :(得分:1)
所以我认为你可以更多地了解一个NULL值在MySQL数据库中代表什么。在最好的时候,NULL可能是一个混乱的野兽。来自MySQL docs:
在您习惯之前,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;