mysql 觸發器-監控表字段更新
最近想實現一個監控mysql表的某個或者某幾個字段值的變化,當監控字段的值發生變化時,將原有值和更新值保存下來。想實現這個功能受限想到的就是觸發器,mysql的觸發器塊很久沒碰過了,重新拎起來還是免不了查些資料什麽的。花了點時間搞定了這個觸發器。這裏寫個小例子來記錄下mysql觸發器編寫的過程。
mysql觸發器格式如下:
CREATE TRIGGER 觸發器名 觸發器時間 觸發事件 ON 表名 FOR EACH ROW BEGIN 執行語句 END
註:觸發器名 - 觸發器的名稱
觸發器時間 - 觸發器觸發的時機,值為 BEFORE或AFTER
觸發器事件 - 引起觸發器觸發的事件,值為INSERT或UPDATE或DELETE
表名 - 觸發觸發器的表名,即該觸發器是建立在那張表上面的
執行語句 - 即為觸發器出發後執行的操作
案例:監控表tp_temp的mobile字段,當mobile字段發生變化時,tp_temp_2建立更新記錄 : 將更新前的mobile值和更新後的mobile值記錄到tp_temp_2表的mobile1和mobile2中
tp_temp表:
CREATE TABLE `tp_temp` (
`list_id` varchar(100) NOT NULL COMMENT ‘手機號‘,
`mobile` varchar(40) DEFAULT NULL COMMENT ‘ID‘
)
tp_temp2表:
CREATE TABLE `tp_temp_2` (
`list_id` varchar(100) DEFAULT NULL COMMENT ‘ID‘,
`mobile1` varchar(40) DEFAULT NULL COMMENT ‘手機號1‘,
`mobile2` varchar(40) NOT NULL COMMENT ‘手機號2‘,
`create_time` datetime DEFAULT NULL COMMENT ‘創建時間‘
)
創建觸發器trigger_test:
DELIMITER $$
CREATE
TRIGGER `mydb`.`trigger_test
ON `mydb`.`tp_temp`
FOR EACH ROW BEGIN
SET @oldMobile = (SELECT c.mobile FROM tp_temp c WHERE c.list_id=new.list_id LIMIT 1);
IF new.mobile <> @oldMobile THEN
INSERT INTO tp_temp2(list_id,mobile1,mobile2,create_time)VALUE (new.list_id,@oldMobile,new.mobile,SYSDATE());
END IF;
END$$
DELIMITER ;
以上。
mysql 觸發器-監控表字段更新