Tengo la tabla "A" en MySQL. Tiene algunas referencias con eliminación de cascada en algunas otras tablas ("B", "C", "D" ...). Necesito usar un disparador cuando algo se elimina de "A". Este disparador funciona cuando borro registros de "A" directamente. Pero no funciona con la eliminación en cascada. ¿Existe alguna versión de MySQL donde mi desencadenador funcionará con la eliminación en cascada? O, tal vez, no hay otra manera de llamarDesencadenar llamadas en cascada eliminando
Respuesta
De http://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html
en cascada acciones clave externa no activan desencadenantes
En otras palabras, no se puede utilizar el gatillo con el borrado en cascada.
odio mysql más todos los días –
Sí, no hicieron nada para solucionarlo en los últimos 5 (?) Años. – boreq
Acabo de encontrar este problema, y es supremamente tonto :-( –
Para resumir las respuestas de @Niel de Wet y @Browny Lin:
- eliminaciones en cascada Lamentablemente no activan los disparadores en MySQL.
- Una solución es no utilizar eliminaciones en cascada, sino implementar la eliminación automática a través de otro desencadenador.
utilizando otro desencadenador para eliminar no es un enfoque adecuado, porque si tengo un desencadenante en la tabla A y elimino una fila en la tabla B, y también si tengo una tabla de activación aB para actualizar la tabla A, entonces una colisión ocurrirá. – Shafizadeh
CREATE TABLE doc (
docID INTEGER NOT NULL AUTO_INCREMENT,
langCode CHAR(2) NOT NULL,
title VARCHAR(32),
PRIMARY KEY (docID, langCode)
) Type=InnoDB;
CREATE TABLE author (
authorID INTEGER NOT NULL AUTO_INCREMENT,
docID CHAR(2) NOT NULL,
name VARCHAR(32),
PRIMARY KEY (authorID),
FOREIGN KEY (docID) REFERENCES doc(docID) ON DELETE CASCADE ON UPDATE CASCADE
) Type=InnoDB;
Esta es una copia directa de un comentario de http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html. – hichris123
Esto no parece intentar responder th e pregunta en absoluto. – Pang
Permítanme compartir la forma en que he estado "arreglar" este problema desde el primer día descubrí que existía. Copio el disparador de la tabla en cascada en la primera tabla que se elimina directamente. Simplemente funciona.
Muchas veces es una cuestión de copiar/pegar, y ocasionalmente requiere una amplia reescritura del código.
La mejor parte es que cuando Oracle soluciona finalmente este error , solo tiene que eliminar el código de activación de dicha tabla. Voila!
- 1. jQuery jqXHR - cancelar llamadas encadenadas, desencadenar cadena de error
- 2. ¿Cómo funciona "en cascada"?
- 3. Eclipse "Build Automatically" no en cascada
- 4. desencadenantes en cascada en SQLite
- 5. Mantenerse ágil en una cascada
- 6. Entity Framework en eliminar cascada
- 7. ¿Debería instalarse IDisposable en cascada?
- 8. Dropdown en cascada utilizando knockout.js
- 9. nhibernate no Eliminar en cascada los niños
- 10. Eliminando DFS en Hadoop
- 11. Hibernate no genera cascada
- 12. Cascada Django guardar?
- 13. Yesod eliminar cascada
- 14. carga no desencadenar ajaxSetup manejador completa en completa
- 15. jQuery: desencadenar pegar?
- 16. Eliminar muchos en cascada muchos en NHibernate
- 17. Eliminar en cascada en Entity Framework
- 18. Django no en cascada en eliminar
- 19. Compilación en memoria en cascada con javax.tool
- 20. Doctrine 2.0 vs 2.1 cascada eliminar OneToMany
- 21. Eliminando código duplicado en python
- 22. Eliminando signos diacríticos en polaco
- 23. Eliminando el acceso a System.out en java
- 24. En cascada de eliminación con doctrine2
- 25. ¿No se compilaron los ejemplos en cascada?
- 26. Colecciones en cascada usando NHibernate StatelessSession
- 27. deshacer/rehacer con eliminaciones en cascada
- 28. nhibernate "en cascada =" all-delete-orphan" error
- 29. soltar cascada de usuario en Oracle
- 30. MySQL en eliminar cascada. Ejemplo de prueba
Este es un argumento para hacer la lógica en el código de la aplicación, no una configuración compleja de Triggers y Cascading. –