Удаление столбца с внешним ключом - PullRequest
5 голосов
/ 08 апреля 2011

В моей базе данных mysql с механизмом inno_db,

У меня есть таблица с внешним ключом.Я хочу удалить столбец (вместе с внешним ключом и, конечно же, связанным индексом - мне не нужен весь столбец!)

Теперь, просто отбрасывая его, выдается ошибка: Общая ошибка: 1025 Ошибка напереименуйте '. \ road_dmy # sql-19d8_2be' в '. \ road_dmy \ contact' (errno: 150)

Похоже, это известная проблема.http://bugs.mysql.com/bug.php?id=15317

Но в любом случае, что я должен сделать, чтобы отбросить этот столбец?Я уверен, что никто не мог бы использовать эту базу данных иначе

(и, кстати, как я могу узнать истинные детали загадочного сообщения об ошибке выше?)

1 Ответ

5 голосов
/ 08 апреля 2011

Сначала вы должны уронить ключ.Я не знаю названий ваших столов, но на примере приведу общую стратегию.Предположим, у вас есть следующие 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;
...