下列是建立trigger元件的语法:
如果trigger元件执行的工作比较复杂,需要一个以上的叙述时,就要把叙述放在「BEGIN」与「END」区块中:
你可以依照需求为一个表格建立不同的trigger元件:
以上列讨论的需求来说,每一次修改「cmdev.emp」表格资料,都必须新增一笔纪录到「cmdev.emplog」表格中。你要为「cmdev.emp」表格建立一个「UPDATE TRIGGER」;而「BEFORE」与「AFTER」就是「之前」与「之后」的意思。如果建立「BEFORE UPDATE TRIGGER」,那就表示在修改资料前会执行trigger;如果建立「AFTER UPDATE TRIGGER」,那就表示在修改资料后会执行trigger。以这个需求来说,「BEFORE」或「AFTER」都是一样的。
建立trigger元件与建立stored routines的方式一样,你也要使用「SQL script」来执行建立trigger的工作。下列的范例建立一个名称为「emp_before_update」的trigger元件:
执行上列的叙述后,MySQL资料库会储存你建立的trigger元件,可是它并不像stored routines可以用来呼叫与执行;MySQL资料库会自动帮你执行这些储存在trigger中的叙述。
为「cmdev.emp」表格建立一个「BEFORE UPDATE TRIGGER」以后,只要发生修改「cmdev.emp」表格资料的情况,MySQL资料库会自动执行这个trigger中的叙述:
不论是「UPDATE」或是其它两种Trigger元件,MySQL资料库都是以「纪录」来执行trigger。以下列的范例来说,一个会修改三笔纪录的「UPDATE」叙述,MySQL资料库会执行trigger三次:
如果在执行修改「cmdev.emp」表格叙述以后,实际上并没有修改任何纪录资料,那MySQL资料库也不会执行trigger:
在你建立trigger元件时,要特别注意下列的限制: