Leave a Comment
Удаление таблицы с FOREIGN KEY в MySQL
Допустим мы создали таблицу
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;
Тогда при попытке удалить таблицу (или хотя бы ключ) получим сообщение
DROP TABLE IF EXISTS `Inventory`.`Equipment`; -- [HY000][152] Cannot delete or update a parent row: a foreign key constraint fails ()
Чтобы удалить таблицу, нужно сначала удалить CONSTRAINT, потом индекс, а только потом таблицу.
Сначала узнаем название CONSTRAINTа:
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 и далее:
ALTER TABLE `Inventory`.`Equipment` DROP FOREIGN KEY `Equipment_ibfk_1`; ALTER TABLE `Inventory`.`Equipment` DROP KEY `category_id`; DROP TABLE IF EXISTS `Inventory`.`Equipment`;
Потом можно восстановить
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
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.