row-level trigger vs statement-level trigger

后端 未结 6 1054
时光取名叫无心
时光取名叫无心 2020-11-30 20:26

I am having a hard time understanding the difference between \'row-level triggers\' and \'statement-level triggers\'.

From my understanding, in the scenario a stateme

6条回答
  •  难免孤独
    2020-11-30 20:49

    You may want trigger action to execute once after the client executes a statement that modifies a million rows (statement-level trigger). Or, you may want to trigger the action once for every row that is modified (row-level trigger).

    EXAMPLE: Let's say you have a trigger that will make sure all high school seniors graduate. That is, when a senior's grade is 12, and we increase it to 13, we want to set the grade to NULL.

    For a statement level trigger, you'd say, after the increase-grade statement runs, check the whole table once to update any nows with grade 13 to NULL.

    For a row-level trigger, you'd say, after every row that is updated, update the new row's grade to NULL if it is 13.

    A statement-level trigger would look like this:

    create trigger stmt_level_trigger
    after update on Highschooler
    begin
        update Highschooler
        set grade = NULL
        where grade = 13;
    end;
    

    and a row-level trigger would look like this:

    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;
    

    Note that SQLite doesn't support statement-level triggers, so in SQLite, the FOR EACH ROW is optional.

提交回复
热议问题