欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2020年09月30日 08:43:14   作者:奧辰  
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)之觸發(fā)器的相關(guān)資料,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下

1 引言

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

2 觸發(fā)器簡(jiǎn)介

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

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

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

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

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

CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW trigger_stmt

  trigger_name:用戶(hù)自定義的觸發(fā)器名稱(chēng);

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

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

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

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

 ?。?)創(chuàng)建有多個(gè)執(zhí)行語(yǔ)句的觸發(fā)器

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

CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW

 BEGIN

  語(yǔ)句執(zhí)行列表

 END

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

  為演示觸發(fā)器操作,我們先創(chuàng)建一下三個(gè)數(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)建一個(gè)名為before_trigger的觸發(fā)器,該觸發(fā)器會(huì)在每次對(duì)表tb_student執(zhí)行insert操作前觸發(fā),觸發(fā)時(shí)會(huì)往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)建一個(gè)名為after_trigger的觸發(fā)器,該觸發(fā)器會(huì)在每次對(duì)表tb_student執(zhí)行insert操作前觸發(fā),觸發(fā)時(shí)會(huì)向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 ;

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

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

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

  tb_student表:

  tb_before_trigger表:

  tb_after_trigger表:

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

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

4 查看觸發(fā)器

 ?。?)show triggers語(yǔ)句

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

show triggers;

  輸出結(jié)果:

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

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

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

  輸出結(jié)果:

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

5 刪除觸發(fā)器

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

DROP TRIGGER [schema_name] trigger_name

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

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

drop trigger before_trigger;

6 總結(jié)

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

作者:奧辰

Github:https://github.com/ChenHuabin321

以上就是詳解MySQL數(shù)據(jù)庫(kù)之觸發(fā)器的詳細(xì)內(nèi)容,更多關(guān)于MySQL 觸發(fā)器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mysql千萬(wàn)級(jí)數(shù)據(jù)量根據(jù)索引優(yōu)化查詢(xún)速度的實(shí)現(xiàn)

    mysql千萬(wàn)級(jí)數(shù)據(jù)量根據(jù)索引優(yōu)化查詢(xún)速度的實(shí)現(xiàn)

    這篇文章主要介紹了mysql千萬(wàn)級(jí)數(shù)據(jù)量根據(jù)索引優(yōu)化查詢(xún)速度的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 簡(jiǎn)述mysql監(jiān)控組復(fù)制

    簡(jiǎn)述mysql監(jiān)控組復(fù)制

    這篇文章主要介紹了mysql監(jiān)控組復(fù)制的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)mysql,感興趣的朋友可以了解下
    2020-08-08
  • MySQL8.0與MySQL5.7的區(qū)別詳解

    MySQL8.0與MySQL5.7的區(qū)別詳解

    MySQL8.0是2018年4月20日發(fā)布的全球最受歡迎的開(kāi)源數(shù)據(jù)庫(kù)的一個(gè)非常令人興奮的新版本,下面這篇文章主要給大家介紹了關(guān)于MySQL8.0與MySQL5.7區(qū)別的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • MySQL啟動(dòng)錯(cuò)誤解決方法

    MySQL啟動(dòng)錯(cuò)誤解決方法

    本文給大家分享的是mysql啟動(dòng)時(shí)報(bào)錯(cuò)的排查過(guò)程及方法,非常實(shí)用,有相同問(wèn)題的小伙伴可以來(lái)參考下
    2016-12-12
  • B-樹(shù)的插入過(guò)程介紹

    B-樹(shù)的插入過(guò)程介紹

    今天小編就為大家分享一篇關(guān)于B-樹(shù)的插入過(guò)程介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • mysql獲取版本的幾種方法實(shí)現(xiàn)

    mysql獲取版本的幾種方法實(shí)現(xiàn)

    本文主要介紹了mysql獲取版本的方法實(shí)現(xiàn),主要介紹了三種方法,包含SELECT VERSION(),SHOW VARIABLES和命令行,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • Win10安裝MySQL8壓縮包版的教程

    Win10安裝MySQL8壓縮包版的教程

    這篇文章主要介紹了Win10安裝MySQL8壓縮包版的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • mysql多表連接查詢(xún)實(shí)例講解

    mysql多表連接查詢(xún)實(shí)例講解

    本篇文章中給大家通過(guò)實(shí)例代碼講述了mysql多表連接查詢(xún)的方法,有需要的朋友們可以參考學(xué)習(xí)下。
    2018-10-10
  • SQL中的distinct的使用方法

    SQL中的distinct的使用方法

    這篇文章主要介紹SQL中的distinct的使用方法,distinct用來(lái)查詢(xún)不重復(fù)記錄的條數(shù),即用distinct來(lái)返回不重復(fù)字段的條數(shù),文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • MySQL 按指定字段自定義列表排序的實(shí)現(xiàn)

    MySQL 按指定字段自定義列表排序的實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇MySQL 按指定字段自定義列表排序的實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03

最新評(píng)論