Leave a Comment
Удаление таблицы с FOREIGN KEY в MySQL
Допустим мы создали таблицу
1 2 3 4 5 6 7 |
CREATE TABLE IF NOT EXISTS `Inventory`.`Equipment` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `category_id` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`category_id`) REFERENCES EquipmentCategory(`id`) ON DELETE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Тогда при попытке удалить таблицу (или хотя бы ключ) получим сообщение
1 2 |
DROP TABLE IF EXISTS `Inventory`.`Equipment`; -- [HY000][152] Cannot delete or update a parent row: a foreign key constraint fails () |
Чтобы удалить таблицу, нужно сначала удалить CONSTRAINT, потом индекс, а только потом таблицу.
Сначала узнаем название CONSTRAINTа:
1 2 3 4 5 6 7 8 9 |
SHOW CREATE TABLE `Inventory`.`Equipment`; --create table Inventory.Equipment ( -- id int unsigned not null, -- category_id int unsigned not null, -- primary key (id), -- foreign key Equipment_ibfk_1 (category_id) references EquipmentCategory(id) --); --create index category_id on Inventory.Equipment (category_id); |
Берём название Equipment_ibfk_1 и далее:
1 2 3 |
ALTER TABLE `Inventory`.`Equipment` DROP FOREIGN KEY `Equipment_ibfk_1`; ALTER TABLE `Inventory`.`Equipment` DROP KEY `category_id`; DROP TABLE IF EXISTS `Inventory`.`Equipment`; |
Потом можно восстановить
1 2 |
ALTER TABLE `Inventory`.`Equipment` ADD FOREIGN KEY (`category_id`) REFERENCES `EquipmentCategory`(`id`) ON DELETE RESTRICT; |
А на будущее лучше пользоваться более полным синтаксисом создания внешних ключей — http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.