欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

了解觸發(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中格式化數(shù)字詳解

    mysql中格式化數(shù)字詳解

    格式化在我們?nèi)粘i_發(fā)中必不可少,最近在遇到了關(guān)于mysql格式化數(shù)字的需求,所以下面這篇文章主要給大家介紹了關(guān)于mysql中格式化數(shù)字的相關(guān)資料,分別介紹了format函數(shù)和rpad 和 lpad 給定位數(shù),不足補(bǔ)充自定義字符,需要的朋友可以參考下。
    2017-07-07
  • MySQL中json_extract函數(shù)說明及使用方式

    MySQL中json_extract函數(shù)說明及使用方式

    今天看mysql中的json數(shù)據(jù)類型,涉及到一些使用,使用到了函數(shù)json_extract來,下面這篇文章主要給大家介紹了關(guān)于MySQL中json_extract函數(shù)說明及使用方式的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • MySQL中給定父行找到所有子行的解決方案

    MySQL中給定父行找到所有子行的解決方案

    這篇文章主要給大家介紹了關(guān)于MySQL中給定父行找到所有子行的解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • MySQL查詢指定字段不是數(shù)字與逗號的sql

    MySQL查詢指定字段不是數(shù)字與逗號的sql

    今天小編遇到一個(gè)問題因?yàn)榫庉嫷牟患?xì)心不小心將關(guān)鍵詞寫到相關(guān)文章里面導(dǎo)致頁面無法生成,這里用sql語言將這些內(nèi)容獲取出來
    2020-02-02
  • 重裝MySQL最后一步失敗的完美解決方案(經(jīng)驗(yàn)總結(jié))

    重裝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ù)庫連接慢

    如何解決局域網(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ù)記錄值的解決辦法

    使用distinct在mysql中查詢多條不重復(fù)記錄值的解決辦法...
    2006-12-12
  • mysql聚合統(tǒng)計(jì)數(shù)據(jù)查詢緩慢的優(yōu)化方法

    mysql聚合統(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-02
  • SQL面試題:求時(shí)間差之和(有重復(fù)不計(jì))

    SQL面試題:求時(shí)間差之和(有重復(fù)不計(jì))

    這篇文章主要介紹了SQL面試題:求時(shí)間差之和(有重復(fù)不計(jì)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • mysql觸發(fā)器簡介、創(chuàng)建觸發(fā)器及使用限制分析

    mysql觸發(fā)器簡介、創(chuàng)建觸發(fā)器及使用限制分析

    這篇文章主要介紹了mysql觸發(fā)器簡介、創(chuàng)建觸發(fā)器及使用限制,結(jié)合實(shí)例形式分析了mysql觸發(fā)器的功能、原理、創(chuàng)建、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-12-12

最新評論