MySQL觸發(fā)器之判斷更新操作前后數(shù)據(jù)是否改變
MySQL觸發(fā)器判斷更新操作前后數(shù)據(jù)是否改變
改動表為user , 改動后將部分信息寫入cfq_tab表
1. 新增觸發(fā)器
create TRIGGER cfq_on_user_add after insert on user for each ROW BEGIN ?insert into cfq_tab(id,type_id,type,status) values (null,new.UID,1,0); end;
2. 修改觸發(fā)器
判斷修改前后數(shù)據(jù)是否變動
//DROP TRIGGER IF EXISTS cfq_on_user_edit create TRIGGER cfq_on_user_edit after update on user for each ROW BEGIN if new.USER_NAME <>old.USER_NAME or new.DEPT_ID <> old.DEPT_ID then ?insert into cfq_tab(id,type_id,type,status) values (null,new.UID,2,0); end if; end;
MySQL觸發(fā)器(同步表數(shù)據(jù)增刪改)
起因
開發(fā)過程中偶爾會出現(xiàn)一種場景,兩個不同服務間的數(shù)據(jù)庫表格內容需要保持一致。
由于要保持服務本身的獨立性,不太適合使用同一個數(shù)據(jù)庫。
這個時候可以考慮同步數(shù)據(jù)庫內容。
觸發(fā)器恰好可以起到這樣的作用,只要寫增、刪、改三個觸發(fā)器便可。
觸發(fā)器只需寫在源表內,可將更新同步至目標表。
語法
DELIMITER $ create trigger <觸發(fā)器名> after <操作名(insert、delete、update)> on <源表名> for each row begin <sql語句> END $; DELIMITER ;
增加(insert)
在觸發(fā)器里面有兩個關鍵字 old和new,在insert操作的時候我們使用的是new
DELIMITER $ create trigger user_insert after insert on upms_user for each row begin INSERT INTO `storage`.upms_user(id,username,create_time,creator,update_time,updater) VALUES(new.id,new.username,new.create_time,new.creator,new.update_time,new.updater); END $; DELIMITER ;
刪除(delete)
在where條件語句中我們需要使用的是關鍵字old
DELIMITER $ CREATE TRIGGER user_delete AFTER DELETE ON upms_user FOR EACH ROW BEGIN DELETE FROM `storage`.upms_user WHERE id=old.id; END $; DELIMITER ;
更新(update)
此處要注意的是,我們在字段賦值時使用的時new,在where條件中使用的old。
DELIMITER $ CREATE TRIGGER user_update AFTER UPDATE ON upms_user FOR EACH ROW BEGIN UPDATE `storage`.upms_user SET username=new.username,create_time=new.create_time,creator=new.creator, update_time=new.update_time,updater=new.updater where id=old.id; END $; DELIMITER ;
navicat創(chuàng)建觸發(fā)器示例

右擊需要數(shù)據(jù)源表格,選擇設計表->觸發(fā)器,輸入觸發(fā)器名稱,觸發(fā)方式(After、Before),觸發(fā)操作(insert、delete、update),然后在下方定義處寫對應的操作即可
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
MySQL千萬級大表進行數(shù)據(jù)清理的幾種常見方案
當MySQL數(shù)據(jù)庫中的表數(shù)據(jù)量達到千萬級別時,直接對數(shù)據(jù)進行刪除操作將面臨嚴重的性能問題,可能會導致數(shù)據(jù)庫長時間的鎖表,因此,如何安全高效地進行數(shù)據(jù)清理成為一個亟需解決的問題,下面我將分享幾種常見的數(shù)據(jù)清理方案,需要的朋友可以參考下2023-11-11
mysql存儲過程之引發(fā)存儲過程中的錯誤條件(SIGNAL和RESIGNAL語句)實例分析
這篇文章主要介紹了mysql存儲過程之引發(fā)存儲過程中的錯誤條件(SIGNAL和RESIGNAL語句),結合實例形式分析了mysql使用SIGNAL和RESIGNAL語句來引發(fā)存儲過程中的錯誤條件相關操作技巧與注意事項,需要的朋友可以參考下2019-12-12
前端傳參數(shù)進行Mybatis調用mysql存儲過程執(zhí)行返回值詳解
這篇文章主要介紹了前端傳參數(shù)進行Mybatis調用mysql存儲過程執(zhí)行返回值詳解,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08
MySQL 數(shù)據(jù)庫如何解決高并發(fā)問題
這篇文章主要介紹了MySQL 如何處理高并發(fā),幫助大家更好的優(yōu)化MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2020-09-09

