Mam autoreferencyjna tabeli MySQL z rekurencyjnej parent_id:Jaki jest najlepszy sposób na opróżnienie samoodnawialnego stołu MySQL?
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
Podczas testów, chcę go opróżnić ale TRUNCATE nie:
TRUNCATE `recursive`
/* SQL Error: Cannot delete or update a parent row: a foreign key
constraint fails...
I obecnie trzeba ręcznie usunąć wszystkie rekordy, zaczynając od dołu drzewa, pracując w górę. To staje się uciążliwe nawet przy małych drzewach.
Czy istnieje prosty sposób obejścia tego? Nie mogę utworzyć tabeli i odtworzyć go ponownie tak jak inne tabele odwołują się do niego (już je skasowałem, aby nie było problemów z integralnością danych).
Jeśli „DELETE FROM' recursive' ORDER BY ' id' "dostaniesz to działa. Jeśli jednak masz wiersze z samoczynnym odwoływaniem, prawie nie masz eleganckich wyborów: http://bugs.mysql.com/bug.php?id=7412. Ten, który tymczasowo wyłącza klucze foreign_keys, jest najlepszy. –
Jeden z nielicznych przypadków, w których wyrocznia radzi sobie lepiej, tak jak w przypadku wyroczni, której możesz się dopuścić do sprawdzania ograniczeń, dopóki transakcja nie zostanie zatwierdzona. –