MySQL事件與觸發(fā)器專題精煉
了解觸發(fā)器和事件(定時(shí)器)
什么是觸發(fā)器?
概念: 觸發(fā)器(trigger)是SQL server 提供給程序員和數(shù)據(jù)分析員來保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲過程,它的執(zhí)行不是由程序調(diào)用,也不是手工啟動(dòng),而是由事件來觸發(fā),比如當(dāng)對一個(gè)表進(jìn)行操作( insert,delete, update)時(shí)就會激活它執(zhí)行。觸發(fā)器經(jīng)常用于加強(qiáng)數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則等。 觸發(fā)器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數(shù)據(jù)字典中查到。SQL3的觸發(fā)器是一個(gè)能由系統(tǒng)自動(dòng)執(zhí)行對數(shù)據(jù)庫修改的語句。
通俗的來講,觸發(fā)器就是一個(gè)觸發(fā)裝置,裝置里面存有一段操作。這個(gè)裝置有觸發(fā)條件,達(dá)到某個(gè)條件就會觸發(fā)這個(gè)裝置,觸發(fā)裝置就會執(zhí)行存儲的一段操作。
什么是事件(定時(shí)器)?
概念: 事件(event)是MySQL在相應(yīng)的時(shí)刻調(diào)用的過程式數(shù)據(jù)庫對象。一個(gè)事件可調(diào)用一次,也可周期性的啟動(dòng),它由一個(gè)特定的線程來管理的,也就是所謂的“事件調(diào)度器”。
通俗的來講,事件就可以看作一個(gè)定時(shí)器,設(shè)定一個(gè)時(shí)間。等時(shí)間到了開始執(zhí)行設(shè)置好的操作。
觸發(fā)器和事件(定時(shí)器)的區(qū)別
- 事件和觸發(fā)器類似,都是在某些事情發(fā)生的時(shí)候啟動(dòng)。當(dāng)數(shù)據(jù)庫上啟動(dòng)一條語句的時(shí)候,觸發(fā)器就啟動(dòng)了,而事件是根據(jù)調(diào)度事件來啟動(dòng)的。由于他們彼此相似,所以事件也稱為臨時(shí)性觸發(fā)器。
- 事件取代了原先只能由操作系統(tǒng)的計(jì)劃任務(wù)來執(zhí)行的工作,而且MySQL的事件調(diào)度器可以精確到每秒鐘執(zhí)行一個(gè)任務(wù),而操作系統(tǒng)的計(jì)劃任務(wù)(如:Linux下的CRON或Windows下的任務(wù)計(jì)劃)只能精確到每分鐘執(zhí)行一次。
創(chuàng)建觸發(fā)器和事件(定時(shí)器)
創(chuàng)建觸發(fā)器
例一:建立一個(gè)用戶表(用戶ID,用戶姓名),建立一個(gè)觸發(fā)器(當(dāng)用戶表中插入數(shù)據(jù)時(shí),自動(dòng)生成一個(gè)全局唯一的ID)
先建立user表
create table user( id int PRIMARY KEY, name varchar(20) );
建立觸發(fā)器
-- 建立觸發(fā)器名為tt create TRIGGER tt -- 觸發(fā)條件,向user表中插入數(shù)據(jù)時(shí)啟動(dòng)觸發(fā)器 BEFORE insert on user -- 檢查表中每一行,對新插入的數(shù)據(jù)進(jìn)行操作 for EACH ROW -- 執(zhí)行操作 BEGIN set new.id=UUID(); END
剛剛建立的觸發(fā)器(查看當(dāng)前數(shù)據(jù)庫下全部觸發(fā)器的代碼show triggers)
效果:向表中插入三個(gè)用戶名,自動(dòng)生成三個(gè)ID
insert user(name) VALUE('張三'),('李四'),('王五')
例二:再建立一個(gè)訂單表DD(訂單ID,商品名稱,用戶ID),建立一個(gè)觸發(fā)器tq1(當(dāng)刪除一個(gè)用戶時(shí),該用戶的訂單也將刪除)
建表
create table DD( ddid int PRIMARY KEY, ddname VARCHAR(20), userid VARCHAR(50) )
建立觸發(fā)器
delimiter $ -- 建立觸發(fā)器名為tq create TRIGGER tq1 -- 觸發(fā)條件,再dd表刪除數(shù)據(jù)之后啟動(dòng)觸發(fā)器 AFTER DELETE on user -- 檢查表中每一行,對新插入的數(shù)據(jù)進(jìn)行操作 for EACH ROW -- 執(zhí)行操作 BEGIN DELETE FROM dd WHERE old.id=userid; END $ delimiter ;
向表中添加兩條數(shù)據(jù)
效果:刪除user表中的用戶,dd表中的記錄也跟隨刪除
刪除張三
delete from user WHERE name='張三'
創(chuàng)建事件(定時(shí)器)
在User表中設(shè)置一個(gè)事件在一分鐘后執(zhí)行。一分鐘后向user表中添加三條數(shù)據(jù)
-- 創(chuàng)建事件e1 create event e1 -- 預(yù)定時(shí)間 on SCHEDULE -- 當(dāng)前時(shí)間加一分鐘 AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE -- 執(zhí)行操作 do insert user(name) VALUE('王大麻子'),('王二麻子'),('王三麻子');
效果
執(zhí)行前
沒到一分鐘查看一下,沒有變化
一分鐘后,數(shù)據(jù)自動(dòng)添加上了
對觸發(fā)器和時(shí)間(定時(shí)器)的操作
查看當(dāng)前數(shù)據(jù)庫下的觸發(fā)器和定時(shí)器
這里只能查看還未執(zhí)行的定時(shí)器,執(zhí)行完的已經(jīng)沒了
// 查詢當(dāng)前庫下的定時(shí)器 show events
查看當(dāng)前庫下的觸發(fā)器
show TRIGGERS
刪除定時(shí)器和觸發(fā)器
刪除觸發(fā)器tt2
DROP TRIGGER tt2
新建定時(shí)器
刪除定時(shí)器
drop event e1
-- 開啟關(guān)閉事件調(diào)度器 -- ON 1 開啟事件功能 -- OFF off 0 關(guān)閉事件功能 set global event_scheduler = OFF set global event_scheduler = on;
到此這篇關(guān)于MySQL事件與觸發(fā)器專題精煉的文章就介紹到這了,更多相關(guān)MySQL 觸發(fā)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL中json_extract函數(shù)說明及使用方式
今天看mysql中的json數(shù)據(jù)類型,涉及到一些使用,使用到了函數(shù)json_extract來,下面這篇文章主要給大家介紹了關(guān)于MySQL中json_extract函數(shù)說明及使用方式的相關(guān)資料,需要的朋友可以參考下2022-08-08重裝MySQL最后一步失敗的完美解決方案(經(jīng)驗(yàn)總結(jié))
使用MySQL都有過重裝的經(jīng)歷,要是重裝MySQL基本都是在最后一步通不過,究竟是什么原因呢?下面是我總結(jié)的一點(diǎn)經(jīng)驗(yàn),都是血的教訓(xùn)2014-06-06如何解決局域網(wǎng)內(nèi)mysql數(shù)據(jù)庫連接慢
通過內(nèi)網(wǎng)連另外一臺機(jī)器的mysql服務(wù), 確發(fā)現(xiàn)速度N慢! 等了大約幾十秒才等到提示輸入密碼。非常急人,有沒有辦法可以解決局域網(wǎng)內(nèi)mysql數(shù)據(jù)庫連接慢呢?下面小編帶領(lǐng)大家來解決此問題,感興趣的朋友一起看看吧2015-09-09使用distinct在mysql中查詢多條不重復(fù)記錄值的解決辦法
使用distinct在mysql中查詢多條不重復(fù)記錄值的解決辦法...2006-12-12mysql聚合統(tǒng)計(jì)數(shù)據(jù)查詢緩慢的優(yōu)化方法
這篇文章主要給大家介紹了關(guān)于mysql聚合統(tǒng)計(jì)數(shù)據(jù)查詢緩慢的優(yōu)化方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02SQL面試題:求時(shí)間差之和(有重復(fù)不計(jì))
這篇文章主要介紹了SQL面試題:求時(shí)間差之和(有重復(fù)不計(jì)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11mysql觸發(fā)器簡介、創(chuàng)建觸發(fā)器及使用限制分析
這篇文章主要介紹了mysql觸發(fā)器簡介、創(chuàng)建觸發(fā)器及使用限制,結(jié)合實(shí)例形式分析了mysql觸發(fā)器的功能、原理、創(chuàng)建、用法及操作注意事項(xiàng),需要的朋友可以參考下2019-12-12