![](/img/trans.png)
[英]Error 'Table '.\schema\table' already exists when adding foreign key
[英]Table doesn't exists error when adding a foreign key to existing table
我正在向 mySQL 數據庫中的表中的列添加外鍵:
ALTER TABLE Orders ADD CONSTRAINT FK_ProjectNumber FOREIGN KEY (porj) REFERENCES proj(projno);
現有列的表是emp,emp中的列是porj,外鍵駐留在表proj中,列projno。 但是我收到以下錯誤:
1146 - Table 'empdept.orders' doesn't exist
我不明白對 empdept.orders 的引用,empdept 不是表,“orders”也不是數據庫中任何現有表上的列,那么為什么要提到它?
任何輸入表示贊賞。
該錯誤引用了一個合格的表名,即您的架構名稱是emptdept
並且表名稱是Orders
。
如果表Orders
是 MyISAM(或者 InnoDB 以外的任何東西,我假設),我可以在 MySQL 8.0 上重現這個錯誤。
mysql> CREATE TABLE `proj` (
-> `projno` int(11) NOT NULL,
-> PRIMARY KEY (`projno`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
mysql> CREATE TABLE `orders` (
-> `porj` int(11) DEFAULT NULL
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
mysql> ALTER TABLE Orders ADD CONSTRAINT FK_ProjectNumber FOREIGN KEY (porj) REFERENCES proj(projno);
ERROR 1146 (42S02): Table 'test.Orders' doesn't exist
MyISAM 表不支持外鍵約束。
很遺憾錯誤信息如此不清楚。 該表存在,但在 InnoDB 數據字典中不存在。 我想這就是他們的理由。
我在 MySQL 5.7 中沒有看到相同的錯誤,而是得到了這個結果:
Query OK, 0 rows affected (0.02 sec)
當您嘗試在 MySQL 5.7 中的 MyISAM 表上創建外鍵時,該操作將被靜默忽略。 它不會導致任何錯誤,它只是不這樣做。
隨着 MySQL 8.0 中 InnoDB 數據字典的新實現,他們最終拋出錯誤,而不是默默地接受不支持的功能的 ALTER TABLE。
順便說一句,我建議您不要再使用 MyISAM 表。 它們正在逐漸過時。
我忘記在引用的表中設置主鍵,現在解決了:
create table proj (projno numeric(3,0) not null, pname char(5), budget numeric (7,2, PRIMARY KEY (projno)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.