一般开发人员喜欢用NULL来作为判断,但是这不是一个好习惯。在有些数据库比如Oracle中几乎是无法用到索引的,在其他数据库中也极有可能无法用到索引。这里严谨一点,因为我都有在特殊场景的案例以及原因。
今天先说NULL是什么?开发人员认为这不就是空吗?我说不是啊。
来看看下面的实验。这里写入一条空值,另外再写入一个空字符串。因为也有开发有这个习惯。一起看看效果。
然后如下图查询a列不等于0的,看到这个结果开发人员是吃惊的。和预期大相径庭。
同样,如下图,如果计算求和与平均值,都没id2和id3的参与。只有id1和id4。
如果对全表进行运算,其结果如下图id2和id4都不参与运算
模拟一条数据变为负数。如下图所示,会发现count的数值和预期的逻辑不符合。如果以这样的数据去做业务判断,显然就会出错。
为什么会这样?就是我们一开始杀锁的,NULL不是空,而是不确定。因为不确定,所以各种查询都没有他,也不支持运算。
而where column is null极有可能是无法用到索引的。所以这就是我们不建议仅仅使用NULL作为业务逻辑判断的。