Mysql
創建具有不同名稱的相同唯一約束
在 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 標準是什麼?
這可能會導致非常混亂的混合名稱約束並減慢您的查詢速度,因為它們具有相同的名稱
也許這個結果有幫助
僅創建一個約束索引並包含那些必要的列
例子
ALTER TABLE users ADD CONSTRAINT findUser UNIQUE (nameUser,emailUser);
沒有雙重約束,也沒有警告消息,您可以保持 SQL 規則有效
請記住,SQL 是一個標準,但不是針對具有相同規則的每個人同時實施的
正如您在以下連結中看到的那樣,實際上這些場景是一個錯誤
https://bugs.mysql.com/bug.php?id=37520
並最終在:https ://bugs.mysql.com/bug.php?id=8565
最後在 MySQL Server 5.6.7 中修復