濮阳杆衣贸易有限公司

主頁 > 知識庫 > 詳解MySQL數據庫之觸發(fā)器

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

熱門標簽:石家莊400電話辦理公司 新鄉(xiāng)智能外呼系統(tǒng)好處 臨沂做地圖標注 許昌外呼增值業(yè)務線路 咸陽防封電銷卡 宜賓全自動外呼系統(tǒng)廠家 申請400電話電話價格 地圖標注客戶付款 廣東400企業(yè)電話申請流程

1 引言

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

2 觸發(fā)器簡介

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

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

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

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

  語法結構如下:

CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW trigger_stmt

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

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

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

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

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

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

語法結構如下:

CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW

 BEGIN

  語句執(zhí)行列表

 END

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

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

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表總記錄數的記錄。

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表總記錄數的記錄。

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表中插入一條數據(插入前3個表沒有任何記錄):

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

  插入后,查看三個表中數據:

  tb_student表:

  tb_before_trigger表:

  tb_after_trigger表:

  可以看到,在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ā)器

 ?。?)show triggers語句

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

show triggers;

  輸出結果:

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

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

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

  輸出結果:

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

5 刪除觸發(fā)器

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

DROP TRIGGER [schema_name] trigger_name

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

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

drop trigger before_trigger;

6 總結

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

作者:奧辰

Github:https://github.com/ChenHuabin321

以上就是詳解MySQL數據庫之觸發(fā)器的詳細內容,更多關于MySQL 觸發(fā)器的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Mysql觸發(fā)器在PHP項目中用來做信息備份、恢復和清空
  • 一篇文章帶你深入了解Mysql觸發(fā)器
  • MySQL觸發(fā)器的使用
  • mysql 觸發(fā)器語法與應用示例
  • MySql視圖觸發(fā)器存儲過程詳解
  • mysql觸發(fā)器實時檢測一條語句進行備份刪除思路詳解

標簽:鎮(zhèn)江 阜新 鷹潭 日照 臺灣 合肥 貴州 北京

巨人網絡通訊聲明:本文標題《詳解MySQL數據庫之觸發(fā)器》,本文關鍵詞  詳解,MySQL,數據庫,之,觸發(fā)器,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解MySQL數據庫之觸發(fā)器》相關的同類信息!
  • 本頁收集關于詳解MySQL數據庫之觸發(fā)器的相關信息資訊供網民參考!
  • 推薦文章
    铁力市| 泽库县| 志丹县| 南雄市| 隆安县| 西盟| 绵竹市| 邵阳县| 灵川县| 郓城县| 建昌县| 六枝特区| 增城市| 福建省| 洛阳市| 绥德县| 侯马市| 湛江市| SHOW| 新泰市| 永丰县| 乌拉特前旗| 突泉县| 永济市| 琼中| 东海县| 安顺市| 永福县| 乌鲁木齐县| 东乡| 新竹市| 高邑县| 元谋县| 衡阳市| 卢氏县| 汶上县| 锦州市| 岚皋县| 竹山县| 昆山市| 朝阳县|