mysql中的NULL值

mysql中的NULL值

在实际应用中,mysql的NULL值并没有发现有什么用处,但是却有一些不好的地方,需要来规避。

1、NULL和空值

NULL表示没有设置任何的值,空值其实是有值的,只是值为空而已。

mysql> select length(NULL), length(''), length('1');
+--------------+------------+-------------+
| length(NULL) | length('') | length('1') |
+--------------+------------+-------------+
| NULL         |          0 |           1 |
+--------------+------------+-------------+
2、查询
CREATE TABLE `tb_test` (
  `a` varchar(255) NOT NULL,
  `b` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT tb_test VALUES (1,NULL);
INSERT tb_test VALUES ('',"2");
INSERT tb_test VALUES ("3","3");

使用is null / is not null 来判断字段的值是否为NULL。

SELECT * FROM tb_test where a is NULL;
SELECT * FROM tb_test where a is not NULL;
3、COUNT()聚合查询

COUNT并不会统计值为NULL的行。

mysql> SELECT count(a) FROM tb_test;
+----------+
| count(a) |
+----------+
|        3 |
+----------+
mysql> SELECT count(b) FROM tb_test;
+----------+
| count(b) |
+----------+
|        2 |
+----------+
4、使用IFNULL函数

IFNULL的作用是为查询的字段设置默认值,如果该字段的值为NULL的话。

mysql> SELECT IFNULL(b,"aaaa") from tb_test WHERE b is null;
+------------------+
| IFNULL(b,"aaaa") |
+------------------+
| aaaa             |
+------------------+
5、索引字段说明
ALTER TABLE tb_test ADD INDEX index_all (a, b);
ALTER TABLE tb_test add INDEX index_b(b);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当然索引的规则是比较复杂的,在不同条件下表现形式又不一样,只能说在正常的查询中,NULL值不会使索引失效。

6、自增操作

增加一个字段

`c` int(11) DEFAULT NULL
mysql> update tb_test set c=c+1 where a="1";
Query OK, 0 rows affected
Rows matched: 1  Changed: 0  Warnings: 0

发现并没有执行任何操作。

综合以上,在创建表结构的时候不要设置默认值为NULL,免得出现奇怪的问题不好排查。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值