MySQL 觸發(fā)器的基礎(chǔ)操作(六)
1.為什么使用觸發(fā)器:
在MySQL數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)對(duì)象表是存儲(chǔ)和操作數(shù)據(jù)的邏輯結(jié)構(gòu),而數(shù)據(jù)庫(kù)對(duì)象觸發(fā)器則用來(lái)實(shí)現(xiàn)由一些表事件觸發(fā)的某個(gè)操作。在數(shù)據(jù)庫(kù)系統(tǒng)中,當(dāng)執(zhí)行表事件時(shí),則會(huì)激活觸發(fā)器,從而執(zhí)行器包含的操作。觸發(fā)器的操作包含創(chuàng)建、查看、刪除。
觸發(fā)器是數(shù)據(jù)庫(kù)對(duì)象之一,該對(duì)象與編程語(yǔ)言 中的函數(shù)非常類似,都需要聲明、執(zhí)行等。但是觸發(fā)器的執(zhí)行不是由程序調(diào)用,也不是由手工啟動(dòng),而是由事件來(lái)觸發(fā)、激活從而實(shí)現(xiàn)執(zhí)行。例如:在學(xué)生表中有學(xué)生名字、學(xué)生總數(shù)字段,每當(dāng)添加一條學(xué)生記錄時(shí),學(xué)生的總數(shù)就必須同時(shí)改變。對(duì)于這個(gè)實(shí)例可以創(chuàng)建一個(gè)觸發(fā)器,每次添加一條學(xué)生記錄時(shí),就執(zhí)行一次計(jì)算學(xué)生總數(shù)的操作,這樣就可保證每次添加一條學(xué)生記錄后,學(xué)生總數(shù)和學(xué)生記錄數(shù)一致。MySQL中在觸發(fā)如下DELETE、INSERT、UPDATE語(yǔ)句時(shí),就會(huì)自動(dòng)執(zhí)行所設(shè)置的操作,其他SQL語(yǔ)句則不會(huì)激活觸發(fā)器。之所以會(huì)經(jīng)常使用觸發(fā)器,是因?yàn)樵搶?duì)象能夠加強(qiáng)數(shù)據(jù)庫(kù)表中數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則等。
2.創(chuàng)建觸發(fā)器:
按照激活觸發(fā)器時(shí)所執(zhí)行的語(yǔ)句條目,可以將觸發(fā)器分為“一個(gè)執(zhí)行語(yǔ)句的觸發(fā)器”和“多個(gè)執(zhí)行語(yǔ)句的觸發(fā)器”
2.1 創(chuàng)建有一條執(zhí)行語(yǔ)句的觸發(fā)器:
語(yǔ)法形式為:
create trigger trigger_name before | after trigger_event on table_name for each row trigger_stmt
//trigger_name 參數(shù)表示索要?jiǎng)?chuàng)建的觸發(fā)器的名字,觸發(fā)器的名字不能重復(fù)。建議觸發(fā)器的命名為trigger_xxx或者tri_xxx;
before和after參數(shù)指定了觸發(fā)器執(zhí)行的時(shí)間,before:指在觸發(fā)器事件之前執(zhí)行觸發(fā)器語(yǔ)句,after:指在觸發(fā)器事件之后執(zhí)行觸發(fā)器語(yǔ)句;
trigger_event表示觸發(fā)事件,即觸發(fā)器執(zhí)行條件,包delete、insert、update語(yǔ)句;table_name觸發(fā)事件操作表的名字;
for each row表示任何一條記錄上的操作滿足觸發(fā)事件都會(huì)觸發(fā)該觸發(fā)器;trigger_stmt表示激活觸發(fā)器后被執(zhí)行的語(yǔ)句。
示例:
create trigger tri_diaryteim before insert on t_dept for each row insert into t_diary values(null,'t_dept',now()); //功能說(shuō)明:向部門表插入一條記錄之前向表t_diary插入當(dāng)前時(shí)間記錄。
2.2 創(chuàng)建包含多條執(zhí)行語(yǔ)句的觸發(fā)器:
語(yǔ)法形式如下:
create trigger trigger_name before|after trigger_event on table_name for each row begin trigger_stmt end
//比“只有一條執(zhí)行語(yǔ)句的觸發(fā)器”語(yǔ)法多了兩個(gè)關(guān)鍵字begin和end,在這兩個(gè)關(guān)鍵字之間是所要執(zhí)行的多個(gè)執(zhí)行語(yǔ)句的內(nèi)容,執(zhí)行語(yǔ)句之間用分號(hào)隔開(kāi)。
在mysql中,一般情況下“;”符號(hào)作為語(yǔ)句的結(jié)束符號(hào),可是在創(chuàng)建觸發(fā)器時(shí),需要用到“;”符號(hào)作為執(zhí)行語(yǔ)句的結(jié)束符號(hào)。
為了解決該問(wèn)題,可以使用關(guān)鍵字DELIMITER語(yǔ)句,例如:"DELIMITER$$",可以用來(lái)將結(jié)束符號(hào)設(shè)置為“$$”.
示例:
DELIMITER $$ create trigger tri_diarytime2 after insert on t_dept for each row begin insert into t_diary values(null,'t_dept',now()); insert into t_diary values(null,'t_dept',now()); end $$ DELIMITER;
3.查看觸發(fā)器:
3.1 通過(guò)SHOW TRIGGERS語(yǔ)句查看觸發(fā)器:
語(yǔ)法為:
show triggers \G
3.2 通過(guò)查看系統(tǒng)表triggers實(shí)現(xiàn)查看觸發(fā)器:
操作語(yǔ)句為;
use information_schema; select * from triggers \G select * from triggers where trigger_name='tri_diarytime2' \G //查看指定觸發(fā)器
3.刪除觸發(fā)器:
語(yǔ)法為:
drop trigger trigger_name;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- MySQL觸發(fā)器使用詳解
- mysql觸發(fā)器(Trigger)簡(jiǎn)明總結(jié)和使用實(shí)例
- mysql 觸發(fā)器實(shí)現(xiàn)兩個(gè)表的數(shù)據(jù)同步
- MYSQL設(shè)置觸發(fā)器權(quán)限問(wèn)題的解決方法
- MySQL筆記之觸發(fā)器的應(yīng)用
- MySQL 在觸發(fā)器里中斷記錄的插入或更新?
- 用mysql觸發(fā)器自動(dòng)更新memcache的實(shí)現(xiàn)代碼
- Mysql中的觸發(fā)器簡(jiǎn)單介紹及使用案例
- MySQL 5.0觸發(fā)器參考教程
- 如何測(cè)試mysql觸發(fā)器和存儲(chǔ)過(guò)程
相關(guān)文章
mysql 5.7.9 winx64在windows上安裝遇到的問(wèn)題
mysql5.7.9版本以上在windwos上安裝時(shí)會(huì)遇到無(wú)法啟動(dòng)但是沒(méi)有任何報(bào)錯(cuò)的問(wèn)題,怎么回事呢?接下來(lái)通過(guò)本文給大家介紹mysql 5.7.9 winx64在windows上安裝遇到的問(wèn)題及解決方法,需要的朋友可以參考下2016-10-10MySQL創(chuàng)建表時(shí)字符串的默認(rèn)值問(wèn)題
這篇文章主要介紹了MySQL創(chuàng)建表時(shí)字符串的默認(rèn)值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10mysql 5.7.21 解壓版通過(guò)歷史data目錄恢復(fù)數(shù)據(jù)的教程圖解
本文通過(guò)圖文并茂的形式給大家介紹了mysql 5.7.21 解壓版,通過(guò)歷史data目錄恢復(fù)數(shù)據(jù)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09MySQL的多版本并發(fā)控制MVCC的實(shí)現(xiàn)
MVCC就是多版本并發(fā)控制,本文主要介紹了MySQL的多版本并發(fā)控制MVCC的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12MySQL壓力測(cè)試方法 如何使用mysqlslap測(cè)試MySQL的壓力?
生產(chǎn)服務(wù)器用LANMP組合和用LAMP組合有段時(shí)間了,總體來(lái)說(shuō)都很穩(wěn)定。但出現(xiàn)過(guò)幾次因?yàn)镸YSQL并發(fā)太多而掛掉,一直想對(duì)MYSQL做壓力測(cè)試。剛看到一篇介紹MYSQL壓力測(cè)試的文章,確實(shí)不錯(cuò),先收藏先吧2016-05-05超詳細(xì)mysql left join,right join,inner join用法分析
比較詳細(xì)的mysql的幾種連接功能分析,只要你看完就能學(xué)會(huì)的好東西2008-08-08