中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql中的觸發器的語法是什么

發布時間:2022-06-23 13:39:20 來源:億速云 閱讀:171 作者:iii 欄目:開發技術

這篇文章主要介紹“Mysql中的觸發器的語法是什么”,在日常操作中,相信很多人在Mysql中的觸發器的語法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Mysql中的觸發器的語法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1.定義:

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

  • 在MySQL中,目前只有UPDATE,INSERT,和DELETE這三種操作,才會觸發觸發器,其他操作都不支持觸發器。這和Oracle中的觸發器有很大的區別,要注意區分。

  • 觸發器的每個表每次事件,都只允許一個觸發器。因此,每個表最多值允許有6個觸發器。如果一個表有兩個事件,INSERT和DELETE,那么就要分別創建一個觸發器。

  • 只有表才支持觸發器,視圖和臨時表不支持。

2.語法:

CREATE TRIGGER TRIGGER_NAME
BEFORE/AFTER 
UPDATE/INSERT/DELETE ON TABLE_NAME 
FOR EACH ROW
#觸發器主體
[BEGIN]
SQL操作
[END];
  • 創建觸發器:和創建存儲過程是一樣,用的都是CREATE 語句,但要注意,這里沒有 OR REPLACE。

  • TRIGGER_NAME:觸發器名稱。在MySQL中,要保證每個表中的觸發器是唯一的,每一個數據庫內的觸發器可以不唯一,這就說明了一個數據庫內的兩個表可以有相同的觸發器。這種行為在其他的數據庫內是不被允許的。但是為了格式上的規范,還是要盡可能的保證TRIGGER_NAME的唯一性。

  • BEFORE/AFTER:觸發器被觸發的時刻。你如果希望觸發器在觸發事件之前發生,就使用BEFORE,如果希望在觸發事件之后發生,就使用AFTER。

  • UPDATE/INSERT/DELETE:觸發事件,觸發條件。在MySQL中,只有這三種DDL操作支持觸發器,其他操作都不被允許。

  • FOR EACH ROW:受觸發事件影響的每一行都要激活觸發器的動作。這里指的是行級觸發,在MySQL里,FOE EACH ROW不可省略,不支持語句級觸發。

  • 觸發器主體:既可以是單獨的一條SQL語句,也可以是由BEGIN...END組成的復雜結構塊。

# 創建一個觸發器T1,在對表customer做插入操作時,就會觸發T1,之后會在日志表note中插入一條數據
CREATE TRIGGER T1
AFTER 
INSERT ON customer
FOR EACH ROW # 觸發器主體
INSERT INTO note(日期,目標,操作) VALUES(NOW(),'customer','insert');

3.刪除觸發器

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

#刪除觸發器T1
DROP TRIGGER IF EXISTS T1;

觸發器不能夠更新和修改,想要修改一個觸發器的內容,只能先將觸發器刪除,在創建一個新的觸發器。

4.查詢觸發器

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

5.觸發器類型OLD和NEW的使用

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

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

  而NEW,則是UPDATE之后的新值,即將INSERT或者已經INSERT的值。

Mysql中的觸發器的語法是什么

  具體實例:

#創建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;

#向表中插入數據

#創建一個update觸發器
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;

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

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

到此,關于“Mysql中的觸發器的語法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石阡县| 边坝县| 望谟县| 海阳市| 延长县| 琼结县| 若尔盖县| 灵川县| 本溪| 汕头市| 睢宁县| 读书| 青铜峡市| 五家渠市| 固阳县| 岑巩县| 闵行区| 阿图什市| 磐安县| 济宁市| 响水县| 石渠县| 达拉特旗| 九江市| 湛江市| 玉龙| 昌江| 闽侯县| 牡丹江市| 遂溪县| 宜黄县| 祥云县| 青神县| 大竹县| 余庆县| 靖江市| 兴和县| 彭州市| 长汀县| 江口县| 临猗县|