MySQL唯一索引和NULL空值之间的关系
《》提到了当存在唯一索引的时候,不能插入两条(1, 'a', null),但是有朋友说,MySQL允许,实测一下,
root@mysqldb: [test]> create table tt1(c1 varchar(1), c2 varchar(1), c3 varchar(1));
Query OK, 0 rows affected (0.05 sec)
root@mysqldb: [test]> create unique index idx_tt1_01 on tt1(c1, c2, c3);
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
root@mysqldb: [test]> insert into tt1 values('a', 'a', null);
Query OK, 1 row affected (0.01 sec)
root@mysqldb: [test]> insert into tt1 values('a', 'a', null);
Query OK, 1 row affected (0.01 sec)
root@mysqldb: [test]> select * from tt1;
+------+------+------+
| c1 | c2 | c3 |
+------+------+------+
| a | a | NULL |
| a | a | NULL |
+------+------+------+
2 rows in set (0.00 sec)
MySQL官方文档明确写了支持null的这种使用方式,
https://dev.mysql.com/doc/refman/5.7/en/create-index.html#create-index-unique
因此,当出现异构数据库同步的要求,例如要从MySQL同步数据到Oracle,MySQL允许两条('a', 'a', null),但是Oracle不允许,这就可能导致同步出现错误,这种问题就很细,了解了原理,碰到场景,才好理解。
归根结底,还是数据库设计层面考虑的不同,这就需要在应用层设法抹平,达到一致的要求。
近期更新的文章:
《》
《》
《》
《》
《》
文章分类和索引:
》