MySQL觸發(fā)器之判斷更新操作前后數(shù)據(jù)是否改變
MySQL觸發(fā)器判斷更新操作前后數(shù)據(jù)是否改變
改動(dòng)表為user , 改動(dòng)后將部分信息寫入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ù)是否變動(dòng)
//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)一種場景,兩個(gè)不同服務(wù)間的數(shù)據(jù)庫表格內(nèi)容需要保持一致。
由于要保持服務(wù)本身的獨(dú)立性,不太適合使用同一個(gè)數(shù)據(jù)庫。
這個(gè)時(shí)候可以考慮同步數(shù)據(jù)庫內(nèi)容。
觸發(fā)器恰好可以起到這樣的作用,只要寫增、刪、改三個(gè)觸發(fā)器便可。
觸發(fā)器只需寫在源表內(nèi),可將更新同步至目標(biāo)表。
語法
DELIMITER $ create trigger <觸發(fā)器名> after <操作名(insert、delete、update)> on <源表名> for each row begin <sql語句> END $; DELIMITER ;
增加(insert)
在觸發(fā)器里面有兩個(gè)關(guān)鍵字 old和new,在insert操作的時(shí)候我們使用的是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條件語句中我們需要使用的是關(guān)鍵字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)
此處要注意的是,我們在字段賦值時(shí)使用的時(shí)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ù)源表格,選擇設(shè)計(jì)表->觸發(fā)器,輸入觸發(fā)器名稱,觸發(fā)方式(After、Before),觸發(fā)操作(insert、delete、update),然后在下方定義處寫對應(yīng)的操作即可
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL千萬級大表進(jìn)行數(shù)據(jù)清理的幾種常見方案
當(dāng)MySQL數(shù)據(jù)庫中的表數(shù)據(jù)量達(dá)到千萬級別時(shí),直接對數(shù)據(jù)進(jìn)行刪除操作將面臨嚴(yán)重的性能問題,可能會導(dǎo)致數(shù)據(jù)庫長時(shí)間的鎖表,因此,如何安全高效地進(jìn)行數(shù)據(jù)清理成為一個(gè)亟需解決的問題,下面我將分享幾種常見的數(shù)據(jù)清理方案,需要的朋友可以參考下2023-11-11MySQL?常見時(shí)間字段設(shè)置小結(jié)
本文詳細(xì)探討了MySQL中常見時(shí)間字段的設(shè)置和處理,包括DATETIME、DATE、TIME和TIMESTAMP等類型的介紹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11mysql存儲過程之引發(fā)存儲過程中的錯(cuò)誤條件(SIGNAL和RESIGNAL語句)實(shí)例分析
這篇文章主要介紹了mysql存儲過程之引發(fā)存儲過程中的錯(cuò)誤條件(SIGNAL和RESIGNAL語句),結(jié)合實(shí)例形式分析了mysql使用SIGNAL和RESIGNAL語句來引發(fā)存儲過程中的錯(cuò)誤條件相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-12-12MySQL查詢重復(fù)記錄和刪除重復(fù)記錄的操作方法
在MySQL數(shù)據(jù)庫中,有時(shí)候會出現(xiàn)重復(fù)記錄的情況,這可能會導(dǎo)致數(shù)據(jù)不準(zhǔn)確或者不符合業(yè)務(wù)需求,為了解決這個(gè)問題,我們可以使用查詢語句來找出重復(fù)記錄,并使用刪除語句來刪除這些重復(fù)記錄,本文給大家介紹了兩種操作方法,需要的朋友可以參考下2024-12-12

前端傳參數(shù)進(jìn)行Mybatis調(diào)用mysql存儲過程執(zhí)行返回值詳解

MySQL 數(shù)據(jù)庫如何解決高并發(fā)問題