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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top