Ich habe eine selbstbezüglicher MySQL-Tabelle mit einer rekursiven parent_id:Was ist der beste Weg, um eine selbstreferentielle MySQL-Tabelle zu leeren?
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
Während des Tests will ich es leer, aber TRUNCATE versagt:
TRUNCATE `recursive`
/* SQL Error: Cannot delete or update a parent row: a foreign key
constraint fails...
ich zur Zeit manuell alle Datensätze löschen müssen, beginnend am Boden des Baumes, der aufwärts arbeitet. Dies wird auch mit kleinen Bäumen beschwerlich.
Gibt es einen einfachen Weg dahin? Ich kann nicht DROP
die Tabelle und neu erstellen es leicht als andere Tabellen verweisen es (Ich habe bereits abgeschnitten, so dass es keine Datenintegritätsprobleme dort sein sollte).
Wenn Sie „DELETE FROM' recursive' ORDER BY ' ID "Du wirst es Arbeit bekommen. Wenn Sie jedoch selbstverweisende Zeilen haben, sind Sie ziemlich ohne elegante Entscheidungen: http://bugs.mysql.com/bug.php?id=7412. Derjenige, der foreign_keys vorübergehend deaktiviert, ist der beste. –
Einer der wenigen Fälle, in denen Orakel besser ist, wie in Orakel, können Sie sich auf die Überprüfung auf Einschränkungen beschränken, bis die Transaktion festgeschrieben wird. –