您好,登錄后才能下訂單哦!
這篇文章主要介紹“Mysql中的觸發器的語法是什么”,在日常操作中,相信很多人在Mysql中的觸發器的語法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Mysql中的觸發器的語法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
觸發器和存儲過程相似,都是嵌入到 MySQL 中的一段程序。觸發器是由事件來觸發某個操作。當數據庫執行這些事件時,就會激活觸發器來執行相應的操作。這些事件稱為觸發條件,在MySQL中,有UPDATE,INSERT,和DELETE。
在MySQL中,目前只有UPDATE,INSERT,和DELETE這三種操作,才會觸發觸發器,其他操作都不支持觸發器。這和Oracle中的觸發器有很大的區別,要注意區分。
觸發器的每個表每次事件,都只允許一個觸發器。因此,每個表最多值允許有6個觸發器。如果一個表有兩個事件,INSERT和DELETE,那么就要分別創建一個觸發器。
只有表才支持觸發器,視圖和臨時表不支持。
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');
和刪除表和存儲過程類似,都是使用DROP語句來刪除觸發器。
#刪除觸發器T1 DROP TRIGGER IF EXISTS T1;
觸發器不能夠更新和修改,想要修改一個觸發器的內容,只能先將觸發器刪除,在創建一個新的觸發器。
#在已知數據庫內,查詢觸發器 SHOW TRIGGERS; SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = '觸發器名' #查詢所有的觸發器 SELECT * FROM information_schema.TRIGGERS(WHERE TRIGGER_SCHEMA = '數據庫名')
觸發器在DDL操作之前或者之后觸發,總會對目標表做出一定的改動,有時我們需要知道目標表改變前后的值,這就用到了OLD和NEW的用法。
顧名思義,OLD就是改變之前的值,是UPDATE之前或者是要被DELETE或者已經被DELETE的值。
而NEW,則是UPDATE之后的新值,即將INSERT或者已經INSERT的值。
具體實例:
#創建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中的觸發器的語法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。