[精讚] [會員登入]
13367

[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/Mariadb] 檢查、修復及優化資料庫 mysql/mariadb 檢查、修復及優化資料庫

[Mysql/MariaDB] 清除及設定 MySQL 的死連接 mysql 伺服器若有太多的連接,無疑的會耗用非常多的資源,若資源耗盡會影響新的連線,勢必要做一些調整

[Mysql/MariaDB] 修改資料庫、表格或欄位名稱 Mysql/MariaDB修改資料庫、表格或欄位名稱

[Mysql/Mariadb] 忘記root密碼 常常會忘記root 密碼,簡單的幾步驟回復

[Docker] Mariadb-Galera出現Incorrect definition of table mysql.column_stats:'hist_type'及 'histogram' 使用docker的Mariadb-galera出現'hist_type'及 'histogram'型別錯誤的解決方法。

Mysql 安裝完畢要做的事 Mysql 安裝完畢後,該處理的流程

隨機好文

[MAC] 截取螢幕畫面的方法 截取螢幕畫面的方法,在MAC中叫作螢幕快照,英文是screenshot

[Freebsd] 定時測試 ADSL 是否斷線並重連 中華電信 ADSL 雖有固定 ip,可是他卻會不定時「斷線」, 使用以下的 方法可以定時測試是否斷線,以及重新撥接。

好用的3+2碼郵遞區號查詢系統推薦 網路上找到用地址輸入判斷3+2碼郵遞區號的辨識率不高,除了這個網站…

Smarty安裝 smarty 是著名的樣版引擎,非常的好用,用多了突然發現拿掉smarty反而不會寫php了,以下是安裝過程..

維修海棉拖把頭 這類型的海棉拖把很好用,可是這近發現海棉頭越來越不耐用,也許是錯覺,以往都能用個三四個月,現在二個月就差不多掉下來。 這