mysql的觸發器

mysql的觸發器

創建觸發器語法:

CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
[trigger_order]
trigger_body

trigger_time: { BEFORE | AFTER }

trigger_event: { INSERT | UPDATE | DELETE }

trigger_order: { FOLLOWS | PRECEDES } other_trigger_name

tbl_name是與觸發器相關聯的表名,必須是一個永久表,不能是臨時表或視圖。

trigger_time是觸發器執行的時間,可以是after或者before,表示觸發器是在要被修改的行修改之前還是之後執行。

trigger_event可以是下列三種操作:

INSERT(包括insert、load data用於將一個文件裝入到一個數據表中相當於一系列insert、replace語句) UPDATE(update語句) DELETE(包括delete和replace語句)

trigger_body是觸發器的執行語句,對於多個SQL語句,用begin…end包含這些語句。
在trigger_body中,可以使用別名old(update或delete之前存在的那行)和new(insert或update後的那行)來指定表中會被觸發器影響的行(這兩個關鍵字不區分大小寫)。對於old行,隻有可讀權限,不能修改。對於new行,既可以通過select讀取該行,在before觸發器中還可以通過 SET NEW.col_name = value來修改該行,在after觸發器中該set語句是不行的因為行的改變已經發生過瞭)。

Mysql中使用DECLARE來設定一句局部變量,該變量隻能在BEGIN…END復合語句中使用,並且應該設定在復合語句的開頭。

DECLARE var_name[,...] type [DEFAULT value]

var_name:變量名稱,同 SQL 語句一樣,變量名不區分大小寫
type:數據類型MySQL 支持的任何數據類型,可以同時設定多個同類型的變量,用逗號隔開
DEFAULT:變量初始值為 NULL,如果需要,可以使用 DEFAULT 子句提供默認值,值可以被指定為一個表達式

對變量賦值采用SET語句:
SET var_name = expr [,var_name = expr] …

實例:

mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
Query OK, 0 rows affected (0.03 sec)

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
???-> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)

mysql> SET @sum = 0;
mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);
mysql> SELECT @sum AS ‘Total amount inserted’;
+———————–+
| Total amount inserted |
+———————–+
| 1852.48 |
+———————–+

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *