Resumo : neste tutorial, você aprenderá como criar um AFTER INSERT
gatilho MySQL para inserir dados em uma tabela após inserir dados em outra tabela.
Introdução aos gatilhos MySQL AFTER INSERT
Os gatilhos do MySQL AFTER INSERT
são invocados automaticamente após a ocorrência de um evento de inserção na tabela.
O seguinte mostra a sintaxe básica de criação de um AFTER INSERT
gatilho MySQL:
CREATE TRIGGER trigger_name
AFTER INSERT
ON table_name FOR EACH ROW
trigger_body
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe:
Primeiro, especifique o nome do gatilho que deseja criar após as CREATE TRIGGER
palavras-chave.
Segundo, use AFTER INSERT
a cláusula para especificar o horário para invocar o gatilho.
Terceiro, forneça o nome da tabela na qual deseja criar o gatilho após a ON
palavra-chave.
Finalmente, defina o corpo do gatilho que consiste em uma ou mais instruções executadas quando o gatilho é invocado.
Se o corpo do gatilho tiver múltiplas instruções, você precisará usar o BEGIN END
bloco e alterar o delimitador padrão :
DELIMITER $$
CREATE TRIGGER trigger_name
AFTER INSERT
ON table_name FOR EACH ROW
BEGIN
-- statements
END$$
DELIMITER ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Em um AFTER INSERT
gatilho, você pode acessar os NEW
valores, mas não pode alterá-los. Além disso, você não pode acessar os OLD
valores porque não há gatilhos OLD
on INSERT
.
Exemplo de gatilho MySQL AFTER INSERT
Considere o seguinte AFTER INSERT
exemplo de gatilho.
Configurando uma tabela de exemplo
Primeiro, crie uma nova tabela chamada members
:
DROP TABLE IF EXISTS members;
CREATE TABLE members (
id INT AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(255),
birthDate DATE,
PRIMARY KEY (id)
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, crie outra tabela chamada reminders
que armazena mensagens de lembrete para os membros.
DROP TABLE IF EXISTS reminders;
CREATE TABLE reminders (
id INT AUTO_INCREMENT,
memberId INT,
message VARCHAR(255) NOT NULL,
PRIMARY KEY (id,memberId)
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Criando exemplo de gatilho AFTER INSERT
A instrução a seguir cria um AFTER INSERT
gatilho que insere um lembrete na reminders
tabela se a data de nascimento do membro for NULL
.
DELIMITER $$
CREATE TRIGGER after_members_insert
AFTER INSERT
ON members FOR EACH ROW
BEGIN
IF NEW.birthDate IS NULL THEN
INSERT INTO reminders(memberId, message)
VALUES(new.id,CONCAT('Hi ', NEW.name, ', please update your date of birth.'));
END IF;
END$$
DELIMITER ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste gatilho:
Primeiro, especifique o nome do gatilho after_members_insert
na CREATE TRIGGER
cláusula:
CREATE TRIGGER after_members_insert
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Em segundo lugar, defina o evento desencadeador:
AFTER INSERT
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, especifique a tabela members
à qual o gatilho está associado:
ON members FOR EACH ROW
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Por fim, dentro do corpo do gatilho, insira uma nova linha na reminders
tabela se a data de nascimento do membro for NULL
.
Testando o gatilho MySQL AFTER INSERT
Primeiro, insira duas linhas na members
tabela:
INSERT INTO members(name, email, birthDate)
VALUES
('John Doe', '[email protected]', NULL),
('Jane Doe', '[email protected]','2000-01-01');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, consulte os dados da members
tabela:
SELECT * FROM members;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, consulte os dados da reminders
tabela:
SELECT * FROM reminders;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Inserimos duas linhas na members
tabela. Porém, apenas a primeira linha possui valor de data de nascimento NULL
, portanto, a trigger inseriu apenas uma linha na reminders
tabela.
Neste tutorial, você aprendeu como criar um AFTER INSERT
gatilho MySQL para inserir dados em uma tabela após inserir dados em outra tabela.