vlambda博客
学习文章列表

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不允许,这就可能导致同步出现错误,这种问题就很细,了解了原理,碰到场景,才好理解。


归根结底,还是数据库设计层面考虑的不同,这就需要在应用层设法抹平,达到一致的要求。



近期更新的文章:

《》

《》

《》

《》

《》


文章分类和索引: