关于NULL的运算
mysql的NULL字段是一个大坑呀~~
- 普通运算符
SELECT NULL, 1+NULL, CONCAT('Invisible',NULL), ('aaa' = null), ('aaa' != null);
这个命令, 每一个列都是NULL.
也就是说任何有NULL参与的运算, 结果都是NULL.
这是个黑洞呀, 谁来吃谁~
- IS, IS NOT
对NULL进行运算, 只能用IS NULL 和IS NOT NULL 两个命令.
SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
这个可以进行有效的判断.
有个case 可以思考一下:
比如有个jackiesteed_user表有一列叫 phone吧, 最开始都设置成了NULL, 因为某某原因(比如一开始没有找到大家都还没有phone, 这个列后来加的).
后来有些人填上了phone. 那么 现在, 表里面有10个用户有了phone, 有另外10个的phone IS NULL.
有个用户hack进来, 想要从jackiesteed_user删掉所有其他用户, 他运行了 delete from jackiesteed_user where phone != '10086';
但是他只删了9个用户, 因为 NULL != '10068' 结果 是NULL, 不满足where 需要的 true/false的值的要求.