como deletar registros utilizando o cascade

MySQL

25/02/2006

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

Curtidas 1

Melhor post

Mysys

Mysys

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


GOSTEI 1

Mais Respostas

Pestana

Pestana

25/02/2006

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.


GOSTEI 0
Pestana

Pestana

25/02/2006

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

abraços
Pestana.


GOSTEI 0
Mysys

Mysys

25/02/2006

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


GOSTEI 0
Pestana

Pestana

25/02/2006

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

abraços
Pestana.


GOSTEI 1
Pestana

Pestana

25/02/2006

eu fiz isto na tabela child.


GOSTEI 0
Tiago Sales

Tiago Sales

25/02/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





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!!!
GOSTEI 0
POSTAR