首頁  >  文章  >  資料庫  >  Mysql中的觸發器的語法是什麼

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

WBOY
WBOY轉載
2023-05-28 23:17:351934瀏覽

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中的觸發器的語法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除