2012-04-16 2 views
42

Мне сложно понять разницу между триггерами уровня строки и триггерами уровня инструкций.триггер уровня на триггер уровня инструкции

С моей точки зрения, в сценарии создается триггер уровня инструкции, вся таблица может быть изменена. Триггер уровня строки разрешил мне изменять кортеж, влияющий на конкретное событие триггера.

Это правильно? Есть ли у кого-нибудь пример из двух?

Спасибо!

ответ

67

Главное отличие не в том, что может быть изменено триггером, что зависит от СУБД. Триггер (строка или уровень инструкций) может изменять одну или несколько строк, из тех же или других таблиц, а также может иметь каскадные эффекты (запускать другие действия/триггеры), но все они зависят от СУБД, конечно.

Главное отличие в том, сколько раз срабатывает триггер. Представьте, у вас есть таблица строк 1M и запуска:

UPDATE t 
SET columnX = columnX + 1 

Триггер оператор уровня будет активирован раз (и даже если строки не обновляются). Триггер уровня будет активирован миллион раз, один раз для каждой обновленной строки.


Другим отличием является порядок или активация. Например, в Oracle на 4-х различных типов триггеров будет активизирован в следующем порядке:

Before the triggering statement executes 
Before each row that the triggering statement affects 
After each row that the triggering statement affects 
After the triggering statement executes 

В предыдущем примере, мы имеем что-то вроде:

Before statement-level trigger executes 

    Before row-level trigger executes 
    One row is updated 
    After row-level trigger executes 

    Before row-level trigger executes 
    Second row is updated 
    After row-level trigger executes 

    ... 

    Before row-level trigger executes 
    Millionth row is updated 
    After row-level trigger executes 

After statement-level trigger executes 
+0

Итак, триггер уровня инструкции мог бы изменить одну строку, в то время как уровень строки мог бы изменять каждую строку в таблице? –

+2

Нет, триггер уровня строки может использоваться для обновления/удаления/вставки многих строк. Или строки в других таблицах. –

+1

И триггер уровня инструкции. –

17

Вы можете захотеть спускового действие на выполняться один раз после того, как клиент выполняет оператор, который модифицирует миллион строк (триггер уровня инструкций). Или вы можете активировать действие один раз для каждой измененной строки (триггер уровня строки).

ПРИМЕР: Предположим, у вас есть спусковой крючок, который обеспечит выпускникам высших учебных заведений. То есть, когда старшему классу 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 не является обязательным.

0

триггер уровня заявления только один раз для DML оператора строки ЛЕВАЛЯ триггера для каждой строки для заявлений DML

0

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

например: триггеры уровня инструкций работают, когда таблица изменена. выполняется большее количество записей. и на уровне строк триггеров для работы, когда каждая строка Updation или модификация ..

1

Основное различие между триггером уровня утверждения ниже: триггер уровня

заявления: на основе имени он работает, если какой-либо оператор выполняется. Не зависит от количества строк или любых произведенных строк. Выполняется только один раз. Опыт: если вы хотите обновить зарплату каждого сотрудника из отдела HR, а в конце вы хотите знать, сколько строк будет выполнено, значит, сколько из них получили зарплату, а затем используйте триггер уровня инструкции. обратите внимание, что триггер будет выполняться, даже если нулевые строки будут обновляться, потому что вызывается триггер уровня инструкции, если какой-либо оператор был выполнен. Не имеет значения, влияет ли это на какие-либо строки или нет.

Триггер уровня строки: выполняется каждый раз, когда затрагивается строка. если нулевые строки затронуты. Идет запуск триггера уровня. Предположим, хотите ли вы удалить одно приложение из таблицы emp, чей отдел HR и u хотите, как только сотрудник удалил из таблицы emp, счет в таблице dept из раздела HR должен быть уменьшен на 1. Затем вы должны выбрать триггер уровня.

Смежные вопросы