2011-04-08 137 views
5

在我的mysql數據庫用inno_db引擎,用外鍵刪除列

我有一個外鍵的表。 我想刪除列(與外鍵和相關的索引當然 - 我不需要整列!)

現在,簡單地刪除它會產生一個錯誤: 一般錯誤:1025錯誤重命名'。\ road_dmy#sql-19d8_2be'爲'。\ road_dmy \ contact'(錯誤號:150)

聽起來像這是一個已知問題。 http://bugs.mysql.com/bug.php?id=15317

但無論如何,我應該怎麼做才能放棄此專欄?我非常肯定這是可能的,沒有人會使用該DB,否則

(和b.t.w.我怎麼能知道上面的神祕的錯誤消息的真實細節?)

+0

您必須首先刪除鍵。發佈命令'show create table contact;'的結果,我們將能夠給你確切的命令。 – Asaph 2011-04-08 01:16:54

+0

是的,首先簡單地放下鑰匙就完成了這項工作。 – shealtiel 2011-04-08 01:22:13

+0

請不要在問題標題中寫入標籤。 – 2011-04-30 18:11:37

回答

5

您必須首先刪除鍵。我不知道你的桌子的名字,但我會以身作則給你一般的策略。假設你有以下2個InnoDB表:

CREATE TABLE `A` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

CREATE TABLE `B` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    `a_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `a_id` (`a_id`), 
    CONSTRAINT `b_ibfk_1` FOREIGN KEY (`a_id`) REFERENCES `a` (`id`) 
) ENGINE=InnoDB; 

您可以在表B使用下面的命令刪除a_id柱:

alter table B drop foreign key b_ibfk_1, drop column a_id;