Resumo : neste tutorial, você aprenderá sobre a implementação de gatilhos MySQL . Além disso, mostraremos como o MySQL armazena os gatilhos e as limitações dos gatilhos no MySQL.
Introdução aos gatilhos MySQL
No MySQL, um gatilho é um conjunto de instruções SQL invocadas automaticamente quando uma alteração é feita nos dados da tabela associada. Um gatilho pode ser definido para ser invocado antes ou depois dos dados serem alterados pelas instruções INSERT , UPDATE ou DELETE . Antes do MySQL versão 5.7.2, você pode definir no máximo seis gatilhos para cada tabela.
BEFORE INSERT
– ativado antes que os dados sejam inseridos na tabela.AFTER INSERT
– ativado após os dados serem inseridos na tabela.BEFORE UPDATE
– ativado antes que os dados da tabela sejam atualizados.AFTER UPDATE
– ativado após a atualização dos dados da tabela.BEFORE DELETE
– ativado antes que os dados sejam removidos da tabela.AFTER DELETE
– ativado após a remoção dos dados da tabela.
No entanto, a partir do MySQL versão 5.7.2+, você pode definir vários gatilhos para o mesmo evento de gatilho e tempo de ação .
Quando você usa uma instrução que não usa INSERT
ou DELETE
uma UPDATE
instrução para alterar dados em uma tabela, os gatilhos associados à tabela não são invocados. Por exemplo, a instrução TRUNCATE remove todos os dados de uma tabela, mas não invoca o gatilho associado a essa tabela.
Existem algumas instruções que usam a INSERT
instrução nos bastidores, como a instrução REPLACE ou a instrução LOAD DATA . Se você usar essas instruções, os gatilhos correspondentes associados à tabela serão invocados.
Você deve usar um nome exclusivo para cada gatilho associado a uma tabela. No entanto, você pode ter o mesmo nome de gatilho definido para tabelas diferentes, embora seja uma boa prática.
Você deve nomear os gatilhos usando a seguinte convenção de nomenclatura:
(BEFORE | AFTER)_tableName_(INSERT| UPDATE | DELETE)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Por exemplo, before_order_update
é um gatilho invocado antes que uma linha da order
tabela seja atualizada.
A convenção de nomenclatura a seguir é tão boa quanto a anterior.
tablename_(BEFORE | AFTER)_(INSERT| UPDATE | DELETE)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Por exemplo, order_before_update
é igual ao before_order_update
gatilho acima.
MySQL aciona armazenamento
O MySQL armazena triggers em um diretório de dados, por exemplo, /data/classicmodels/
com os arquivos nomeados tablename.TRG
e triggername.TRN
:
- O
tablename.TRG
arquivo mapeia o gatilho para a tabela correspondente. - o
triggername.TRN
arquivo contém a definição do gatilho.
Você pode fazer backup dos gatilhos do MySQL copiando os arquivos do gatilho para a pasta de backup. Você também pode fazer backup dos gatilhos usando a ferramenta mysqldump .
Limitações do gatilho MySQL
Os gatilhos MySQL cobrem todos os recursos definidos no SQL padrão. No entanto, existem algumas limitações que você deve conhecer antes de usá-las em seus aplicativos.
Os gatilhos do MySQL não podem:
- Use instruções
SHOW
,LOAD DATA
,LOAD TABLE
, BACKUP DATABASE ,RESTORE
e .FLUSH
RETURN
- Use instruções que confirmam ou revertem implícita ou explicitamente, como COMMIT , ROLLBACK , START TRANSACTION , LOCK/UNLOCK TABLES , ALTER , CREATE , DROP , RENAME .
- Use instruções preparadas como
PREPARE
eEXECUTE
. - Use instruções SQL dinâmicas.
A partir da versão 5.1.4 do MySQL, um gatilho pode chamar um procedimento armazenado ou função armazenada , o que era uma limitação nas versões anteriores.
Neste tutorial, mostramos como os gatilhos são implementados no MySQL. Também discutimos o armazenamento do gatilho, bem como as limitações do gatilho no MySQL.