Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Adriano S S

Mysql Relacionametos alguem pode me r!

Recommended Posts

Olá

 

Gostaria de saber se alguém pode me ajudar a solucionar um problema.

 

Eis ele.

 

Tenho 3 tabelas, produtos, lista_de_produtos, lista_itens

 

Vou mostrar somente os campos de interesse neste problema

 

PRODUTOS

Pro_cod

Pro_descricao

Pro_marcado

 

LISTA_DE_PRODUTOS

Lispro_cod

Lispro_data

 

LISTA_ITENS

Lisint_cod

PK lispro_cod

PK pro_cod

 

Minha tabela LISTA_ITENS esta relacionada com PRODUTOS e LISTA_DE_PRODUTOS.

Em relacionamento de LISTA_ITENS eu optei por exclusão em Cascata, caso a LISTA_DE_PRODUTOS seja excluída todos os itens relacionados a ela em LISTA_INTENS também serão. aqui é que esta o meu problema, quando uma lista for excluída de LISTA_DE_PRODUTOS todos os itens que estavam relacionados na tabela LISTA_ITENS, eles devem atualizar a tabela PRODUTOS no campo pro_marcado.

 

o campo pro_marcado tem que receber o valor 'D' em codigo PHP eu faço

 

update produtos set pro_marcado='D' where pro_marcado='L' and pro_cod='$var_pro_codigo'

 

Tentei fazer uma trigger para resolver este problema mas da erro de sintaxe.

 

Li no manual traduzido sobre trigger do mysql que trriger não esta diponivel para tabelas em CASCATA como pode ser visto abaixo

 

Nota: Atualmente, triggers não são ativadas por chaves estrageiras com ação em cascata. Esta limitação será suspendida possivelmente em breve.

 

Caso alguém tenha alguma solução para este problema, favor postar, fico grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você conseguirá resolver este problema com TRIGGER mesmo amigão.

PRODUTO é a tabela PAI de LISTA_PRODUTO e também de LISTA_ITEM que também se relaciona com LIST_PRODUTO.

Ao excluir um produto, você tem uma operação de exclusão em cascata, mas o TRIGGER não será disparado na tabela filha.

Ao excluir em LISTA_PRODUTO, a exclusão será efetuada em cascata atingindo a tabela LISTA_ITEM, mas um TRIGGER em lista ítem não será disparado.

 

Bom, o TRIGGER terá que fazer o caminho FILHA -> PAI, caso o produto não exista mais no PAI, atualizo o FILHO, ou vice-versa.

 

OK? Se tiver mais alguma dúvida, continue postando.

 

Happy MySQL'ing! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você conseguirá resolver este problema com TRIGGER mesmo amigão.

PRODUTO é a tabela PAI de LISTA_PRODUTO e também de LISTA_ITEM que também se relaciona com LIST_PRODUTO.

Ao excluir um produto, você tem uma operação de exclusão em cascata, mas o TRIGGER não será disparado na tabela filha.

Ao excluir em LISTA_PRODUTO, a exclusão será efetuada em cascata atingindo a tabela LISTA_ITEM, mas um TRIGGER em lista ítem não será disparado.

 

Bom, o TRIGGER terá que fazer o caminho FILHA -> PAI, caso o produto não exista mais no PAI, atualizo o FILHO, ou vice-versa.

 

OK? Se tiver mais alguma dúvida, continue postando.

 

Happy MySQL'ing! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Olá

 

Obrigado por ter respondido, Parabéns pelo seu trabalho aqui no Imasters, eu li o seu artigo sobre triggers no MySql 27/02/2008.

 

Bom pelo meu entendimento quando minha tabela estiver com a opção cascata

O evento dado para exclusão no PAI afeta-ra os FILHOS, neste caso se eu excluir o Pai os filhos também serão excluídos, então eu tenho minhas tabelas

 

PRODUTOS

Pro_cod

Pro_descricao

Pro_marcado

 

LISTA_DE_PRODUTOS

Lispro_cod

Lispro_data

 

LISTA_ITENS

Lisint_cod

PK lispro_cod

PK pro_cod

 

Como você disse se eu excluir o LISTA_DE_PRODUTOS o trigger em LISTA_ITENS não será disparado, então eu mudei meu ON DELETE para RESTRICT neste caso não vou conseguir excluir o PAI antes dos FILHOS, então fiz o trigger abaixo.

 

CREATE TRIGGER trg_atualiza AFTER DELETE ON lista_itens

FOR EACH ROW

BEGIN

UPDATE produtos SET pro_marcado='D';

END;

 

Esta trigger não esta dando certo, acusa que a sintaxe esta errada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.