como deletar registros utilizando o cascade

25/02/2006

0

blz colegas,

Tenho o seguinte relacionamento: PRODUTO, FORNECEDOR e PROD_FORNEC. O Produto pode ter vários Fornecedores e o Fornecedor pode ter vários Produtos. Ao deletar o registro pai da tabela Produto eu queria que deletasse todos os registros filho da tabela Prod_Fornec tipo ‘cascade’, e assim também com as tabelas Fornecedor e Prod_Fornec.
Como se deleta registros utilizando On Delete Cascade?

Eu peguei o manual do mysql pra entender como se deleta registros na forma de On Delete Cascade, mas só que não consegui entender. Alguém poderia me ajudar?


Agradeço!
Pestana.


Pestana

Pestana

Responder

Post mais votado

05/03/2006

olha gurizada eu numca usei esse tipo de cascate mas segue exemplo retirado do site do MySQL eu testei e funcionou



CREATE TABLE parent (id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB;


insert into parent value (1);
insert into child value (1,1);

ok criado as tabelas e lancado os valores..

delete from parent where id = 1

ele vai deletar o valor nas duas tabelas ....

um abraco


Mysys

Mysys
Responder

Mais Posts

04/03/2006

Pestana

ola colegas,

já faz tempo que eu estou tentando deletar registros utilizando cascade, mas até agora a única coisa que aparece é um erro de ‘1005’. Alguem sabe como resolver este problema?
abaixo segue o exemplo.

CREATE TABLE PRODUTO( COD_PRODUTO int(11) unsigned, DESCRICAO varchar(60), PRIMARY KEY(COD_PRODUTO)) TYPE=INNODB;

CREATE TABLE FORNECEDOR( COD_FORNECEDOR int(11) unsigned, RAZAOSOCIAL varchar(40), PRIMARY KEY(COD_FORNECEDOR)) TYPE=INNODB;

CREATE TABLE FORNEC_PROD( COD_FORNECPROD int(11) unsigned, COD_FORNEC int(11), COD_PROD int(11),
PRIMARY KEY(COD_FORNECPROD),
INDEX CODP(COD_PROD),
INDEX CODF(COD_FORNEC),
FOREIGN KEY(COD_FORNEC) REFERENCES FORNECEDOR(COD_FORNECEDOR) ON DELETE CASCADE,
FOREIGN KEY(COD_PROD) REFERENCES PRODUTO(COD_PRODUTO) ON DELETE CASCADE) TYPE=INNODB;

agradeço!
Pestana.


Responder

09/03/2006

Pestana

valeu amigão, eu fiz do seu jeito e de certo, vc me ajudou bastante !

abraços
Pestana.


Responder

10/03/2006

Mysys

nao tenho certeza mas pelo que eu entendi o campo tem que ser ou INDEX ou PRIMARY KEY pra funcionar ..


Responder

10/03/2006

Pestana

não sei se é forma correta que fiz, mas eu coloquei os dois INDEX E PRIMARY KEY e funcionou.

abraços
Pestana.


Responder

10/03/2006

Pestana

eu fiz isto na tabela child.


Responder

13/05/2016

Tiago Sales

olha gurizada eu numca usei esse tipo de cascate mas segue exemplo retirado do site do MySQL eu testei e funcionou



CREATE TABLE parent (id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB;


insert into parent value (1);
insert into child value (1,1);

ok criado as tabelas e lancado os valores..

delete from parent where id = 1

ele vai deletar o valor nas duas tabelas ....

um abraco





O maior problema aí é quando vc tem o Auto_increment ligado. Quando for adicionar um novo registro ele vai ficar com o ID 2 e as chaves filhas não irão acompanhar o contator. Olha a merda feita!!!
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar