como deletar registros utilizando o cascade
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.
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
Curtidas 1
Melhor post
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
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
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.
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
25/02/2006
valeu amigão, eu fiz do seu jeito e de certo, vc me ajudou bastante !
abraços
Pestana.
abraços
Pestana.
GOSTEI 0
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
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.
abraços
Pestana.
GOSTEI 1
Pestana
25/02/2006
eu fiz isto na tabela child.
GOSTEI 0
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
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