基本語法: CREATE TRIGGER 自定義名稱 觸發時機 觸發事件 ON 觸發事件所在的表名 FOR EACH ROW 觸發需要執行的邏輯;
創建觸發器:
CREATE TRIGGER tr_seq1
AFTER INSERT on table1
FOR EACH ROW
BEGIN
DECLARE cn INTEGER;
SELECT COUNT(galary_id) INTO cn from table2;
IF cn!=0 THEN
UPDATE table2 set table2.num=table2.num+2;
ELSE
INSERT INTO table1 VALUES(1,1,1);
END IF;
END;
上邊內容解釋如下:
使用符號分割,標示位於中間的內容爲一個整體,而不是單單用分號分割;
創建一個名稱是tr_seq1的觸發器;
觸發器觸發事件是,向table2插入數據只好觸發;
對每一行都生效;
開始具體邏輯;
聲明一個變量cn,類型是INTEGER;
查詢table1的數據數量,並賦值給變量cn;
判斷變量cn的值是否不等於0;
符合上邊的條件,則更新數據庫中num的值,在原基礎加2;
否則;
向table1中插入一條數據;
具體邏輯結束
分隔符結尾;
分割符聲明結尾。
其中,觸發器名參數指要創建的觸發器的名字
BEFORE和AFTER參數指定了觸發執行的時間,在事件之前或是之後
FOR EACH ROW表示任何一條記錄上的操作滿足觸發事件都會觸發該觸發器
查詢觸發器:
如果要查詢test庫中已有的觸發器,就可以這樣寫:
SHOW TRIGGERS FROM database
尤其注意,是庫名,不是表名。
如果只要查詢某個觸發器的詳細情況,可以用類似下邊的查詢語句:
SHOW CREATE TRIGGER tr_seq1
刪除觸發器:
如果觸發器失效了,爲了減少資源消耗,可能需要進行刪除
DROP TRIGGER 觸發器名稱;
而一般用的比較多的,是在刪除前先進行一個判斷,判斷是否存在,那麼就成了下邊這樣:
DROP TRIGGER IF EXISTS 觸發器名稱;
不足之處,歡迎吐槽!