Mysql Innodb Cascade?
-
21-09-2019 - |
Pergunta
Estou começando a experimentar o uso do InNODB em aplicativos da Web. Eu configurei algumas tabelas com uma chave estrangeira, mas elas não estão se comportando conforme o esperado. Aqui estão minha tabela Criar declarações:
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;
As tabelas criam OK e eu posso preencher -as com dados, no entanto, esperava que todas as alterações que fiz na tabela de seções tenham um efeito nas linhas correspondentes na tabela de páginas. Tentei alterar o ID de uma seção e também excluir uma seção completamente. Nos dois casos, a tabela de páginas não foi afetada.
Alguém pode ver onde estou dando errado?
Qualquer conselho apreciado.
Obrigado.
Solução
Eu rapidamente montei duas tabelas semelhantes no navegador de consultas MySQL com as seguintes definições:
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;
Não é exatamente o mesmo que os que você postou, mas perto o suficiente.
Eu insiro nas seções uma linha. Adicionei uma linha com uma seção correspondente na tabela de páginas. Então eu faço uma exclusão das seções; E também exclui das páginas.
Funciona muito bem.
EDIT - Eu digitei o seu criação e funciona bem também.