MySQLTRIGGERS


Синтаксис

  • CREATE [DEFINER = {пользователь | CURRENT_USER}] TRIGGER trigger_name trigger_time trigger_event ON tbl_name ДЛЯ КАЖДОГО ROW [trigger_order] trigger_body
  • trigger_time: {ПЕРЕД | ПОСЛЕ }
  • trigger_event: {INSERT | ОБНОВЛЕНИЕ | УДАЛЯТЬ }
  • trigger_order: {FOLLOWS | PRECEDES} other_trigger_name

замечания

Вам нужно обратить внимание на два момента, если вы уже используете триггеры для других БД:

ДЛЯ КАЖДОЙ РУКИ

FOR EACH ROW является обязательной частью синтаксиса

Вы не можете сделать заявление триггера (один раз по запросу) , как Oracle сделать. Это скорее проблема, связанная с производительностью, чем реальная пропавшая функция

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ТРИГГЕР

CREATE OR REPLACE не поддерживается MySQL

MySQL не разрешает этот синтаксис, вместо этого вы должны использовать следующее:

DELIMITER $$

DROP TRIGGER IF EXISTS myTrigger;
$$
CREATE TRIGGER myTrigger
-- ...

$$
DELIMITER ;

Будьте осторожны, это не атомная транзакция :

  • вы потеряете старый триггер, если CREATE не CREATE
  • при большой нагрузке между DROP и CREATE могут выполняться другие операции, используйте LOCK TABLES myTable WRITE; сначала, чтобы избежать несогласованности данных и UNLOCK TABLES; после CREATE выпустить таблицу

TRIGGERS Связанные примеры