Jump to content


Photo

Trigger No Mysql


  • Faça o login para participar
3 replies to this topic

#1 dery

dery

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Masculino
  • Localidade:Sumaré-/sp

Posted 14/04/2012, 14:52

Ola. Sou iniciante em uso de triggers e tenho o seguinte problema:

Tenho as tabelas:

produtos:
idProduto
nomeProduto
valorProduto
fornecedor

fornecedor:
idFornecedor
nomeFornecedor

Sendo que produtos.fornecedor é uma chave estrangeira referente a fornecedor.idFornecedor.
Estava tendando construir uma trigger para impedir que ao tentar apagar um certo fornecedor,
esta trigger impediria o processo caso tivesse produtos cadastrados referentes a este fornecedor,
garantindo assim, a integridade dos dados:

------------------------------------------------------------------------------------------------

DELIMITER $$
CREATE TRIGGER fornecedor_produtos
BEFORE DELETE ON fornecedor
FOR EACH ROW

BEGIN
DECLARE cont INT;
SET cont = (SELECT COUNT(fornecedor) FROM PRODUTOS WHERE fornecedor = NEW.idFornecedor);

IF (cont <> 0) THEN
DELETE FROM fornecedor WHERE idFornecedor = NEW.idFornecedor;
END IF;
$$
END;
DELIMITER ;

------------------------------------------------------------------------------------------------

Desde já, obrigado pela ajuda!!

#2 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 14/04/2012, 20:33

Usa chave estrangeira. Bem melhor pra esse caso.

#3 dery

dery

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Masculino
  • Localidade:Sumaré-/sp

Posted 16/04/2012, 11:21

Usa chave estrangeira. Bem melhor pra esse caso.


Então...
O Problema é que a relação já foi feita, normalmente. Já existe a chave estrangeira, mesmo assim o mysql permite a deleção dos registros na tabela. Então pensei que o problema pudesse ser solucionado com uma trigger...
Lembrando que este problema não acontece no firebird. Lá sim, ele bloqueia a operação alegando o relacionamento, mas no mysql isso não acontece...

Edição feita por: dery, 16/04/2012, 11:22.


#4 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 16/04/2012, 12:31

Se está permitindo, é porque está como CASCADE no ON DELETE. É só mudar pra RESTRICT.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq