Tengo una tabla de MySQL autorreferencial con un parent_id recursiva:¿Cuál es la mejor manera de vaciar una tabla MySQL autorreferencial?
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
Durante las pruebas, quiero vaciarlo pero TRUNCATE falla:
TRUNCATE `recursive`
/* SQL Error: Cannot delete or update a parent row: a foreign key
constraint fails...
En este momento tengo que borrar manualmente todos los registros, comenzando en la parte inferior del árbol trabajando hacia arriba. Esto se vuelve oneroso incluso con árboles pequeños.
¿Hay una manera fácil de evitar esto? No puedo DROP
la tabla y volver a crearla fácilmente a medida que otras tablas la referencian (ya he truncado esas por lo que no debería haber problemas de integridad de datos allí).
Si "Borrar de la' 'POR ORDEN recursive' id' "harás que funcione. Sin embargo, si tiene filas de referencia automática, no tiene opciones elegantes: http://bugs.mysql.com/bug.php?id=7412. El que inhabilita foreign_keys temporalmente es el mejor. –
Uno de los pocos casos que Oracle hace mejor, como en oráculo, puede defare a la verificación de restricciones hasta que la transacción se compromete. –