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

Mysql中的觸發(fā)器定義及語法介紹

 更新時間:2022年06月23日 11:34:02   作者:ISPEAKER  
MySQL?的觸發(fā)器和存儲過程一樣,都是嵌入到?MySQL?中的一段程序,是?MySQL?中管理數(shù)據(jù)的有力工具,本文給大家詳細介紹mysql觸發(fā)器的定義語法知識,感興趣的朋友一起看看吧

1.定義:

  觸發(fā)器和存儲過程相似,都是嵌入到 MySQL 中的一段程序。觸發(fā)器是由事件來觸發(fā)某個操作。當數(shù)據(jù)庫執(zhí)行這些事件時,就會激活觸發(fā)器來執(zhí)行相應的操作。這些事件稱為觸發(fā)條件,在MySQL中,有UPDATE,INSERT,和DELETE。

  • 在MySQL中,目前只有UPDATE,INSERT,和DELETE這三種操作,才會觸發(fā)觸發(fā)器,其他操作都不支持觸發(fā)器。這和Oracle中的觸發(fā)器有很大的區(qū)別,要注意區(qū)分。
  • 觸發(fā)器的每個表每次事件,都只允許一個觸發(fā)器。因此,每個表最多值允許有6個觸發(fā)器。如果一個表有兩個事件,INSERT和DELETE,那么就要分別創(chuàng)建一個觸發(fā)器。
  • 只有表才支持觸發(fā)器,視圖和臨時表不支持。

2.語法:

CREATE TRIGGER TRIGGER_NAME
BEFORE/AFTER 
UPDATE/INSERT/DELETE ON TABLE_NAME 
FOR EACH ROW
#觸發(fā)器主體
[BEGIN]
SQL操作
[END];
  • 創(chuàng)建觸發(fā)器:和創(chuàng)建存儲過程是一樣,用的都是CREATE 語句,但要注意,這里沒有 OR REPLACE。
  • TRIGGER_NAME:觸發(fā)器名稱。在MySQL中,要保證每個表中的觸發(fā)器是唯一的,每一個數(shù)據(jù)庫內(nèi)的觸發(fā)器可以不唯一,這就說明了一個數(shù)據(jù)庫內(nèi)的兩個表可以有相同的觸發(fā)器。這種行為在其他的數(shù)據(jù)庫內(nèi)是不被允許的。但是為了格式上的規(guī)范,還是要盡可能的保證TRIGGER_NAME的唯一性。
  • BEFORE/AFTER:觸發(fā)器被觸發(fā)的時刻。你如果希望觸發(fā)器在觸發(fā)事件之前發(fā)生,就使用BEFORE,如果希望在觸發(fā)事件之后發(fā)生,就使用AFTER。
  • UPDATE/INSERT/DELETE:觸發(fā)事件,觸發(fā)條件。在MySQL中,只有這三種DDL操作支持觸發(fā)器,其他操作都不被允許。
  • FOR EACH ROW:受觸發(fā)事件影響的每一行都要激活觸發(fā)器的動作。這里指的是行級觸發(fā),在MySQL里,F(xiàn)OE EACH ROW不可省略,不支持語句級觸發(fā)。
  • 觸發(fā)器主體:既可以是單獨的一條SQL語句,也可以是由BEGIN...END組成的復雜結(jié)構(gòu)塊。
# 創(chuàng)建一個觸發(fā)器T1,在對表customer做插入操作時,就會觸發(fā)T1,之后會在日志表note中插入一條數(shù)據(jù)
CREATE TRIGGER T1
AFTER 
INSERT ON customer
FOR EACH ROW # 觸發(fā)器主體
INSERT INTO note(日期,目標,操作) VALUES(NOW(),'customer','insert');

3.刪除觸發(fā)器

  和刪除表和存儲過程類似,都是使用DROP語句來刪除觸發(fā)器。

#刪除觸發(fā)器T1
DROP TRIGGER IF EXISTS T1;

觸發(fā)器不能夠更新和修改,想要修改一個觸發(fā)器的內(nèi)容,只能先將觸發(fā)器刪除,在創(chuàng)建一個新的觸發(fā)器。

4.查詢觸發(fā)器

#在已知數(shù)據(jù)庫內(nèi),查詢觸發(fā)器
SHOW TRIGGERS;
SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = '觸發(fā)器名'
#查詢所有的觸發(fā)器
SELECT * FROM information_schema.TRIGGERS(WHERE TRIGGER_SCHEMA = '數(shù)據(jù)庫名')

5.觸發(fā)器類型OLD和NEW的使用

  觸發(fā)器在DDL操作之前或者之后觸發(fā),總會對目標表做出一定的改動,有時我們需要知道目標表改變前后的值,這就用到了OLD和NEW的用法。

顧名思義,OLD就是改變之前的值,是UPDATE之前或者是要被DELETE或者已經(jīng)被DELETE的值。

  而NEW,則是UPDATE之后的新值,即將INSERT或者已經(jīng)INSERT的值。

  具體實例:

#創(chuàng)建customer表
CREATE TABLE `customer` 
(`CUST_ID` int(11) NOT NULL AUTO_INCREMENT,
`CUST_NAME` varchar(10) NOT NULL,
`CUST_TEL` varchar(10) DEFAULT NULL,
PRIMARY KEY (`CUST_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#向表中插入數(shù)據(jù)

#創(chuàng)建一個update觸發(fā)器
CREATE TRIGGER T2
AFTER 
UPDATE ON customer
FOR EACH ROW 
#old和new的使用方法:old.columnname/new.columnname(列名)
#將更新前后的值,賦值給兩個變量
SELECT OLD.CUST_ID,NEW.CUST_ID INTO @OLD_ID,@NEW_ID;

#觸發(fā)觸發(fā)器T2
UPDATE customer SET CUST_ID = '10000' WHERE CUST_NAME = 'AAA';

#查詢OLD和NEW
SELECT @OLD_ID,@NEW_ID;

到此這篇關(guān)于Mysql中的觸發(fā)器的文章就介紹到這了,更多相關(guān)mysql觸發(fā)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • linux二進制通用包安裝mysql5.6.20教程

    linux二進制通用包安裝mysql5.6.20教程

    這篇文章主要為大家詳細介紹了linux二進制通用包安裝mysql5.6.20的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • MySQL高可用MMM方案安裝部署分享

    MySQL高可用MMM方案安裝部署分享

    這篇文章主要介紹了MySQL高可用MMM方案安裝部署方法,需要的朋友可以參考下
    2014-02-02
  • MySQL如何解決幻讀問題

    MySQL如何解決幻讀問題

    在高并發(fā)數(shù)據(jù)庫系統(tǒng)中,需要保證事務與事務之間的隔離性,還有事務本身的一致性。所以需要解決幻讀問題,本文就來介紹一下,感興趣的可以了解一下
    2021-08-08
  • MySQL聯(lián)表查詢的簡單示例

    MySQL聯(lián)表查詢的簡單示例

    這篇文章主要給大家介紹了關(guān)于MySQL聯(lián)表查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • MySql 8.0.16-win64 安裝教程

    MySql 8.0.16-win64 安裝教程

    本文通過圖文并茂的形式給大家介紹了MySql 8.0.16-win64 安裝教程 ,需要的朋友可以參考下
    2019-06-06
  • MySQL表中添加數(shù)據(jù)的方法

    MySQL表中添加數(shù)據(jù)的方法

    這篇文章主要介紹了MySQL表中添加數(shù)據(jù)的方法,本文通過sql語句給大家詳細講解,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • MySQL用戶和數(shù)據(jù)權(quán)限管理詳解

    MySQL用戶和數(shù)據(jù)權(quán)限管理詳解

    這篇文章主要為大家詳細介紹了MySQL數(shù)據(jù)庫管理中的用戶和數(shù)據(jù)權(quán)限管理,文中的示例代碼講解詳細,對我們學習MySQL有一定幫助,需要的可以參考一下
    2022-08-08
  • MySql insert插入操作的3個小技巧分享

    MySql insert插入操作的3個小技巧分享

    這篇文章主要介紹了MySql insert插入操作的3個小技巧分享,本文講解了插入的數(shù)據(jù)來源自其他表、插入時排除(忽略)重復記錄、插入時遇到重復記錄做更新操作三個小技巧,需要的朋友可以參考下
    2015-03-03
  • 詳解Mysql中explain執(zhí)行計劃信息中字段

    詳解Mysql中explain執(zhí)行計劃信息中字段

    Extra是EXPLAIN輸出中另外一個很重要的列,該列顯示MySQL在查詢過程中的一些詳細信息,MySQL查詢優(yōu)化器執(zhí)行查詢的過程中對查詢計劃的重要補充信息,這篇文章主要介紹了Mysql中explain執(zhí)行計劃信息中字段詳解,需要的朋友可以參考下
    2023-08-08
  • MySql數(shù)據(jù)庫分布式存儲配置實操步驟

    MySql數(shù)據(jù)庫分布式存儲配置實操步驟

    這篇文章主要為大家介紹了MySql數(shù)據(jù)庫分布式存儲配置實操步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07

最新評論