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: 0root@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不允许,这就可能导致同步出现错误,这种问题就很细,了解了原理,碰到场景,才好理解。
归根结底,还是数据库设计层面考虑的不同,这就需要在应用层设法抹平,达到一致的要求。
近期更新的文章:
《》
《》
《》
《》
《》
文章分类和索引:
》
