MySQL事件與觸發器專題精煉

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

了解觸發器和事件(定時器)

什么是觸發器?

概念: 觸發器(trigger)是SQL server 提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行。觸發器經常用于加強數據的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數據字典中查到。SQL3的觸發器是一個能由系統自動執行對數據庫修改的語句。

通俗的來講,觸發器就是一個觸發裝置,裝置里面存有一段操作。這個裝置有觸發條件,達到某個條件就會觸發這個裝置,觸發裝置就會執行存儲的一段操作。

什么是事件(定時器)?

概念: 事件(event)是MySQL在相應的時刻調用的過程式數據庫對象。一個事件可調用一次,也可周期性的啟動,它由一個特定的線程來管理的,也就是所謂的“事件調度器”。

通俗的來講,事件就可以看作一個定時器,設定一個時間。等時間到了開始執行設置好的操作。

觸發器和事件(定時器)的區別

  • 事件和觸發器類似,都是在某些事情發生的時候啟動。當數據庫上啟動一條語句的時候,觸發器就啟動了,而事件是根據調度事件來啟動的。由于他們彼此相似,所以事件也稱為臨時性觸發器。
  • 事件取代了原先只能由操作系統的計劃任務來執行的工作,而且MySQL的事件調度器可以精確到每秒鐘執行一個任務,而操作系統的計劃任務(如:Linux下的CRON或Windows下的任務計劃)只能精確到每分鐘執行一次。

創建觸發器和事件(定時器)

創建觸發器

例一:建立一個用戶表(用戶ID,用戶姓名),建立一個觸發器(當用戶表中插入數據時,自動生成一個全局唯一的ID)

先建立user表

create table user(
id int PRIMARY KEY,
name varchar(20)
);

建立觸發器

-- 建立觸發器名為tt
create TRIGGER tt
-- 觸發條件,向user表中插入數據時啟動觸發器
BEFORE insert on user
-- 檢查表中每一行,對新插入的數據進行操作
for EACH ROW
-- 執行操作
BEGIN 
set new.id=UUID();
END

剛剛建立的觸發器(查看當前數據庫下全部觸發器的代碼show triggers)

效果:向表中插入三個用戶名,自動生成三個ID

insert user(name) VALUE('張三'),('李四'),('王五')

例二:再建立一個訂單表DD(訂單ID,商品名稱,用戶ID),建立一個觸發器tq1(當刪除一個用戶時,該用戶的訂單也將刪除)

建表

create table DD(
ddid int PRIMARY KEY,
ddname VARCHAR(20),
userid VARCHAR(50)
)

建立觸發器

delimiter $
-- 建立觸發器名為tq
create TRIGGER tq1
-- 觸發條件,再dd表刪除數據之后啟動觸發器
AFTER DELETE on user
-- 檢查表中每一行,對新插入的數據進行操作
for EACH ROW
-- 執行操作
BEGIN  
DELETE FROM dd WHERE old.id=userid;
END $ 
delimiter ;

向表中添加兩條數據

效果:刪除user表中的用戶,dd表中的記錄也跟隨刪除

刪除張三

delete from user WHERE name='張三'

創建事件(定時器)

在User表中設置一個事件在一分鐘后執行。一分鐘后向user表中添加三條數據

-- 創建事件e1
create event e1 
-- 預定時間
on SCHEDULE 
-- 當前時間加一分鐘
AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
-- 執行操作
do insert user(name) VALUE('王大麻子'),('王二麻子'),('王三麻子');

效果

執行前

沒到一分鐘查看一下,沒有變化

一分鐘后,數據自動添加上了

對觸發器和時間(定時器)的操作

查看當前數據庫下的觸發器和定時器

這里只能查看還未執行的定時器,執行完的已經沒了

// 查詢當前庫下的定時器
show events

查看當前庫下的觸發器

show TRIGGERS

刪除定時器和觸發器

刪除觸發器tt2

DROP TRIGGER tt2

新建定時器

刪除定時器

drop event e1

-- 開啟關閉事件調度器 
-- ON 1 開啟事件功能 
-- OFF off 0 關閉事件功能
set global event_scheduler = OFF 
set global event_scheduler = on;

到此這篇關于MySQL事件與觸發器專題精煉的文章就介紹到這了,更多相關MySQL 觸發器內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 如何用cmd連接Mysql數據庫

    如何用cmd連接Mysql數據庫

    如何用cmd連接Mysql數據庫,需要的朋友可以參考一下
    2013-03-03
  • mysql中的limit用法有哪些(推薦)

    mysql中的limit用法有哪些(推薦)

    在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行數據,這個時候怎么辦呢,mysql已經為我們提供了這樣一個功能,盡管語法邏輯很是怪異,這個功能就好比oracle里的rownum,但比mysql提供的這個LIMIT好用、好記和好理解多了,具體內容一起通過本文看看吧
    2017-10-10
  • mysql實現事務的提交和回滾實例

    mysql實現事務的提交和回滾實例

    這篇文章主要介紹了mysql實現事務的提交和回滾,需要的朋友可以參考下
    2014-06-06
  • MySQL備份時排除指定數據庫的方法

    MySQL備份時排除指定數據庫的方法

    這篇文章主要介紹了MySQL備份時排除指定數據庫的方法的相關資料,需要的朋友可以參考下
    2016-03-03
  • Mysql5.7.14 linux版密碼忘記完美解決辦法

    Mysql5.7.14 linux版密碼忘記完美解決辦法

    這篇文章主要介紹了Mysql5.7.14 linux版密碼忘記完美解決辦法,需要的朋友可以參考下
    2017-08-08
  • Mysql修改存儲過程相關權限問題

    Mysql修改存儲過程相關權限問題

    這篇文章主要介紹了Mysql修改存儲過程相關權限問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • MySQL InnoDB和MyISAM數據引擎的差別分析

    MySQL InnoDB和MyISAM數據引擎的差別分析

    InnoDB和MyISAM是在使用MySQL最常用的兩個表類型,各有優缺點,視具體應用而定?;镜牟顒e為:MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持
    2011-05-05
  • MySQL系列之十一 日志記錄

    MySQL系列之十一 日志記錄

    這篇文章主要介紹了MySQL日志文件詳解,本文分別講解了錯誤日志、二進制日志、通用查詢日志、慢查詢日志、Innodb的在線redo日志、更新日志等日志類型和作用介紹,需要的朋友可以參考下
    2021-07-07
  • MySQL遠程訪問設置終極方法

    MySQL遠程訪問設置終極方法

    這篇文章主要介紹了MySQL遠程訪問設置終極方法,本文總結了多種設置方法和技巧,是解決遠程訪問的終極解決方案,需要的朋友可以參考下
    2014-12-12
  • MySQL控制用戶輸錯密碼嘗試次數

    MySQL控制用戶輸錯密碼嘗試次數

    這篇文章主要介紹了MySQL如何控制用戶輸錯密碼嘗試次數,文中給大家提到了死鎖監控方法及處理方案,需要的朋友可以參考下
    2019-11-11

最新評論

免费人成视频在线观看