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)一種場景,兩個不同服務(wù)間的數(shù)據(jù)庫表格內(nèi)容需要保持一致。
由于要保持服務(wù)本身的獨(dú)立性,不太適合使用同一個數(shù)據(jù)庫。
這個時候可以考慮同步數(shù)據(jù)庫內(nèi)容。
觸發(fā)器恰好可以起到這樣的作用,只要寫增、刪、改三個觸發(fā)器便可。
觸發(fā)器只需寫在源表內(nèi),可將更新同步至目標(biāo)表。
語法
DELIMITER $ create trigger <觸發(fā)器名> after <操作名(insert、delete、update)> on <源表名> for each row begin <sql語句> END $; DELIMITER ;
增加(insert)
在觸發(fā)器里面有兩個關(guān)鍵字 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條件語句中我們需要使用的是關(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)
此處要注意的是,我們在字段賦值時使用的時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é)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySql中把一個表的數(shù)據(jù)插入到另一個表中的實(shí)現(xiàn)代碼
本篇文章是對MySql中把一個表的數(shù)據(jù)插入到另一個表中的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
MySQL數(shù)據(jù)庫優(yōu)化與定期數(shù)據(jù)處理策略
在當(dāng)今數(shù)據(jù)驅(qū)動的時代,數(shù)據(jù)庫作為信息存儲和管理的核心,扮演著至關(guān)重要的角色,本文將探討如何通過一系列有效的策略來優(yōu)化 MySQL 數(shù)據(jù)庫的查詢效率,并實(shí)現(xiàn)定期處理數(shù)據(jù)的機(jī)制,以確保主表中的數(shù)據(jù)保持在合理范圍內(nèi),需要的朋友可以參考下2025-03-03
Linux下如何通過MySQL二進(jìn)制包安裝MySQL5.7
這篇文章主要介紹了Linux下如何通過MySQL二進(jìn)制包安裝MySQL5.7,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07
關(guān)于Mysql插入中文字符報錯ERROR 1366(HY000)的解決方法
這篇文章主要介紹了關(guān)于Mysql插入中文字符報錯ERROR 1366(HY000)的解決方法,在我們?nèi)粘J褂胢ysql的過程中會經(jīng)常遇到各種報錯,今天我們就來看一下ERROR 1366報錯的解決方法吧2023-07-07
Mysql中設(shè)計(jì)數(shù)據(jù)表的過程解析
數(shù)據(jù)庫約束通過NOT NULL、UNIQUE、DEFAULT、主鍵和外鍵等規(guī)則保障數(shù)據(jù)完整性,自動校驗(yàn)數(shù)據(jù),減少人工錯誤,提升數(shù)據(jù)一致性和業(yè)務(wù)邏輯嚴(yán)謹(jǐn)性,本文介紹Mysql中設(shè)計(jì)數(shù)據(jù)表的過程,感興趣的朋友一起看看吧2025-07-07
MySQL查詢倒數(shù)第二條記錄實(shí)現(xiàn)方法
這篇文章主要介紹了MySQL查詢倒數(shù)第二條記錄實(shí)現(xiàn)方法,本文直接給出代碼實(shí)例,重要部分已經(jīng)加紅提示,需要的朋友可以參考下2015-05-05

