24

我想放棄我的表的外鍵,但一直到這個錯誤信息無法刪除外鍵

mysql> alter table customers drop foreign key customerid; 
ERROR 1025 (HY000): Error on rename of '.\products\customers' to '.\products\#sql2-7ec-a3' (errno: 152) 
mysql> 
+1

這可能會幫助您瞭解 http://stackoverflow.com/questions/160233/what-does-mysql-error-1025-hy000-error-on-rename-of-foo-errorno-150-me – Imdad

+1

@Imdad這個鏈接描述了另一個錯誤 - (errno:150) – Devart

+0

試試這個。創建新表(沒有外鍵約束)。將數據複製到新表(使用語法INSERT INTO new_table SELECT * FROM old_table)刪除舊錶 – Imdad

回答

6

爲避免在嘗試刪除外鍵時發生此錯誤,請使用約束名稱而不是外鍵的列名。

當我試圖

mysql> ALTER TABLE mytable DROP PRIMARY KEY; 

我誤差

ERROR 1025 (HY000): Error on rename of '.\database\#sql-454_3' to '.\database\mytable' (errno: 150). 

我解決它使用:

mysql> ALTER TABLE mytable DROP PRIMARY KEY, ADD PRIMARY KEY (column1,column2,column3); 

一些鏈接,這將幫助你。

link 1

link 2 [查找發佈者亞歷克斯·布魯姆在2008年11月7日下午5時09 &發佈海克特德爾加迪略於2011年1月21日上午4時57分]

+0

不適合我。 – user60627

+0

確實爲我工作!謝謝。 – aizquier

1

爲了避免收到此錯誤,而試圖刪除外鍵,使用約束名而不是外鍵的列名

7

它看起來像是MySQL錯誤消息傳遞中的一個錯誤。 (http://bugs.mysql.com/bug.php?id=10333

使用SHOW CREATE TABLE table_name看到實際名稱外鍵的。它看起來像是在用外鍵名稱的錯誤拼寫生成查詢時,可能是mysql查詢瀏覽器問題。

+2

它可以幫助我知道我的約束被創建爲INDEX,而不是FOREIGN KEY。然後我使用了「DROP INDEX」條款。謝謝。 –

32

解決方案描述here by Chris White爲我工作。

根本問題是MySQL創建一個索引和一個外鍵。兩者都必須刪除(外鍵首先與克里斯說的相反)。

  1. show create table table_name;

    SHOW CREATE TABLE `table_name`: 
    
    | table_name | CREATE TABLE `table_name` (
        `id` int(20) unsigned NOT NULL auto_increment, 
        `key_column` smallint(5) unsigned default '1', 
        KEY `column_tablein_26440ee6` (`key_column`), <--- shows key name 
        CONSTRAINT `table_name_ibfk_1` FOREIGN KEY (`key_column`) REFERENCES <--- shows foreign key constraint name 
    `second_table` (`id`) ON DELETE SET NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 
    
  2. 刪除外鍵約束:

    ALTER TABLE table_name DROP FOREIGN KEY `table_name_ibfk_1`; 
    
  3. 刪除鍵

    ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`; 
    

這爲我做。

+1

+1想補充一點,這裏有很多問題(或許是重複的),而@bbrame的答案就是爲我工作的答案。 –

+0

我沒有顯示約束部分創建表'名稱',但是當我做desc'名字'我可以看到字段有外鍵約束 – proprius

+0

這是一個完美的例子,顯示如何處理外鍵丟棄。許多人都感謝@bbframe。它爲我工作。 – prashant

0

您應該嘗試使用Fahim Parkar建議的外鍵名稱。事實上,這也不總是工作。

在我來說,我使用的

FOREIGN KEY `fk`(`col1`) REFERENCES `table2`(`col1`) 

代碼通過創建添加FK。

該代碼的問題是它無效,應該拋出一些類型的語法錯誤,但它仍然添加了一個具有隨機名稱的外鍵。

當我添加了FK用正確的語法:

CONSTRAINT `fk` FOREIGN KEY (`col1`) REFERENCES `table2`(`col1`) 

下面的代碼把它丟正確:

ALTER TABLE `table1` DROP FOREIGN KEY `fk` 

所以這種錯誤可以如果您嘗試去除外來太發生鍵名稱無效。查看錶格屬性很重要

SHOW CREATE TABLE `table1` 

並檢查外鍵名稱,如果您遇到此類錯誤。