2008-10-01 219 views
147

我在mysql中嘗試這樣做:mysql error 1025(HY000):'./foo'(errorno:150)的重命名錯誤是什麼意思?

mysql> alter table region drop column country_id; 

,並得到這樣的:

ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to 
'./product/region' (errno: 150) 

任何想法?外鍵的東西?

+0

@skiphoppy - 您是否試圖給予已經給定答案的賞金?這甚至允許嗎?或者你的情況不同,在這種情況下,你應該啓動另一個線程? – 2016-01-09 06:35:14

+0

@RickJames是的。然而,skiphoppy應該在她選擇的答案下添加她的評論,因爲當賞金結束時,布諾消息將消失。 – RandomSeed 2016-01-11 15:25:55

回答

219

如果你的表使用InnoDB引擎,你通常會得到這個錯誤。在這種情況下,您必須刪除外鍵,然後執行alter table並刪除列。

但棘手的部分是,您不能使用列名稱刪除外鍵,而是您必須找到用於索引它的名稱。地發現,發出以下選擇:

SHOW CREATE TABLE region;

這將顯示該指數的名稱,像這樣:

CONSTRAINT region_ibfk_1 FOREIGN KEY (country_id) REFERENCES country (id) ON DELETE NO ACTION ON UPDATE NO ACTION

現在只需發出:

alter table region drop foreign key region_ibfk_1 ;

而且終於:

alter table region drop column country_id;

你很好去!

0

我猜猜外鍵約束問題。 country_id是否被用作另一個表中的外鍵?

我不是DB大師,但我想我解決了這樣的問題(其中有一個fk約束)通過刪除fk,做我的改變表的東西,然後重做fk的東西。

我會有興趣聽到結果是什麼 - 某些時候mysql非常神祕。

+0

Mysql可能會很糟糕。通常很好,但是這些錯誤信息,sheesh。如果我們從辦公室裏的人那裏得到一個簡明的解釋,我會把它放在這裏。 – Trenton 2008-10-02 05:45:39

172

這的確是一個外鍵的錯誤,你可以找出使用PERROR:

shell$ perror 150 
MySQL error code 150: Foreign key constraint is incorrectly formed 

要了解更多詳細信息什麼失敗了,你可以使用SHOW ENGINE INNODB STATUS和尋找它包含了最新FOREIGN KEY錯誤部分有關錯誤的詳細信息。

就你而言,這很可能是導致引用country_id列的東西。

+3

這是一個好帖子。幫我找到問題! – Scarlett 2012-07-13 03:04:13

+1

不錯,我之前沒有意識到這個工具。 – 2012-09-30 23:26:51

+1

很好的答案,thanx! – nightcoder 2012-12-30 20:09:55

14

您也可以嘗試刪除不存在的外鍵時發生此錯誤。所以,當放棄外鍵時,一定要確保它們確實存在。

如果外鍵確實存在,而且仍然收到此錯誤請嘗試以下操作:

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL'; 

//刪除外鍵在這裏!

SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

這永遠不會把戲對我來說:)

1

採取錯誤的文件來看看你的mysql數據庫。根據Bug #26305我的SQL不給你的原因。這個錯誤自MySQL 4.1以來就存在了;-)

1

如果您使用的是像MySQL Workbench這樣的客戶端,請右鍵單擊希望從中刪除外鍵的表,然後選擇外鍵選項卡並刪除索引。

然後你可以運行這樣的查詢:

alter table table_name drop foreign_key_col_name; 
5

使用「KEY」只需運行ALTER TABLE查詢,而不是在下降聲明「外鍵」。我希望這將有助於解決問題,並會放棄外鍵約束,您可以更改表列並刪除表。

ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub; 

在這裏DROP KEY而不是DROP FOREIGN KEY

希望這將有助於。

感謝

1

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

要找出哪些表造成的錯誤,你可以運行SHOW ENGINE INNODBSTATUS,然後看看LATEST FOREIGN KEY ERROR部分

使用SHOW CREATE TABLE類別顯示約束的名稱。

最有可能將categories_ibfk_1

使用名稱下降外鍵第一和列則:

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1; 
ALTER TABLE categories DROP COLUMN assets_id; 
2

我也有類似的問題一次。我從表A中刪除了主鍵,但是當我試圖從表B中刪除外鍵列時,顯示了上述相同的錯誤。

您不能使用列名刪除外鍵,並且在PHPMyAdmin或MySQL中繞過此外鍵,請首先在重命名或刪除屬性之前刪除外鍵約束。

0

在我的情況下,我使用的是MySQL工作臺,而我在表中放置一列時遇到了同樣的問題。我找不到外鍵的名稱。我按照以下步驟來解決問題:

  1. Rt。點擊你的模式並選擇'模式檢查器'。這給你各種表,列,索引等。

  2. 轉到名爲'索引'的選項卡並搜索名爲'列'的列下的列的名稱。找到後,在列名'表'下檢查該記錄的表名。如果它匹配所需表的名稱,則記下名爲「Name」的列中的外鍵名稱。

  3. 現在執行查詢:ALTER table tableNamexx DROP KEY foreignKeyName;

  4. 現在您可以執行應該成功執行的drop語句。

1

我知道,這是舊的文章,但它是在每個人的喜愛的搜索引擎的第一擊,如果你正在尋找錯誤1025

然而,有一個簡單的「黑客」爲解決這個問題:

之前你執行你的命令(S)你首先必須禁用外鍵約束勾選使用這個命令:

SET FOREIGN_KEY_CHECKS = 0; 

因此您可以執行你的命令( S)。

您完成後,不要忘記啓用外鍵約束再次檢查,使用這個命令:

SET FOREIGN_KEY_CHECKS = 1; 

祝你的努力。

1

SET FOREIGN_KEY_CHECKS=0; 

在操作前也可以做的伎倆。

相關問題