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!!

Trigger No Mysql
Started By dery, 14/04/2012, 14:52
3 replies to this topic
#1
Posted 14/04/2012, 14:52
#2
Posted 14/04/2012, 20:33
Usa chave estrangeira. Bem melhor pra esse caso.
#3
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
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)