MySQL 学习笔记

MySQL是一个开源的关系型数据库,非常流行。

如无特殊说明,本专题文章的 SQL 均在 5.6 版本中验证。

👉文章列表
MySQL 学习笔记 ⏬ 创建和删除数据库 切换和查看数据库 创建和删除表 在表中增加、删除、修改列 添加和删除索引 增删查改 创建和删除主键 大小写和反引号 字符串类型值的大小写 SQL注释 CHAR类型 VARCHAR类型 整型数字 时间戳 不要使用utf8 唯一索引与NULL 唯一索引的单列长度限制 NULL的判等 DDL、DML、DCL的含义 查看表的状态 show table status InnoDB存储引擎的限制 if和case的使用 自定义函数 InnoDB 索引 事务 事务隔离级别的概念、查看和修改 读已提交(read committed)隔离级别下的锁 可重复读(repeatable read)隔离级别下的锁 修改自增主键id的类型 使用 load data 快速导入数据 使用 select into outfile 导出数据

MySQL: 关于 null 的那些事


NULL 的判等

NULL 与唯一索引

NULL 会让唯一索引无法保证唯一性。

MySQL: 唯一索引与NULL

NULL 与 count 计数

count 某一个列时,会忽略null的数据。

用一个真实的表做例子:

USE test;
CREATE TABLE `test_table` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name1` varchar(32) DEFAULT NULL COMMENT '名字1',
  `name2` varchar(32) DEFAULT NULL COMMENT '名字2',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

插入数据:

insert into test_table(name1, name2) values('letian', 'letian');
insert into test_table(name1, name2) values('letian', 'letianbiji');
insert into test_table(name1, name2) values('letian', null);
insert into test_table(name1, name2) values(null, null);

查询:

mysql> select * from test_table;
+----+--------+------------+
| id | name1  | name2      |
+----+--------+------------+
| 1  | letian | letian     |
| 2  | letian | letianbiji |
| 3  | letian | <null>     |
| 4  | <null> | <null>     |
+----+--------+------------+

mysql> select count(*) from test_table;
+----------+
| count(*) |
+----------+
| 4        |
+----------+

mysql> select count(id), count(name1), count(name2) from test_table;
+-----------+--------------+--------------+
| count(id) | count(name1) | count(name2) |
+-----------+--------------+--------------+
| 4         | 3            | 2            |
+-----------+--------------+--------------+

concat

concat 函数会将多个参数连接成字符串。若有一个参数为 null,结果则为 null。

mysql> select concat(1,2,3)
+---------------+
| concat(1,2,3) |
+---------------+
| 123           |
+---------------+

mysql> select concat('1','2')
+-----------------+
| concat('1','2') |
+-----------------+
| 12              |
+-----------------+

mysql> select concat(1,2,null)
+------------------+
| concat(1,2,null) |
+------------------+
| <null>           |
+------------------+

尽量不要用 NULL

允许 null 值时:

  1. 可能导致唯一索引不符合预期。
  2. 一些 业务SQL 会变的复杂,要考虑是 null 的场景,也要考虑非 null 的场景。

简单说,不允许为 null 时,很多处理会变得更简单。


( 本文完 )

文章目录