为什么你的 SQL 脚本在 shell 中执行总报错?

404 - Not Found · 语雀

防止SQL注入的五种方法

404 - Not Found · 语雀

mysql — exists 替换 in

空字符串、NULL以及’NULL’的异同

[注意事项]
在写 SQL 的过程中,时刻注意 “空字符串”和NULL的区别。

eg. 学生表如下:求各个学生的数学和英语分数之和。
MySQL中常见的坑 - 图1

  1. SELECT
  2. s.NAME,
  3. SUM( s.math + s.en )
  4. FROM
  5. student s
  6. GROUP BY
  7. s.id

查询结果:
MySQL中常见的坑 - 图2

大宝的分数竟然为 NULL?何故?查看 student 表可知,大宝的英语为NULL,进而导致总分为 NULL。这里涉及到一个 MySQL 的知识点:数字/字符串做”+”,遇到 NULL 则为 NULL。所以,上面的 SUM(math+en)NULL 也就不足为奇了。

  • 的作用:加法运算

select 数值+数值;直接运算 select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算 select null+值;结果都为null

解决办法:使用 IFNULL( 值1, 值2 ),即值1为 NULL 时,取值2的值。

  1. SELECT
  2. s.NAME,
  3. SUM( IFNULL( s.math, 0 ) + IFNULL( s.en, 0 ) )
  4. FROM
  5. student s
  6. GROUP BY
  7. s.id

判断一个字段值是否为空

  1. select * from user u where u.name = ''

判断一个字段值是否为NULL

  1. -- 错误写法
  2. select * from user u where u.name = null
  3. -- 正确写法:
  4. select * from user u where u.name is null