好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 詳解MySQL數據庫之觸發器

詳解MySQL數據庫之觸發器

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

1 引言

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

2 觸發器簡介

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

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

3創建觸發器

  (1)創建只有一條執行語句的觸發器

  語法結構如下:

CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW trigger_stmt

  trigger_name:用戶自定義的觸發器名稱;

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

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

  table_name:觸發器建立在哪個表上;

  trigger_stmt:觸發器執行語句。

  (2)創建有多個執行語句的觸發器

語法結構如下:

CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW

 BEGIN

  語句執行列表

 END

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

  為演示觸發器操作,我們先創建一下三個數據表:

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:創建一個名為before_trigger的觸發器,該觸發器會在每次對表tb_student執行insert操作前觸發,觸發時會往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:創建一個名為after_trigger的觸發器,該觸發器會在每次對表tb_student執行insert操作前觸發,觸發時會向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中創建的觸發器,往tb_student表中插入一條數據(插入前3個表沒有任何記錄):

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

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

  tb_student表:

  tb_before_trigger表:

  tb_after_trigger表:

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

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

4 查看觸發器

  (1)show triggers語句

  通過show triggers語句可以查看示例1和示例2中創建的觸發器:

show triggers;

  輸出結果:

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

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

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

  輸出結果:

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

5 刪除觸發器

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

DROP TRIGGER [schema_name] trigger_name

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

  示例3:刪除示例1中創建的觸發器before_trigger

drop trigger before_trigger;

6 總結

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

作者:奧辰

Github:https://github.com/ChenHuabin321

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

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

標簽:鎮江 阜新 鷹潭 日照 臺灣 合肥 貴州 北京

巨人網絡通訊聲明:本文標題《詳解MySQL數據庫之觸發器》,本文關鍵詞  詳解,MySQL,數據庫,之,觸發器,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解MySQL數據庫之觸發器》相關的同類信息!
  • 本頁收集關于詳解MySQL數據庫之觸發器的相關信息資訊供網民參考!
  • 推薦文章