Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problemas con ON UPDATE CASCADE

Estas en el tema de Problemas con ON UPDATE CASCADE en el foro de Mysql en Foros del Web. Hola, Tengo el siguiente script. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original /*!40101 SET NAMES utf8 */ ;   /*!40101 SET SQL_MODE=''*/ ;   /*!40014 SET ...
  #1 (permalink)  
Antiguo 25/11/2015, 10:51
 
Fecha de Ingreso: enero-2007
Mensajes: 63
Antigüedad: 15 años, 6 meses
Puntos: 2
Pregunta Problemas con ON UPDATE CASCADE

Hola,

Tengo el siguiente script.

Código MySQL:
Ver original
  1. /*!40101 SET NAMES utf8 */;
  2.  
  3. /*!40101 SET SQL_MODE=''*/;
  4.  
  5. /*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
  6. /*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
  7. /*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
  8. /*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;
  9. CREATE DATABASE /*!32312 IF NOT EXISTS*/`cascadeupdate` /*!40100 DEFAULT CHARACTER SET utf8 */;
  10.  
  11. USE `cascadeupdate`;
  12.  
  13. /*Table structure for table `element` */
  14.  
  15. DROP TABLE IF EXISTS `element`;
  16.  
  17. CREATE TABLE `element` (
  18.   `element_id` int(11) NOT NULL AUTO_INCREMENT,
  19.   `pool_pool_id` int(11) NOT NULL,
  20.   `element` varchar(45) DEFAULT NULL,
  21.   `status` char(1) DEFAULT '1',
  22.   PRIMARY KEY (`element_id`),
  23.   KEY `fk_element_pool1_idx` (`pool_pool_id`,`status`),
  24.   CONSTRAINT `fk_element_pool1` FOREIGN KEY (`pool_pool_id`, `status`) REFERENCES `pool` (`pool_id`, `status`) ON DELETE NO ACTION ON UPDATE CASCADE
  25.  
  26. /*Data for the table `element` */
  27.  
  28. insert  into `element`(`element_id`,`pool_pool_id`,`element`,`status`) values (1,1,'element 1','1'),(2,1,'element 2','1'),(3,1,'element 3','1');
  29.  
  30. /*Table structure for table `flowchart` */
  31.  
  32. DROP TABLE IF EXISTS `flowchart`;
  33.  
  34. CREATE TABLE `flowchart` (
  35.   `flowchart_id` int(11) NOT NULL AUTO_INCREMENT,
  36.   `flowchart` varchar(45) DEFAULT NULL,
  37.   `process_process_id` int(11) NOT NULL,
  38.   `status` char(1) DEFAULT '1',
  39.   PRIMARY KEY (`flowchart_id`),
  40.   UNIQUE KEY `index2` (`flowchart_id`,`status`),
  41.   KEY `fk_flowchart_process1_idx` (`process_process_id`,`status`),
  42.   CONSTRAINT `fk_flowchart_process1` FOREIGN KEY (`process_process_id`, `status`) REFERENCES `process` (`process_id`, `status`) ON DELETE NO ACTION ON UPDATE CASCADE
  43.  
  44. /*Data for the table `flowchart` */
  45.  
  46. /*Table structure for table `lane` */
  47.  
  48.  
  49. CREATE TABLE `lane` (
  50.   `lane_id` int(11) NOT NULL AUTO_INCREMENT,
  51.   `pool_pool_id` int(11) NOT NULL,
  52.   `lane` varchar(45) DEFAULT NULL,
  53.   `status` char(1) DEFAULT '1',
  54.   PRIMARY KEY (`lane_id`),
  55.   KEY `fk_lane_pool_idx` (`pool_pool_id`,`status`),
  56.   CONSTRAINT `fk_lane_pool` FOREIGN KEY (`pool_pool_id`, `status`) REFERENCES `pool` (`pool_id`, `status`) ON DELETE NO ACTION ON UPDATE CASCADE
  57.  
  58. /*Data for the table `lane` */
  59.  
  60. insert  into `lane`(`lane_id`,`pool_pool_id`,`lane`,`status`) values (1,1,'lane 1','1'),(2,1,'lane 2','1'),(3,1,'lane 3','1');
  61.  
  62. /*Table structure for table `pool` */
  63.  
  64.  
  65. CREATE TABLE `pool` (
  66.   `pool_id` int(11) NOT NULL AUTO_INCREMENT,
  67.   `pool` varchar(45) DEFAULT NULL,
  68.   `status` char(1) DEFAULT '1',
  69.   PRIMARY KEY (`pool_id`),
  70.   UNIQUE KEY `index2` (`pool_id`,`status`)
  71.  
  72. /*Data for the table `pool` */
  73.  
  74. insert  into `pool`(`pool_id`,`pool`,`status`) values (1,'pool 1','1');
  75.  
  76. /*Table structure for table `process` */
  77.  
  78. DROP TABLE IF EXISTS `process`;
  79.  
  80. CREATE TABLE `process` (
  81.   `process_id` int(11) NOT NULL AUTO_INCREMENT,
  82.   `process` varchar(45) DEFAULT NULL,
  83.   `status` char(1) DEFAULT '1',
  84.   PRIMARY KEY (`process_id`),
  85.   UNIQUE KEY `index2` (`process_id`,`status`)
  86.  
  87. /*Data for the table `process` */
  88.  
  89. /*!40101 SET [email protected]_SQL_MODE */;
  90. /*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */;
  91. /*!40014 SET [email protected]_UNIQUE_CHECKS */;
  92. /*!40111 SET [email protected]_SQL_NOTES */;


Es una bd con 3 tablas relacionadas entre si

Lane<---Pool--->Element

Mi objetivo es implementar el UPDATE CASCADE, así cuando updateo el status=0 de Pool
el status de Lane y Element también sea 0. Hasta aquí todo bien, el problema es cuando quiero actualizar el status del Lane o del Element sin tener que actualizar el status de Pool. Me salta el siguiente error


Código MySQL:
Ver original
  1. Query: update lane set status = 0
  2.  
  3. Error Code: 1452
  4. Cannot add or update a child row: a foreign key constraint fails (`cascadeupdate`.`lane`, CONSTRAINT `fk_lane_pool` FOREIGN KEY (`pool_pool_id`, `status`) REFERENCES `pool` (`pool_id`, `status`) ON DELETE NO ACTION ON UPDATE CASCADE)

Obviamente el error se da por la llave compuesta (`pool_id`, `status`)...

Cómo puedo arreglar esto? Para poder hacer status = 0 a Element o Lane pero sin perder el UPDATE CASCADE que tienen con Pool


Gracias

Última edición por gnzsoloyo; 25/11/2015 a las 11:15

Etiquetas: cascade, sql, tabla, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:42.