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開發(fā)中存儲(chǔ)函數(shù)與觸發(fā)器使用示例
這篇文章主要為大家詳細(xì)介紹了MySQL中存儲(chǔ)函數(shù)的創(chuàng)建與觸發(fā)器的設(shè)置,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下2023-01-01MySQL數(shù)據(jù)庫的實(shí)時(shí)備份知識(shí)點(diǎn)詳解
本篇文章給大家分享了關(guān)于MySQL數(shù)據(jù)庫的實(shí)時(shí)備份知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考下。2018-08-08Mysql怎么存儲(chǔ)json格式數(shù)據(jù)詳解
在開發(fā)中遇到存取html值的情況,并且要根據(jù)id進(jìn)行實(shí)時(shí)返回,在做的時(shí)候想到了mysql的json類型存儲(chǔ),下面這篇文章主要給大家介紹了關(guān)于Mysql怎么存儲(chǔ)json格式數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-06-06MySQL8.0.24版本Release Note的一些改進(jìn)點(diǎn)
這篇文章主要介紹了MySQL8.0.24版本Release Note的一些改進(jìn)點(diǎn),幫助大家更好的對(duì)新版本的MySQL進(jìn)行測試使用,感興趣的朋友可以了解下2021-04-04詳解MySQL中的數(shù)據(jù)類型和schema優(yōu)化
這篇文章主要介紹了MySQL中的數(shù)據(jù)類型和schema優(yōu)化的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)MySQL的知識(shí),感興趣的朋友可以了解下2020-10-10