[精讚] [會員登入]
13704

[Mysql] Trigger 觸發使用方法

trigger 在資料庫的使用上,具有極大的方便性,該如何使用?

分享此文連結 //n.sfs.tw/10448

分享連結 [Mysql] Trigger 觸發使用方法@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-11-07 01:19:32 最後編修
2016-12-18 23:10:53 By 張○○
 

自動目錄

trigger 在資料庫的使用上,具有極大的方便性。MySQL 在5.02 後支援了 trigger 的指令。

建立 trigger

CREATE TRIGGER trigger_name trigger_time trigger_event  ON tbl_name FOR EACH ROW trigger_stmt

trigger_name 觸發名稱,隨便取名

trigger_time 觸發時間 ,只有 BEFORE 和AFTER兩種。BEFORE 是在進行trigger_event 之前,AFTER 在進行trigger_event 之後觸發

trigger_event 觸發事件,有 INSERT、DELETE、UPDATE 三種。以下有幾個注意點:

1. INSERT INTO .. ON DUPLICATE UPDATE 這語法造成的觸發行為由最後是 INSERT 或是 UPDATE 來決定
2. 同一個 trigger_time +trigger_event  組合不得重覆。
3. INSERT、LOAD DATA和REPLACE 都會觸發 INSERT event;DELETE和REPLACE 都會觸發 DELETE。

trigger_stmt 是當觸發時要執行的語句。如果您打算執行多個語句,可使用BEGIN ... END復合語句結構。以下是範例(直接在Mysql console下指令,不要phpMyAdmin下操作):

DELIMITER |  (這裡很重要,如果不修改預設的 ;,則後面會出錯)

CREATE TRIGGER `insertrow` BEFORE INSERT ON `logs`

  FOR EACH ROW BEGIN

    UPDATE `summary` SET `value` = `value` +1 WHERE `ky` = 'rownum';

  END

|

DELIMITER ; (把結束符號修改回去)

查看trigger 內容

mysql> show triggers;
+-----------+--------+-------+----------------------------------------------------------------------------
| Trigger   | Event  | Table | Statement
+-----------+--------+-------+---------------------------------------------------------------------------- 
| insertrow | INSERT | logs  | BEGIN UPDATE `summary` SET `value` = `value` +1 WHERE `ky` = 'rownum'; END
+-----------+--------+-------+---------------------------------------------------------------------------- 

+--------+---------+----------+----------------+
| Timing | Created | sql_mode | Definer        |
+--------+---------+----------+----------------+
| BEFORE | NULL    |          | axer@localhost |
+--------+---------+----------+----------------+

刪除trigger

mysql> drop TRIGGER insertrow;

範例:

在刪除記錄時,把資料行備份到另一個資料表

mysql> DELIMITER $$

mysql> CREATE TRIGGER TR_A_DEL_INNMSGREPLY_TABLE AFTER DELETE ON source_tbl FOR EACH ROW BEGIN INSERT IGNORE INTO target_tbl( sn, fsn, author, o, `desc`,cDT ) VALUES ( old.sn, old.fsn, old.author, old.o, old.desc, old.cDT); END$$

mysql> DELIMITER ;

再次提醒,不要phpMyAdmin下操作,你不會成功。

2016.1.23更新

在phpmyadmin4版後可以直接操作了,有一個觸發器,選擇資料庫後有一個「觸發器的頁籤,可以直接設定

各位可以試試

參考資料

[1] Mysql 5.1 doc 中文 http://twpug.net/docs/mysql-5.1/triggers.html

[2] http://stackoverflow.com/questions/1939364/is-it-possible-to-move-a-record-from-one-table-to-another-using-a-single-sql-sta


原文 2010-09-10 15:12:12

END

你可能感興趣的文章

[MYSQL] 查看資料表狀態 要看資料表的狀態,不是結構喔,以前我都會用 procedure analyse(): SELECT `colname`

[Mysql/Mariadb] Left Join 和 Right Join 合併表單 SQL語法中的 Left Join 和 Right Join 很常用,但是我常會忘記,所以寫下來備忘。

[Mysql/MariaDB] 使用Memory引擎修改及設定最大值的方法 Mysql/MariaDB 使用Memory引擎預設是16MB,修改及設定最大值的方法。

[MySQL/Mariadb] console 將查詢結果輸出到檔案 在mysql 的console中該如何將查詢結果輸出到檔案?

[Mysql] 使用索引來加速搜尋 只要是常常用到搜索條件的欄位,就應該把它設成索引鍵,有無設定的速度差可能會好幾倍

[mysqldump] Mysqldump時出現記憶體錯誤Out of memory 當進行 mysqldump 時出現 Out of memory (Needed xxxxx bytes) 的錯誤,該如何處理?

隨機好文

UTF-8 BOM (Byte Order Mark) 的問題 在 Michael Kaplan 那看到 Every character has a story #4: U+feff

看懂DSUB DVI HDMI USB等各式影音接頭 看懂DSUB DVI HDMI等各式影音接頭

[Win7] 燒錄 iso 檔 在Windows7 中內建燒錄程式,可以直接把檔案拉到光碟機裡,再執行燒錄。

[AS3] 我做的唯一一個Flash As3遊戲UFO INVADSION [AS3] 我做的唯一一個Flash As3遊戲,是第一個也是最後一個,後來就沒再寫as3,不過as3還滿好玩的。

海棉寶寶超泡杯演奏的sweet victory 章魚哥和海棉寶寶在超泡杯的演奏歌曲