我已經在 MySQL Workbench 中匯入了一些表作為從 Microsoft Access 匯出的 .csv 檔案,然后我設定了一些關系。當我嘗試同步模型時,我收到了這個奇怪的錯誤:錯誤 1826:重復的外鍵約束名稱“idMarca”。我說很奇怪,因為我對此沒有任何解釋,因為圖中沒有任何重復的外鍵名稱(實際上“Productos”中的 idMarca 沒有重復,因為在表“Ingresos”中它的名稱以大寫開頭信件)。
如果有人可以幫助我,請提前感謝。
我嘗試搜索重復的外鍵,但沒有找到。
uj5u.com熱心網友回復:
通常我會認為這是 Microsoft Access 的錯誤,因為 Access 經常不符合標準 SQL。但這一次是 MySQL 的錯。
這是 MySQL 中的一個錯誤:https ://bugs.mysql.com/bug.php?id=72751
根據https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitive.html,約束名稱應該區分大小寫:
如果根據二進制排序規則它們的大寫形式相等,則物件名稱可能被認為是重復的。
換句話說,一些物件名稱不區分大小寫。
對于游標、條件、程序、函式、保存點、存盤的例程引數、存盤的程式區域變數和插件的名稱也是如此。對于列名、約束、資料庫、磁區、使用 PREPARE 準備的陳述句、表、觸發器、用戶和用戶定義的變數的名稱,情況并非如此。
這表示約束名稱是其名稱應該區分大小寫的物件型別之一。
但是該檔案是不正確的。目前 MySQL 將約束名稱視為不區分大小寫。所以約束命名idMarca和IdMarca沖突。
我們可以演示一下:
mysql> create table parent (id int primary key);
Query OK, 0 rows affected (0.01 sec)
mysql> create table child1 (parent int, constraint con foreign key (parent) references parent(id));
Query OK, 0 rows affected (0.01 sec)
mysql> create table child2 (parent int, constraint Con foreign key (parent) references parent(id));
ERROR 1826 (HY000): Duplicate foreign key constraint name 'Con'
這是 MySQL 8.0 中的錯誤訊息。名稱con和Con應該被視為不同的,但它們不是。
在舊版本的 MySQL 中,錯誤訊息不清楚,例如“1050: Table './test/child2' already exists”。
如何解決這個問題?您必須手動創建外鍵約束。
這個錯誤是在 2014 年報告的,并且尚未修復,所以我不會讓你寄希望于它會很快得到修復。您可以單擊錯誤跟蹤器中的“影響我”按鈕投票給它以獲得一些關注,但不要指望它。只需修復專案中的約束名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/450607.html
標籤:mysql
上一篇:從表中選擇沒有反向的資料
