最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL事件與觸發(fā)器專(zhuān)題精煉

 更新時(shí)間:2022年03月09日 16:44:11   作者:桃花鍵神  
觸發(fā)器是SQLserver提供給程序員和數(shù)據(jù)分析員來(lái)保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲(chǔ)過(guò)程,事件是在?MySQL?5.1后引入的,有點(diǎn)類(lèi)似操作系統(tǒng)的計(jì)劃任務(wù),但是周期性任務(wù)是內(nèi)置在MySQL服務(wù)端執(zhí)行的

了解觸發(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)文章

最新評(píng)論

湖南省| 北宁市| 分宜县| 台南县| 武强县| 吉林市| 新闻| 礼泉县| 尚义县| 石林| 崇仁县| 莲花县| 辽源市| 城口县| 德庆县| 原平市| 普宁市| 林口县| 湘潭市| 木里| 广灵县| 方山县| 稻城县| 九江市| 南木林县| 富宁县| 遂川县| 双辽市| 大城县| 陇川县| 昭通市| 潍坊市| 鄂伦春自治旗| 昆山市| 武乡县| 上杭县| 祁门县| 萍乡市| 布尔津县| 平安县| 滦南县|