MySQL數(shù)據(jù)庫的觸發(fā)器的使用
使用觸發(fā)器
觸發(fā)器
發(fā)生什么事情之后或之前,會(huì)自動(dòng)執(zhí)行某條語句,這就是觸發(fā)器
創(chuàng)建觸發(fā)器
創(chuàng)建觸發(fā)器要給出的4條關(guān)鍵信息:
- 1.唯一的觸發(fā)器名
- 2.觸發(fā)器關(guān)聯(lián)的表
- 3.觸發(fā)器應(yīng)該響應(yīng)的活動(dòng)(DELETE,INSERT or UPDATE)
- 4.觸發(fā)器何時(shí)執(zhí)行(處理之前or之后)
CREATE TRIGGER語句創(chuàng)建觸發(fā)器
CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'Product added';
FOR EACH ROW 代碼對(duì)每個(gè)插入行執(zhí)行。
刪除觸發(fā)器
DROP TRIGGER newproduct;
使用觸發(fā)器
INSERT觸發(fā)器
INSERT觸發(fā)器在INSERT語句執(zhí)行之前或之后執(zhí)行。需要知道一下幾點(diǎn):
- 在INSERT觸發(fā)器的代碼內(nèi),可引用一個(gè)名為NEW 的虛擬表,訪問被插入的行。
- 在BEFORE INSERT觸發(fā)器中,NEW中 的值也可以被更新(允許更改被插入的值)
- 對(duì)于AUTO_INCREMENT列,NEW 在INSERT執(zhí)行之前包含0,在INSERT執(zhí)行之后包含新的自動(dòng)生成值。
CREATE TEIGGER neworder ?AFTER INSERT ON orders FOR EACH ROW SELECT NEW.order_num;
這個(gè)觸發(fā)器講了咋個(gè)事情呢?你不要覺得云里霧里的,我們知道這個(gè)INSERT是不會(huì)顯示什么信息出來的,所以我們加一個(gè) AFTER INSERT
就是你只要一插入,我們就讀出來這個(gè)訂單號(hào)顯示出來。就是這么一個(gè)功能,你不要想的太復(fù)雜了。所以你只能AFTER昂,BEFORE你能讀出來個(gè)啥。
DELETE觸發(fā)器
你也需要知道幾點(diǎn):
- 在DELETE觸發(fā)器的代碼中,你可以引用一個(gè)名為OLD的虛擬表,訪問被刪除的行。
- OLD中的值全都是只讀,不能更新。
例:演示使用OLD保存將要?jiǎng)h除的行到一個(gè)存檔表中。
CREATE TRIGGER deleteorder BEFORE DELETE ON oreders
FOR EACH ROW
BEGIN
INSERT INTO archive_orders(order_num,order_date,cust_id)
VALUES(OLD.order_num,OLD.order_date,OLD.cust_id);
END;UPDATE觸發(fā)器
注意幾點(diǎn):
- 在UPDATE觸發(fā)器代碼中,你可以引用一個(gè)OLD的虛擬表訪問以前的值,引用一個(gè)名為NEW的虛擬表訪問更新的值。
- 在BEFORE UPDATE觸發(fā)器中,NEW中的值可能也被更新
- OLD中的全是只讀的。
例:保證州名縮寫總是大寫
CREATE TRIGGER updatevendor BEFORE UPDATE ON vendors FOR EACH ROW SET NEW.vend_state = Upper(New.vend_state);
??這個(gè)例子我想說一下,它這個(gè)的話就意味著我們對(duì)這個(gè)NEW的改變是會(huì)影響到實(shí)際表中的。這點(diǎn)應(yīng)該注意到。
觸發(fā)器的進(jìn)一步介紹
MySQL觸發(fā)器是不支持CALL語句的,這是十分遺憾的,所需的存儲(chǔ)過程的代碼需要復(fù)制到觸發(fā)器內(nèi)。
到此這篇關(guān)于MySQL數(shù)據(jù)庫的觸發(fā)器的使用的文章就介紹到這了,更多相關(guān)MySQL觸發(fā)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何更改MySQL數(shù)據(jù)庫的編碼為utf8mb4
utf8mb4編碼是utf8編碼的超集,兼容utf8,并且能存儲(chǔ)4字節(jié)的表情字符。 這篇文章給大家介紹了更改MySQL數(shù)據(jù)庫的編碼為utf8mb4的相關(guān)知識(shí),感興趣的朋友一起看看吧2020-02-02
mysql導(dǎo)入csv的4種報(bào)錯(cuò)的解決方法
這篇文章主要介紹了mysql導(dǎo)入csv的4種報(bào)錯(cuò)的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

