[RESOLVIDO] Triggers em mysql

Boas colegas, estou com um problema que ainda não consegui resolver. Pretendo criar um trigger que sempre que a coluna de quantidade de produto sofrer um update ele dispare uma acção para uma outra tabela. É possível no mysql? Se sim como, qual seria a lógica?

Tabela que sofrera update no campo quantidade

'producto', 'CREATE TABLE `producto` (\n  
idProducto` int(11) NOT NULL AUTO_INCREMENT,\n 
 `artigo` int(11) NOT NULL,\n  `data` datetime NOT NULL,\n 
 `tipoProducto` varchar(50) NOT NULL,\n 
 `descricao` mediumtext NOT NULL,\n  
`quantidade` int(11) NOT NULL,\n  
`validade` date DEFAULT NULL,\n 
 PRIMARY KEY (`idProducto`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8'

Tabela em que será disparada a acão

`'entrada_producto', 'CREATE TABLE `entrada_producto` (\n  
`idEntrada` int(11) NOT NULL AUTO_INCREMENT,\n 
 `idProducto` int(11) DEFAULT NULL,\n 
 `dataEntrada` datetime DEFAULT NULL,\n 
 `quantidade_entrada` int(11) DEFAULT NULL,\n 
 `descricao` mediumtext,\n
 PRIMARY KEY (`idEntrada`),\n  KEY `idProducto` (`idProducto`),\n  CONSTRAINT `entrada_producto_ibfk_1` FOREIGN KEY (`idProducto`) REFERENCES `producto` (`idproducto`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8'`

Seria mais ou menos assim,

DELIMITER $

CREATE TRIGGER meu_trigger AFTER UPDATE
ON producto
FOR EACH ROW
BEGIN
 if NEW.quantidade <> OLD.quantidade THEN
    --Se o campo 'quantidade' tiver sido alterada execute a operação desejada

END IF;
END$

DELIMITER ;

Eu hávia colocado os sinal errado, já alterei!

Essa sintaxe não é para o sql server? Tentei correr mas não tive resposta nem do workbench nem do command line client…

DELIMITER $
create trigger acrescProducto after update on 
producto for each row
 begin
 if new.quantidade<>old.quantidade then
 insert into entrada_producto values(default, new.idProducto, now(), new.quantidade, 'Acréscimo de producto') 
end if;


DELIMITER ;

Esta sintaxe é do Mysql, este é um script que peguei de um projeto meu!
veja :

DELIMITER $

CREATE TRIGGER trigger_registra_log_alteracao_senha AFTER UPDATE
ON tb_usuario
FOR EACH ROW
BEGIN
	IF NEW.senha <> OLD.senha THEN
    	INSERT INTO tb_log_alteracao_senhas (id,id_usuario,data_alteracao, hora_alteracao,senha_anterior,senha_nova) 
		VALUES (NULL,OLD.id, NOW(), NOW(), OLD.senha, NEW.senha);
	END IF;	
END$

DELIMITER ;

É exibido alguma mensagem de erro?

Não exibe nada, simplesmente parece que o comando não corre não há resposta ao comando.

Assim, você esqueceu de colocar o

 END$
depois do
end if;

Na verdade tentei por, só que da sinal de erro no end. O erro é: unexpected ';', but found "end" instead

Caso corra dará erro de sintax…

Quando tiro end$ o erro desaparece

Deixe o

 END$
e coloque um
;

no final desta linha
insert into entrada_producto values(default, new.idProducto, now(), new.quantidade, ‘Acréscimo de producto’)

No final do ‘insert’ precisa do ‘;’

Consegui criar a trigger que sempre que o campo quantidade for modificado, ou seja, sempre que for acrescentado um valor a quantidade de um determinado producto irá disparar uma ação, para isto usei a ferramenta do workbench que me facilitou imenso.

CREATE DEFINER=`root`@`localhost` TRIGGER `producto_AFTER_UPDATE` AFTER UPDATE ON `producto` FOR EACH ROW BEGIN
 if new.quantidade>old.quantidade then
 insert into entrada_producto values(null, new.idproducto, now(), new.quantidade, 'Acréscimo de producto');
 end if;
END