Вопрос касательно синтаксиса триггеров SQL - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу создать триггер, который после вставки в конкретную таблицу имеет 2 условия, где, если первое условие истинно, оно выполняет вставку, а если второе условие истинно, оно выполняет обновление.

что-то в этом роде:

create trigger nameoftrigger

after insert on a

for each row
condition regarding newrowattribute and a.sameattribute

insert into a ---

condition regarding newrowattribute and a.sameattribute

update a different table with same attributes

, но я не знаю правильный синтаксис для этого, чтобы проверить наличие 2 различных условий и выполнить вставку в первое условие и обновлениена втором условии.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

См. IF ... THEN ... ELSE ... END IF для потока управления.

Если вы изменяете того, что собираетесь вставить, то сделайте что-то вроде

IF (...) 
THEN
    SET NEW.col1 = <<some expression>>;
END IF

, затем простопусть произойдет INSERT.

Если в выражении IF или выражении для col1 необходимо посмотреть значение, которое INSERT имело для col1, то обозначьте это как OLD.col1.

0 голосов
/ 28 ноября 2018

MySQL не поддерживает триггеры «INSTEAD OF», как Microsoft SQL Server.

Триггер INSERT может либо выполнить вставку, либо прервать работу и ничего не делать.

Вам следуетобрабатывайте ваши условия в коде вашего приложения.


Раймонд Нейланд напоминает мне, что вы также не можете написать триггер, который выполняет INSERT или UPDATE для таблицы, для которой был выполнен триггер.Ну, вы можете создать такой триггер, но он будет выдавать ошибку при запуске.

mysql> create trigger nameoftrigger after insert on a for each row 
  insert into a values (1);
Query OK, 0 rows affected (0.05 sec)

mysql> insert into a values (2);
ERROR 1442 (HY000): Can't update table 'a' in stored function/trigger because 
it is already used by statement which invoked this stored function/trigger.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...