3
respostas

Como deletar dados da tabela Pai no Myql sem apagar a tabela Filho?

Olá pessoal, estou criando um projeto e gostaria de uma ajudinha rs.

Quando realizo um Delete nos dados da tabela tb04_usuario ou tb03_projeto a tabela tb01_relatorio apaga automaticamente. Porem eu gostaria que a tb01_relatorio não fosse excluída automaticamente, queria manter os dados. Seria possível fazer isso? Agradeço.

Segue abaixo o SQL:

CREATE TABLE tb03_projeto ( tb03_id_projeto int(7) AUTO_INCREMENT PRIMARY KEY, tb03_nome varchar(20) );

CREATE TABLE tb04_usuario ( tb04_user varchar(20) PRIMARY KEY, tb04_password varchar(20), tb04_nome varchar(20) );

CREATE TABLE tb01_relatorio ( tb01_id_relatorio int(7) AUTO_INCREMENT PRIMARY KEY, tb01_user varchar(20), tb01_id_projeto int(7), tb01_data date, tb01_empresa varchar(20), tb01_obs varchar(20), FOREIGN KEY(tb01_user) REFERENCES tb04_usuario (tb04_user) ON UPDATE CASCADE, FOREIGN KEY(tb01_id_projeto) REFERENCES tb03_projeto (tb03_id_projeto) ON UPDATE CASCADE );

CREATE TABLE tb02_imagem ( tb02_id_img int(7) AUTO_INCREMENT PRIMARY KEY, tb02_id_relatorio int(7), tb02_arquivo mediumblob, tb02_tipo varchar(20), FOREIGN KEY(tb02_id_relatorio) REFERENCES tb01_relatorio (tb01_id_relatorio) ON UPDATE CASCADE ON DELETE CASCADE );

3 respostas

Perceba que possui comandos ON UPDATE CASCADE na tabela tb01_relatorio relacionados as chaves estrangeiras que referenciam tb04_usuario e tb03_projeto, logo sempre que houver atualizações nestas tabelas haverá atualização em cascata também na tabela tb01_relatorio.

Porém, se tirar esta propriedade provavelmente não poderá deletar quaisquer itens que possuam relacionamentos com tb01_relatorio devido a necessidade de manter a integridade do banco.

No caso do ON UPDATE CASCADE é proposital, eu quero que quando atualizar ele atualize em cascata, mas na parte de deletar não queria

Lucas, qual seria o objetivo de manter um relatório órfão de projeto, isso quebraria a integridade do banco, não?

Caso queira deletar o projeto sem alterar o relatório precisa "destruir" a relação entre eles antes de deletar o projeto, para isto remova o identificador do projeto da tabela relatório.