在 MySQL 5.7 中
alter table mydb.roles add constraint uk1 unique (role_name);
alter table mydb.roles add constraint uk2 unique (role_name);
第二条命令 alter
向我发出警告:
在表“world_x.roles”上定义了重复索引“uk2”。这已被弃用,在未来的版本中将被禁止。
当我在 Postgres(10.x) 中尝试同样的操作时,它没有警告我。
那么,在这种情况下,SQL 标准是什么?
这可能会导致非常混乱的混合名称约束并减慢您的查询,因为它们具有相同的名称
也许这个结果有帮助
例子
没有双重约束,也没有警告消息,您可以保持 SQL 规则有效
正如您在以下链接中看到的,实际上这些场景是一个错误
https://bugs.mysql.com/bug.php?id=37520
并最终在以下位置得到认可:https ://bugs.mysql.com/bug.php?id=8565
并最终在 MySQL Server 5.6.7 中修复
这根本不是真的。
然而,在 PostgreSQL 中,大多数人不会命名任何东西,因为系统很棒并且自动生成的名称工作正常,
这在规范中称为 a
<table constraint definition>
,其中说明了这一点 (SQL:2011n)。整个模式不允许重复约束。顺便说一句,规范还声明实现不能生成冲突的隐式名称(必须是唯一的)。