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/