Mysql

創建具有不同名稱的相同唯一約束

  • August 17, 2018

在 MySQL 5.7 中

  1. alter table mydb.roles add constraint uk1 unique (role_name);
  2. 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 中修復

引用自:https://dba.stackexchange.com/questions/214851