Pregunta

Estoy empezando a experimentar con el uso de innodb en aplicaciones web. He configurado algunas tablas con una clave extranjera, pero no se están comportando como se esperaba. Aquí están mi tabla Crear declaraciones:

CREATE TABLE sections ( 
    section_id  INT NOT NULL AUTO_INCREMENT, 
    title       VARCHAR(30), 
    created_at  int(10) NOT NULL, 
    updated_at  int(10) NOT NULL,

    PRIMARY KEY(section_id)
) ENGINE=InnoDB; 

CREATE TABLE pages ( 
    page_id       INT NOT NULL AUTO_INCREMENT, 
    section_idfk  INT NOT NULL, 

    PRIMARY KEY(page_id), 
    FOREIGN KEY(section_idfk) REFERENCES sections(section_id) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE
) ENGINE=InnoDB;

Las tablas crean OK y puedo llenarlos con datos, sin embargo, esperaba cualquier cambio que hice en la tabla de secciones para tener un efecto en las filas correspondientes en la tabla de páginas. Intenté cambiar la identificación de una sección y también eliminar una sección por completo. En ambos casos, la tabla de páginas no se vio afectada.

¿Alguien puede ver a dónde me estoy equivocando?

Cualquier consejo apreciado.
Gracias.

¿Fue útil?

Solución

Rápidamente reuní dos tablas similares en el navegador de consultas MySQL con las siguientes definiciones:

DROP TABLE IF EXISTS `test`.`sections`;
CREATE TABLE  `test`.`sections` (
  `section_id` int(10) unsigned NOT NULL auto_increment,
  `title` varchar(30) NOT NULL,
  `created_at` int(10) unsigned NOT NULL,
  `updated_at` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`section_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `test`.`pages`;
CREATE TABLE  `test`.`pages` (
  `page_id` int(10) unsigned NOT NULL auto_increment,
  `section_idfk` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`page_id`),
  KEY `section_idfk` (`section_idfk`),
  CONSTRAINT `section_idfk` FOREIGN KEY (`section_idfk`) REFERENCES `sections` (`section_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

No es exactamente lo mismo que los que publicaste, pero lo suficientemente cerca.

Inserto en secciones una fila. Agrego una fila con una sección_id coincidente en la tabla de páginas. Luego hago un eliminación de las secciones; Y también elimina de las páginas.

Funciona bien.

Editar: ingresé a tus creaciones y también funciona bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top