1 row in set (0.00 sec)
mysql create table t3 like t1
Query OK, 0 rows affected (0.04 sec)
mysql insert into t3 select concat(r1,'database') from t1 limit 2;
Query OK, 2 rows affected (0.02 sec)
Records: 2Duplicates: 0Warnings: 0
mysql select * from t3;
+------+
| r1|
+------+
| NULL |
| NULL |
+------+
2 rows in set (0.00 sec)
那正确的方法如下 , 对 NULL 用函数 IFNULL 特殊处理 。
mysql insert into t3 select concat(ifnull(r1,''),'database') from t1 limit 2;
Query OK, 2 rows affected (0.01 sec)
Records: 2Duplicates: 0Warnings: 0
mysql select * from t3;
+----------+
| r1|
+----------+
| database |
| database |
+----------+
2 rows in set (0.00 sec)
2. 对于包含 NULL 列的求 COUNT 值也不准确
t1 和 t2 的记录数是一样的,但是字段 r1 包含了 NULL,这导致结果忽略了这些值 。
mysql select count(r1) as rc from t1;
+-------+
| rc|
+-------+
| 16384 |
+-------+
1 row in set (0.01 sec)
mysql select count(r1) as rc from t2;
+-------+
| rc|
+-------+
| 32768 |
+-------+
1 row in set (0.03 sec)
这时候我们可能想到了,正确的方法是用 NULL 相关函数处理,
mysql select count(ifnull(r1,'')) as rc from t1;
+-------+
| rc|
+-------+
| 32768 |
+-------+
1 row in set (0.03 sec)
或者是直接用 COUNT(*) 包含了所有可能的值
mysql select count(*) as rc from t1;
+-------+
| rc|
+-------+
| 32768 |
+-------+
1 row in set (0.02 sec)
当然了不仅仅是 COUNT,除了 NULL 相关的函数,大部分对 NULL 处理都不友好 。
所以其实从上面两点来看,NULL 的处理都得特殊处理,额外增加了编写 SQL 的难度 。
3. 包含 NULL 的索引列
对包含 NULL 列建立索引,比不包含的 NULL 的字段,要多占用一个 BIT 位来存储 。
示例
key_len 分别为 43 和 42 , t1 比 t2 多了一个字节,那这里可能有人要问了 , 不是说占了一个 BIT 位吗?那为什么多了一个字节?可以关注我上一篇文章(第02期:MySQL 数据类型的艺术 - 大对象字段)关于 BIT 的详细描述 。
mysql pager grep -i 'key_len'
PAGER set to 'grep -i 'key_len''
mysql explain select * from t1 where r1 = ''\G
key_len: 43
1 row in set, 1 warning (0.00 sec)
mysql explain select * from t2 where r1 = ''\G
key_len: 42
1 row in set, 1 warning (0.00 sec)
4. 各存储引擎相关的对 NULL 的处理
在 MySQL 8.0 发布后,仅有 InnoDB、MyISAM 和 Memory 支持对包含 NULL 列的索引,其mysql中非空怎么写他引擎不支持 。比如 NDB 。
关于mysql中非空怎么写和mysql非空函数的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- HR如何通过新媒体更多简历,如何利用新媒体进行招聘
- 微信视频号评论违规吗知乎,微信视频号评论会被看到吗
- 副机位拍摄什么,副机位拍摄技巧
- 羚萌直播看直播教程,羚萌直播看直播教程在哪里
- 关于linux查看ntp命令的信息
- html实现js高亮,html代码高亮插件
- python爬虫pdfcsdn,python爬虫要学多久
- 情景展会如何营销,展会策划情景对话
- go语言配置推荐 go语言最新版本