Daily Archives: 15.06.2012
Удаление таблицы с 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; |
А на будущее лучше пользоваться более полным синтаксисом создания внешних …
Localstorage use — not abuse
Набор слайдов про best practices при использовании localstorage http://localstorage-use-not-abuse.appspot.com/