Вы можете захотеть спускового действие на выполняться один раз после того, как клиент выполняет оператор, который модифицирует миллион строк (триггер уровня инструкций). Или вы можете активировать действие один раз для каждой измененной строки (триггер уровня строки).
ПРИМЕР: Предположим, у вас есть спусковой крючок, который обеспечит выпускникам высших учебных заведений. То есть, когда старшему классу 12, и мы увеличиваем его до 13, мы хотим установить оценку NULL
.
Для триггера уровня инструкций вы можете сказать, что после выполнения инструкции повышения класса проверьте всю таблицу один раз, чтобы обновить любые значения с 13 до NULL
.
Для триггера уровня строки, вы бы сказать, что после каждой строки, которая обновляется, обновить класс новой строки к NULL
если 13.
Триггер заявления уровня будет выглядеть следующим образом:
create trigger stmt_level_trigger
after update on Highschooler
begin
update Highschooler
set grade = NULL
where grade = 13;
end;
и триггер уровня строки будет выглядеть следующим образом:
create trigger row_level_trigger
after update on Highschooler
for each row
when New.grade = 13
begin
update Highschooler
set grade = NULL
where New.ID = Highschooler.ID;
end;
Обратите внимание, что SQLite не поддерживает спусковые заявление на уровне, так что в SQLite, то FOR EACH ROW
не является обязательным.
Итак, триггер уровня инструкции мог бы изменить одну строку, в то время как уровень строки мог бы изменять каждую строку в таблице? –
Нет, триггер уровня строки может использоваться для обновления/удаления/вставки многих строк. Или строки в других таблицах. –
И триггер уровня инструкции. –