Criar Trigger no MySQL.

MySQL, SQL Comentar >> Marcelo Korjenioski

É pos­si­vel defi­nir TRIGGERS para serem dis­pa­ra­dos antes (BEFORE) ou depois (AFTER)
de um evento DML(Data Mani­pu­la­tion Lan­guage) INSERT, UPDATE, DELETE ou REPLACE.
Para pegar os valo­res dos cam­pos nas Trig­gers usa­mos OLD.nome_do_campo e NEW.nome_do_campo.
Quando exclui­mos o regis­tro pega­mos o valor usando OLD.nome_do_campo e quando vamos adi­ci­o­nar
um regis­tro usa­mos NEW.nome_do_campo.
Abaixo regra do uso de OLD e NEW:
Delete usa­mos somente OLD.nome_do_campo.
Insert somente NEW.nome_do_campo
UPDATE pode­mos usar OLD.nome_do_campo e NEW.nome_do_campo.

Vou criar duas tabe­las para migrar os dados de uma tabela para outro usando TRIGGERS.


GO
CREATE TABLE IF NOT EXISTS tb_comentario (
pk_comentario    int(11) AUTO_INCREMENT NOT NULL,
tx_comentario    text NULL,
PRIMARY KEY(pk_comentario)
)
GO
CREATE TABLE IF NOT EXISTS tb_comentario_historico (
pk_comentario_historico    int(11) AUTO_INCREMENT NOT NULL,
fk_comentario              int(11) NOT NULL,
tx_comentario              text NULL,
PRIMARY KEY(pk_comentario_historico)

Vamos criar a pri­meira Trig­ger para dis­pa­rar apos fazer o Insert na tabela tb_comentario.


go
DROP TRIGGER IF EXISTS trigger_insert_comentario_historico
go
CREATE TRIGGER  trigger_insert_comentario_historico AFTER INSERT ON tb_comentario
FOR EACH ROW
BEGIN
INSERT INTO tb_comentario_historico SET fk_comentario = NEW.pk_comentario, tx_comentario = NEW.tx_comentario;
END
go
insert into tb_comentario set tx_comentario = 'insert trigger'
go
select * from tb_comentario
go
select * from tb_comentario_historico

Agora vamos criar uma Trig­ger para dele­tar o regis­tro da tb_comentario_historio caso seja dele­tado o regis­tro na tb_comentario.


go
DROP TRIGGER IF EXISTS trigger_delete_comentario_historico
go
CREATE TRIGGER trigger_delete_comentario_historico BEFORE DELETE ON tb_comentario
FOR EACH ROW
BEGIN
DELETE FROM tb_comentario_historico WHERE fk_comentario = OLD.pk_comentario;
END
go
delete from tb_comentario where pk_comentario = 21
go
select * from tb_comentario
go
select * from tb_comentario_historico

A ultima Trig­ger será para fazer o Update na tb_comentario_historio caso seja feita alguma mudança na tb_comentario.


go
DROP TRIGGER IF EXISTS trigger_update_comentario_historico
go
CREATE TRIGGER trigger_update_comentario_historico BEFORE UPDATE ON tb_comentario
FOR EACH ROW
BEGIN
UPDATE tb_comentario_historico SET tx_comentario = NEW.tx_comentario WHERE fk_comentario = NEW.pk_comentario;
END
go
update tb_comentario set tx_comentario = 'teste trigger update 2' where pk_comentario= 22
go
select * from tb_comentario
go
select * from tb_comentario_historico

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn



View Comments to “Criar Trigger no MySQL.”

  1. Jorge Says:

    Mar­celo,
    nao entendi onde vai as sin­te­ses:
    go
    DROP TRIGGER IF EXISTS trigger_update_comentario_historico
    go
    CREATE TRIGGER trigger_update_comentario_historico BEFORE UPDATE ON tb_comentario
    FOR EACH ROW
    BEGIN
    UPDATE tb_comentario_historico SET tx_comentario = NEW.tx_comentario WHERE fk_comentario = NEW.pk_comentario;
    END
    go
    update tb_comentario set tx_comentario = ‘teste trig­ger update 2′ where pk_comentario= 22
    go
    select * from tb_comentario
    go
    select * from tb_comentario_historico
    ??

Deixe um comentário

blog comments powered by Disqus
Designed by NattyWP Wordpress Themes.
Images by desEXign.