使用外键删除列

时间:2011-04-08 01:06:42

标签: mysql sql-drop mysql-error-1025

在我的mysql数据库上使用inno_db引擎,

我有一张带外键的表。 我想删除列(当然还有外键和相关索引 - 我不需要整列!)

现在,只需删除它就会产生错误: 一般错误:将'。\ road_dmy#sql-19d8_2be'重命名为'。\ road_dmy \ contact'(错误号码:150)时出现错误

听起来这是一个已知问题。 http://bugs.mysql.com/bug.php?id=15317

但无论如何,我应该怎么做才能放弃这个专栏?我非常确定没有人会使用这个DB,否则

(和b.t.w.我怎么知道上面神秘错误信息的真实细节?)

1 个答案:

答案 0 :(得分: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;

您可以使用以下命令删除表a_id中的B列:

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