簡體   English   中英

將外鍵添加到現有表時,表不存在錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM