最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1 引言

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

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ā)器

 ?。?)創(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í)行語句。

 ?。?)創(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表:

  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;

  輸出結(jié)果:

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

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

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

  輸出結(jié)果:

  當(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)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL高可用解決方案MMM(mysql多主復(fù)制管理器)

    MySQL高可用解決方案MMM(mysql多主復(fù)制管理器)

    MySQL本身沒有提供replication failover的解決方案,通過MMM方案能實(shí)現(xiàn)服務(wù)器的故障轉(zhuǎn)移,從而實(shí)現(xiàn)mysql的高可用。MMM不僅能提供浮動IP的功能,如果當(dāng)前的主服務(wù)器掛掉后,會將你后端的從服務(wù)器自動轉(zhuǎn)向新的主服務(wù)器進(jìn)行同步復(fù)制,不用手工更改同步配置
    2017-09-09
  • MySQL表的增刪改查基礎(chǔ)教程

    MySQL表的增刪改查基礎(chǔ)教程

    這篇文章主要給大家介紹了關(guān)于MySQL表的增刪改查的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 關(guān)于SqlServer中datediff用法

    關(guān)于SqlServer中datediff用法

    datediff是SQL SERVER里面的用法,ORACLE沒有,主要作用是返回兩個日期之間的時間間隔,本文通過實(shí)例代碼給大家詳細(xì)講解,對datediff用法感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • mysql 查看當(dāng)前使用的配置文件my.cnf的方法(推薦)

    mysql 查看當(dāng)前使用的配置文件my.cnf的方法(推薦)

    下面小編就為大家?guī)硪黄猰ysql 查看當(dāng)前使用的配置文件my.cnf的方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • MySQL過濾重復(fù)數(shù)據(jù)的兩種方法示例

    MySQL過濾重復(fù)數(shù)據(jù)的兩種方法示例

    數(shù)據(jù)庫生成環(huán)境中經(jīng)常會遇到表中有重復(fù)的數(shù)據(jù),或者進(jìn)行關(guān)聯(lián)過程中產(chǎn)生重復(fù)數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL過濾重復(fù)數(shù)據(jù)的兩種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 通過存儲過程動態(tài)創(chuàng)建MySQL對象的流程步驟

    通過存儲過程動態(tài)創(chuàng)建MySQL對象的流程步驟

    在當(dāng)今數(shù)據(jù)驅(qū)動的世界中,高效的數(shù)據(jù)庫管理至關(guān)重要,本文將展示如何通過存儲過程自動化地創(chuàng)建各種?MySQL?數(shù)據(jù)庫對象,通過這些方法,我們可以快速響應(yīng)業(yè)務(wù)需求,提高數(shù)據(jù)庫管理的靈活性和效率,需要的朋友可以參考下
    2024-10-10
  • MySQL聚簇索引、非聚簇索引、覆蓋索引詳解

    MySQL聚簇索引、非聚簇索引、覆蓋索引詳解

    這篇文章詳細(xì)介紹了聚簇索引、非聚簇索引和覆蓋索引的概念,并通過圖示和實(shí)例說明了索引查找的過程和回表查詢的概念,同時,文章也提到了覆蓋索引的優(yōu)點(diǎn)和弊端,并給出了適用場景
    2024-12-12
  • MySQL修改數(shù)據(jù)表存儲引擎的3種方法介紹

    MySQL修改數(shù)據(jù)表存儲引擎的3種方法介紹

    這篇文章主要介紹了MySQL修改數(shù)據(jù)表存儲引擎的3種方法介紹,分別是直接修改、導(dǎo)出導(dǎo)入、創(chuàng)建插入3種方法,需要的朋友可以參考下
    2014-07-07
  • DQL命令查詢數(shù)據(jù)實(shí)現(xiàn)方法詳解

    DQL命令查詢數(shù)據(jù)實(shí)現(xiàn)方法詳解

    DQL(Data?Query?Language,數(shù)據(jù)查詢語言),查詢數(shù)據(jù)庫數(shù)據(jù),如SELECT語句,簡單的單表查詢或多表的復(fù)雜查詢和嵌套查詢,數(shù)據(jù)庫語言中最核心、最重要的語句,使用頻率最高的語句
    2022-09-09
  • Mysql Workbench查詢mysql數(shù)據(jù)庫方法

    Mysql Workbench查詢mysql數(shù)據(jù)庫方法

    在本篇文章里小編給大家分享了個關(guān)于Mysql Workbench查詢mysql數(shù)據(jù)庫方法和步驟,有需要的朋友們學(xué)習(xí)下。
    2019-03-03

最新評論

商城县| 定远县| 巴林左旗| 宁明县| 班戈县| 广南县| 韶关市| 平远县| 涡阳县| 洪洞县| 广元市| 巢湖市| 和林格尔县| 泗水县| 金平| 营山县| 自贡市| 科尔| 武义县| 疏勒县| 成安县| 静安区| 鞍山市| 延津县| 永春县| 澄城县| 府谷县| 黔西县| 吴川市| 金山区| 蕲春县| 塘沽区| 湄潭县| 洛隆县| 永吉县| 阿克| 吉木乃县| 涟水县| 临漳县| 青海省| 乌兰县|