2010-11-02 60 views
69

所以我試圖添加一個主鍵到我的數據庫中的一個表。現在它有一個這樣的主鍵:#1025 - 將'./database/#sql-2e0f_1254ba7'重命名爲'./database/table'錯誤(錯誤:150)

PRIMARY KEY (user_id, round_number) 

其中user_id是一個外鍵。

我試圖把它改成這樣:

PRIMARY KEY (user_id, round_number, created_at) 

我在phpMyAdmin通過點擊表結構視圖中的主鍵圖標這樣做。

這是我的錯誤:

#1025 - Error on rename of './database/#sql-2e0f_1254ba7' to './database/table' (errno: 150) 

這是一個MySQL數據庫InnoDB表引擎。

+1

使用Google進行快速搜索會讓我覺得這個問題與約束有關。可能有用的鏈接:http://dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html和http://www.simplicidade.org/notes/archives/2008/03/mysql_errno_150。 html – Lekensteyn 2010-11-02 18:01:55

回答

124

可能還有另一個引用您要更改的主鍵的外鍵的表。

要找出哪個表導致了錯誤,您可以運行SHOW ENGINE INNODB STATUS,然後查看LATEST FOREIGN KEY ERROR部分。

+0

在我的情況下,數據庫是新創建的,根本沒有表。 – 2018-01-30 01:37:44

20

對於那些通過谷歌來得到這個問題的人...如果您嘗試重新命名作爲外鍵的字段,也會發生此錯誤。

28

正如你所說,你需要刪除之前的FKs。在MySQL做這樣的:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`; 

ALTER TABLE `table_name` DROP INDEX `id_name_fk`; 
+1

你的回答確實幫了我。 DROP FOREIGN KEY解決了這個問題。謝謝 – 2017-02-21 11:35:12

13

要在phpMyAdmin或使用MySQL繞過此,重命名屬性之前先刪除外鍵約束。

(對於PHPMyAdmin的用戶:要刪除FK在phpMyAdmin約束,選擇屬性,然後單擊「關係圖」旁邊的表結構下方的工具欄中的「打印預覽」)

+1

我認爲這是最準確的答案 – MontrealDevOne 2014-11-05 19:36:13

3

如果你想刪除列是一個FOREIGN KEY,你必須找到正確的名字,而不是列名。例如:如果我試圖刪除服務器表的外鍵Alarms表中的服務器字段。

  1. SHOW CREATE TABLE alarm; 外觀爲CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`)線。
  2. ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
  3. ALTER TABLE `alarm` DROP `server_id`

這將刪除警報表的外鍵服務器。

3

我有這個問題,它是外鍵

點擊Relation View(如下圖),然後找到你要刪除的字段的名稱,並根據Foreign key constraint (INNODB)列,只需將選擇設置爲無!意味着沒有外鍵

enter image description here

希望的作品!

0

如果您正在添加外鍵並面臨此錯誤,則可能是子表中的值不在父表中。

假設要添加外鍵的列的所有值都設置爲0,並且該值在引用它的表中不可用。

您可以設置父表中存在的某些值,然後添加外鍵爲我工作。