Jackiesteed

www.github.com/jackiesteed

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于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的值的要求.

posted on 2015-02-03 00:33  Jackiesteed  阅读(134)  评论(0编辑  收藏  举报