MySQL事件與觸發(fā)器專(zhuān)題精煉
了解觸發(fā)器和事件(定時(shí)器)
什么是觸發(fā)器?
概念: 觸發(fā)器(trigger)是SQL server 提供給程序員和數(shù)據(jù)分析員來(lái)保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲(chǔ)過(guò)程,它的執(zhí)行不是由程序調(diào)用,也不是手工啟動(dòng),而是由事件來(lái)觸發(fā),比如當(dāng)對(duì)一個(gè)表進(jìn)行操作( insert,delete, update)時(shí)就會(huì)激活它執(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í)行對(duì)數(shù)據(jù)庫(kù)修改的語(yǔ)句。
通俗的來(lái)講,觸發(fā)器就是一個(gè)觸發(fā)裝置,裝置里面存有一段操作。這個(gè)裝置有觸發(fā)條件,達(dá)到某個(gè)條件就會(huì)觸發(fā)這個(gè)裝置,觸發(fā)裝置就會(huì)執(zhí)行存儲(chǔ)的一段操作。
什么是事件(定時(shí)器)?
概念: 事件(event)是MySQL在相應(yīng)的時(shí)刻調(diào)用的過(guò)程式數(shù)據(jù)庫(kù)對(duì)象。一個(gè)事件可調(diào)用一次,也可周期性的啟動(dòng),它由一個(gè)特定的線(xiàn)程來(lái)管理的,也就是所謂的“事件調(diào)度器”。
通俗的來(lái)講,事件就可以看作一個(gè)定時(shí)器,設(shè)定一個(gè)時(shí)間。等時(shí)間到了開(kāi)始執(zhí)行設(shè)置好的操作。
觸發(fā)器和事件(定時(shí)器)的區(qū)別
- 事件和觸發(fā)器類(lèi)似,都是在某些事情發(fā)生的時(shí)候啟動(dòng)。當(dāng)數(shù)據(jù)庫(kù)上啟動(dòng)一條語(yǔ)句的時(shí)候,觸發(fā)器就啟動(dòng)了,而事件是根據(jù)調(diào)度事件來(lái)啟動(dòng)的。由于他們彼此相似,所以事件也稱(chēng)為臨時(shí)性觸發(fā)器。
- 事件取代了原先只能由操作系統(tǒng)的計(jì)劃任務(wù)來(lái)執(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è)用戶(hù)表(用戶(hù)ID,用戶(hù)姓名),建立一個(gè)觸發(fā)器(當(dāng)用戶(hù)表中插入數(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 -- 檢查表中每一行,對(duì)新插入的數(shù)據(jù)進(jìn)行操作 for EACH ROW -- 執(zhí)行操作 BEGIN set new.id=UUID(); END
剛剛建立的觸發(fā)器(查看當(dāng)前數(shù)據(jù)庫(kù)下全部觸發(fā)器的代碼show triggers)

效果:向表中插入三個(gè)用戶(hù)名,自動(dòng)生成三個(gè)ID
insert user(name) VALUE('張三'),('李四'),('王五')
例二:再建立一個(gè)訂單表DD(訂單ID,商品名稱(chēng),用戶(hù)ID),建立一個(gè)觸發(fā)器tq1(當(dāng)刪除一個(gè)用戶(hù)時(shí),該用戶(hù)的訂單也將刪除)
建表
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 -- 檢查表中每一行,對(duì)新插入的數(shù)據(jù)進(jìn)行操作 for EACH ROW -- 執(zhí)行操作 BEGIN DELETE FROM dd WHERE old.id=userid; END $ delimiter ;

向表中添加兩條數(shù)據(jù)

效果:刪除user表中的用戶(hù),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í)行前

沒(méi)到一分鐘查看一下,沒(méi)有變化

一分鐘后,數(shù)據(jù)自動(dòng)添加上了

對(duì)觸發(fā)器和時(shí)間(定時(shí)器)的操作
查看當(dāng)前數(shù)據(jù)庫(kù)下的觸發(fā)器和定時(shí)器
這里只能查看還未執(zhí)行的定時(shí)器,執(zhí)行完的已經(jīng)沒(méi)了
// 查詢(xún)當(dāng)前庫(kù)下的定時(shí)器 show events
查看當(dāng)前庫(kù)下的觸發(fā)器
show TRIGGERS

刪除定時(shí)器和觸發(fā)器
刪除觸發(fā)器tt2
DROP TRIGGER tt2

新建定時(shí)器

刪除定時(shí)器
drop event e1

-- 開(kāi)啟關(guān)閉事件調(diào)度器 -- ON 1 開(kāi)啟事件功能 -- OFF off 0 關(guān)閉事件功能 set global event_scheduler = OFF set global event_scheduler = on;
到此這篇關(guān)于MySQL事件與觸發(fā)器專(zhuān)題精煉的文章就介紹到這了,更多相關(guān)MySQL 觸發(fā)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL中的SHOW FULL PROCESSLIST命令實(shí)現(xiàn)
SHOW FULL PROCESSLIST命令是MySQL中一個(gè)非常有用的工具,可以幫助我們理解和監(jiān)控MySQL服務(wù)器的狀態(tài),本文主要介紹了MySQL中的SHOW FULL PROCESSLIST命令,感興趣的可以了解一下2023-11-11
一個(gè)案例徹底弄懂如何正確使用mysql inndb聯(lián)合索引
今天小編就為大家分享一篇關(guān)于一個(gè)案例徹底弄懂如何正確使用mysql inndb聯(lián)合索引,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02
Mysql 數(shù)據(jù)庫(kù)常用備份方法和注意事項(xiàng)
Mysql 數(shù)據(jù)庫(kù)常用備份方法和注意事項(xiàng) ,需要的朋友可以參考下。2010-04-04
解析MSSQL跨數(shù)據(jù)庫(kù)查詢(xún)的實(shí)現(xiàn)方法
本篇文章是對(duì)MSSQL跨數(shù)據(jù)庫(kù)查詢(xún)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
SQL?FOREIGN?KEY約束保障表之間關(guān)系完整性關(guān)鍵規(guī)則詳解
這篇文章主要介紹了SQL?FOREIGN?KEY約束保障表之間關(guān)系完整性關(guān)鍵規(guī)則詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Mysql字符串處理函數(shù)詳細(xì)介紹、總結(jié)
這篇文章主要介紹了Mysql字符串處理函數(shù)詳細(xì)介紹、總結(jié),需要的朋友可以參考下2014-04-04
為什么MySQL數(shù)據(jù)庫(kù)索引選擇使用B+樹(shù)?
今天小編就為大家分享一篇關(guān)于為什么MySQL數(shù)據(jù)庫(kù)索引選擇使用B+樹(shù)?,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03

