1. 程式人生 > >關於mysql 觸發器(insert,update)

關於mysql 觸發器(insert,update)

1. 當表A新增一條記錄,表B則跟著新增這條記錄

#刪除當前觸發器
drop TRIGGER IF EXISTS t_edw_event_add_cdr_3;
#建立觸發器:當ccbill_cdr表新增一條記錄,則在edw_event_add_cdr表新增這條記錄
CREATE TRIGGER t_edw_event_add_cdr_3 after INSERT ON ccbill_cdr for EACH ROW
BEGIN
#宣告代理商名稱變數
DECLARE agentnameA VARCHAR(30);
#根據ccbill_cdr表的userid查詢ccbill_ani表的代理商名稱
select agentname into agentnameA from ccbill_ani where aniid = new.userid;
#新增記錄到edw_event_add_cdr表
INSERT into edw_event_add_cdr (source_id,date_time,status,user_name,trademark,call_status,last_call_time) VALUES (new.callrecid,SYSDATE(),0,new.userid,agentnameA,0,new.endtime);
END

2. 當表A的一條資料發生改變,則把這條記錄新增到表B

#刪除當前觸發器
drop TRIGGER IF EXISTS t_edw_event_chg_balance_2;
#建立觸發器:當 ccbill_ani 表餘額balance1欄位值更新,則把更新資料的記錄新增到 edw_event_chg_balance
CREATE TRIGGER t_edw_event_chg_balance_2 before UPDATE on ccbill_ani for EACH ROW
BEGIN
DECLARE newBalance DOUBLE;
DECLARE oldBalance DOUBLE;
set newBalance = new.balance1; #新紀錄:已經更新過的餘額
set oldBalance = old.balance1; #原記錄:更新之前的餘額
#select newBalance;
#select oldBalance;
#原來的餘額 與 更新後的餘額進行對比,如果某一條資料的餘額不相等,則說明這條記錄已更新,把這條記錄新增到 edw_event_chg_balance
if newBalance != oldBalance THEN
  INSERT into edw_event_chg_balance set user_name = new.aniid,trademark = new.agentname,date_time = SYSDATE(),balance = newBalance,status = 0;
end if;
END