1)所有使用NULL值的情况,都可以通过一个有意义的值的表示,这样有利于代码的可读性和可维护性,并能从约束上增强业务数据的规范性。
(2)NULL值到非NULL的更新无法做到原地更新,更容易发生索引分裂,从而影响性能。(null -> not null性能提升很小,除非确定它带来了问题,否则不要当成优先的优化措施)
(3)NULL值在timestamp类型下容易出问题,特别是没有启用参数explicit_defaults_for_timestamp
(4)NOT IN、!= 等负向条件查询在有 NULL 值的情况下返回永远为空结果,查询容易出错
(1) NOT IN子查询在有NULL值的情况下返回永远为空结果,查询容易出错
select name from table1 where name not in (select name from table2 where id!=1)
+————-+
| name |
|————-|
+————-+
(2) 列值允许为空,索引不存储null值,结果集中不会包含这些记录。
select * from table2 where name != ‘zhaoyun’
+——+————-+
| id | name |
|——+————-|
| | |
+——+————-+
select * from table2 where name != ‘zhaoyun1’
+——+————-+
| id | name |
|——+————-|
| 1 | zhaoyun |
+——+————-+
(3) 使用concat拼接时,首先要对各个字段进行非null判断,否则只要任何一个字段为空都会造成拼接的结果为null
select concat(“1”, null) from dual;
+——————–+
| concat(“1”, null)|
|——————–|
| NULL |
+——————–+
(4) 当计算count时候null column不会计入统计
select count(name) from table2;
+——————–+
| count(user_name) |
|——————–|
| 1 |
+——————–+
https://www.cnblogs.com/balfish/p/7905100.html
https://www.cnblogs.com/cnwp007/articles/15292198.html