国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

詳解MySQL數(shù)據(jù)庫之觸發(fā)器

瀏覽:42日期:2023-10-10 18:26:55
1 引言

本文是對MySQL中觸發(fā)器的總結(jié),從觸發(fā)器概念出發(fā),結(jié)合實例對創(chuàng)建觸發(fā)器、使用觸發(fā)器、刪除觸發(fā)器進行介紹。

2 觸發(fā)器簡介

MySQL觸發(fā)器和存儲過程一樣,都是嵌入到MySQL的一段程序。觸發(fā)器是由事件來觸發(fā)某個操作,這些事件包括INSERT、UPDATE、DELETE。如果定義了觸發(fā)器,當(dāng)數(shù)據(jù)庫執(zhí)行這些語句的時候就會激活觸發(fā)器執(zhí)行相應(yīng)的操作,觸發(fā)程序是與表有關(guān)的命令數(shù)據(jù)庫對象,當(dāng)表上出現(xiàn)特定事件,將激活該對象。

觸發(fā)器是一個特殊的存儲過程,不同的是,執(zhí)行存儲過程要使用call語句來調(diào)用,而觸發(fā)器的執(zhí)行不需要用call來調(diào)用,也不需要手工啟動,只要當(dāng)一個預(yù)定義的事件發(fā)生,觸發(fā)器就會被MySQL自動調(diào)用。觸發(fā)器可以查詢其他表,而且可以包含復(fù)雜的SQL語句。

3創(chuàng)建觸發(fā)器

(1)創(chuàng)建只有一條執(zhí)行語句的觸發(fā)器

語法結(jié)構(gòu)如下:

CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW trigger_stmt

trigger_name:用戶自定義的觸發(fā)器名稱;

trigger_time:標(biāo)識觸發(fā)事件,可以指定為before(時間發(fā)生前執(zhí)行)或after(事件發(fā)生后執(zhí)行);

trigger_event:標(biāo)識觸發(fā)事件,包括INSERT、UPDATE、DELETE;

table_name:觸發(fā)器建立在哪個表上;

trigger_stmt:觸發(fā)器執(zhí)行語句。

(2)創(chuàng)建有多個執(zhí)行語句的觸發(fā)器

語法結(jié)構(gòu)如下:

CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW BEGIN 語句執(zhí)行列表 END

當(dāng)觸發(fā)器有至少一條的執(zhí)行語句時,多條執(zhí)行語句需要用BEGIN和END包裹,分別表示整個代碼塊的開始和結(jié)束。

為演示觸發(fā)器操作,我們先創(chuàng)建一下三個數(shù)據(jù)表:

create table tb_student( id int PRIMARY key auto_increment, name varchar(10));create table tb_before_trigger( id int PRIMARY key auto_increment, num int , time_now datetime NULL DEFAULT CURRENT_TIMESTAMP);create table tb_after_trigger( id int PRIMARY key auto_increment, num int , time_now datetime NULL DEFAULT CURRENT_TIMESTAMP);

示例1:創(chuàng)建一個名為before_trigger的觸發(fā)器,該觸發(fā)器會在每次對表tb_student執(zhí)行insert操作前觸發(fā),觸發(fā)時會往before_trigger表插入一條包含tb_student表總記錄數(shù)的記錄。

delimiter //create trigger before_trigger before insert on tb_student for each row begin insert into tb_before_trigger (num) select count(*) from tb_student; end //delimiter ;

示例2:創(chuàng)建一個名為after_trigger的觸發(fā)器,該觸發(fā)器會在每次對表tb_student執(zhí)行insert操作前觸發(fā),觸發(fā)時會向before_trigger表插入一條包含tb_student表總記錄數(shù)的記錄。

delimiter //create trigger after_trigger after insert on tb_student for each row begin insert into tb_after_trigger (num) select count(*) from tb_student; end //delimiter ;

來測試一下示例1和示例2中創(chuàng)建的觸發(fā)器,往tb_student表中插入一條數(shù)據(jù)(插入前3個表沒有任何記錄):

insert into tb_student (name) values(’zhangsan’);

插入后,查看三個表中數(shù)據(jù):

tb_student表:

詳解MySQL數(shù)據(jù)庫之觸發(fā)器

tb_before_trigger表:

詳解MySQL數(shù)據(jù)庫之觸發(fā)器

tb_after_trigger表:

詳解MySQL數(shù)據(jù)庫之觸發(fā)器

可以看到,在tb_student表執(zhí)行insert操作后,另外兩個表也分別更新了記錄,tb_before_trigger表num值為0,證明在tb_student執(zhí)行insert操作前插入的;tb_after_trigger表num值為1,證明在tb_student執(zhí)行insert操作后插入的——這就是before與after的區(qū)別。

對于其他條件觸發(fā)器,使用方法與示例1和示例2類似,本文不在演示。

4 查看觸發(fā)器

(1)show triggers語句

通過show triggers語句可以查看示例1和示例2中創(chuàng)建的觸發(fā)器:

show triggers;

輸出結(jié)果:

詳解MySQL數(shù)據(jù)庫之觸發(fā)器

(2)在triggers表中查看觸發(fā)器

在information_schema數(shù)據(jù)庫的triggers表中存放在MySQL數(shù)據(jù)庫中的所有觸發(fā)器,可以通過查詢語句進行查看:

select * from information_schema.triggers where trigger_name = ’before_trigger’ ;

輸出結(jié)果:

詳解MySQL數(shù)據(jù)庫之觸發(fā)器

當(dāng)不指定查詢條件時,即是指查看所有觸發(fā)器信息。

5 刪除觸發(fā)器

使用DROP TRIGGER語句可以刪除觸發(fā)器,基本語法結(jié)構(gòu)如下:

DROP TRIGGER [schema_name] trigger_name

其中,schema_name表示數(shù)據(jù)庫名稱,是可選參數(shù),如果省略則表示從當(dāng)前數(shù)據(jù)庫中刪除觸發(fā)器。

示例3:刪除示例1中創(chuàng)建的觸發(fā)器before_trigger

drop trigger before_trigger;6 總結(jié)

在某些時候,觸發(fā)器可以起到錦上添花的作用,但是,觸發(fā)器的效率并不高,所以還是盡量少用。

作者:奧辰

Github:https://github.com/ChenHuabin321

以上就是詳解MySQL數(shù)據(jù)庫之觸發(fā)器的詳細(xì)內(nèi)容,更多關(guān)于MySQL 觸發(fā)器的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 欧美成人性毛片免费版 | 亚洲国产区 | 亚洲欧美一区二区三区久久 | 成人精品一级毛片 | 亚洲国产日韩a在线亚洲 | www成人免费视频 | 欧美高清在线视频在线99精品 | 亚洲字幕波多野结衣作品 | 免费一级夫妻a | 日韩高清一区二区 | 美女视频网站永久免费观看软件 | 久久夜色精品国产 | 久久国产精彩视频 | 日本不卡免费高清视频 | 国产日产欧美精品一区二区三区 | 玖玖精品在线 | 一本色道久久综合网 | a成人在线 | 兔子先生节目在线观看免费 | 精品国产_亚洲人成在线高清 | 欧美成人做爰网站 | 久久人视频 | 久久er热视频在这里精品 | 在线看片中文字幕 | 一区二区三区在线免费视频 | 欧美一区二区三区不卡免费观看 | 精品玖玖玖视频在线观看 | 成年人免费在线观看网站 | 成人夜色香网站在线观看 | swag国产精品一区二区 | 521av香蕉 | 久久黄色精品视频 | 欧美日韩一区二区三 | 久久久久久久久一级毛片 | 美女视频黄色免费 | 久久久国产99久久国产首页 | 欧美成人黄色网 | 欧美大片毛片大片 | 亚洲精品久久精品h成人 | 欧美多人三级级视频播放 | 亚州一级毛片 |