2011-04-08 104 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;