У меня есть самореферентная таблица MySQL с рекурсивным parent_id:
CREATE TABLE `recursive` (
`id` int(11) NOT NULL auto_increment,
`parent_id` int(11) default NULL,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
KEY `data_categorysource_parent_id` (`parent_id`),
CONSTRAINT `parent_id_refs_id_627b4293`
FOREIGN KEY (`parent_id`) REFERENCES `data_categorysource` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Во время тестирования я хочу очистить его, но TRUNCATE не работает:
TRUNCATE `recursive`
/* SQL Error: Cannot delete or update a parent row: a foreign key
constraint fails...
В настоящее время мне приходится вручную удалять все записи, начиная с нижней части дерева, работая вверх. Это становится обременительным даже с маленькими деревьями.
Есть ли простой способ обойти это? Я не могу DROP
создать таблицу и легко воссоздать ее, поскольку на нее ссылаются другие таблицы (я уже обрезал их, поэтому там не должно быть проблем с целостностью данных).
recursive
ORDER BYid
, у вас все получится. Если, однако, у вас есть самоссылающиеся строки, у вас почти нет элегантного выбора: bugs.mysql.com/bug.php?id=7412. Тот, который временно отключает foreign_keys, является лучшим. - person Andras Gyomrey   schedule 19.11.2011