为什么你的 SQL 脚本在 shell 中执行总报错?
防止SQL注入的五种方法
mysql — exists 替换 in
空字符串、NULL以及’NULL’的异同
[注意事项]
在写 SQL 的过程中,时刻注意 “空字符串”和NULL的区别。
eg. 学生表如下:求各个学生的数学和英语分数之和。
SELECT
s.NAME,
SUM( s.math + s.en )
FROM
student s
GROUP BY
s.id
查询结果:
大宝的分数竟然为 NULL?何故?查看 student
表可知,大宝的英语为NULL
,进而导致总分为 NULL
。这里涉及到一个 MySQL 的知识点:数字/字符串做”+”,遇到 NULL
则为 NULL
。所以,上面的 SUM(math+en)
为 NULL
也就不足为奇了。
- 的作用:加法运算
select 数值+数值;直接运算 select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算 select null+值;结果都为null
解决办法:使用 IFNULL( 值1, 值2 )
,即值1为 NULL
时,取值2的值。
SELECT
s.NAME,
SUM( IFNULL( s.math, 0 ) + IFNULL( s.en, 0 ) )
FROM
student s
GROUP BY
s.id
判断一个字段值是否为空
select * from user u where u.name = ''
判断一个字段值是否为NULL
-- 错误写法
select * from user u where u.name = null
-- 正确写法:
select * from user u where u.name is null