June's Studio.

MySQL-坑

字数统计: 314阅读时长: 1 min
2020/03/14

1.数据丢失
当某列存在null时,再使用count(name) 查询该列,会丢失值为null的数据,使用count(*) 则不会

  1. distinct数据丢失
    select count(distinct name,mobile) from persion. 如果其中一列为null,即使另外一列有不同的值,那么查询的也会丢失数据

  2. select数据丢失
    如果某列存在null值,如果执行不等于查询(<> / !=) 会导致为null值的结果丢失

优化: selct * from person where name <> ‘java’ or isnull(name) order by id;

  1. 导致空指针异常- 如果某列存在null值,可能会导致sum(column)的返回结果为NULL而非0,如果sum的结果为NULL,可能会引起程序的报错(空指针 NPE)

优化: select ifnull(sum(num),0) from goods where id > 4;

5.增加了查询难度
当某列值中有NULL值时,在进行NULL值 或者 非NULL值的查询难度就增加了

即:当进行NULL值查询时,必须使用NULL值匹配的查询方法,IS NULL 或者 IS NOT NULL 又或者 IFNULL(column) ,而传统的 =、!=、<>…等这些表达式就不能使用了

ps: NULL不会影响索引

省流:建表每个字段都给默认值,数据表中不要出现null

CATALOG