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

Mysql中的觸發(fā)器定義及語(yǔ)法介紹

 更新時(shí)間:2022年06月23日 11:34:02   作者:ISPEAKER  
MySQL?的觸發(fā)器和存儲(chǔ)過(guò)程一樣,都是嵌入到?MySQL?中的一段程序,是?MySQL?中管理數(shù)據(jù)的有力工具,本文給大家詳細(xì)介紹mysql觸發(fā)器的定義語(yǔ)法知識(shí),感興趣的朋友一起看看吧

1.定義:

  觸發(fā)器和存儲(chǔ)過(guò)程相似,都是嵌入到 MySQL 中的一段程序。觸發(fā)器是由事件來(lái)觸發(fā)某個(gè)操作。當(dāng)數(shù)據(jù)庫(kù)執(zhí)行這些事件時(shí),就會(huì)激活觸發(fā)器來(lái)執(zhí)行相應(yīng)的操作。這些事件稱為觸發(fā)條件,在MySQL中,有UPDATE,INSERT,和DELETE。

  • 在MySQL中,目前只有UPDATE,INSERT,和DELETE這三種操作,才會(huì)觸發(fā)觸發(fā)器,其他操作都不支持觸發(fā)器。這和Oracle中的觸發(fā)器有很大的區(qū)別,要注意區(qū)分。
  • 觸發(fā)器的每個(gè)表每次事件,都只允許一個(gè)觸發(fā)器。因此,每個(gè)表最多值允許有6個(gè)觸發(fā)器。如果一個(gè)表有兩個(gè)事件,INSERT和DELETE,那么就要分別創(chuàng)建一個(gè)觸發(fā)器。
  • 只有表才支持觸發(fā)器,視圖和臨時(shí)表不支持。

2.語(yǔ)法:

CREATE TRIGGER TRIGGER_NAME
BEFORE/AFTER 
UPDATE/INSERT/DELETE ON TABLE_NAME 
FOR EACH ROW
#觸發(fā)器主體
[BEGIN]
SQL操作
[END];
  • 創(chuàng)建觸發(fā)器:和創(chuàng)建存儲(chǔ)過(guò)程是一樣,用的都是CREATE 語(yǔ)句,但要注意,這里沒(méi)有 OR REPLACE。
  • TRIGGER_NAME:觸發(fā)器名稱。在MySQL中,要保證每個(gè)表中的觸發(fā)器是唯一的,每一個(gè)數(shù)據(jù)庫(kù)內(nèi)的觸發(fā)器可以不唯一,這就說(shuō)明了一個(gè)數(shù)據(jù)庫(kù)內(nèi)的兩個(gè)表可以有相同的觸發(fā)器。這種行為在其他的數(shù)據(jù)庫(kù)內(nèi)是不被允許的。但是為了格式上的規(guī)范,還是要盡可能的保證TRIGGER_NAME的唯一性。
  • BEFORE/AFTER:觸發(fā)器被觸發(fā)的時(shí)刻。你如果希望觸發(fā)器在觸發(fā)事件之前發(fā)生,就使用BEFORE,如果希望在觸發(fā)事件之后發(fā)生,就使用AFTER。
  • UPDATE/INSERT/DELETE:觸發(fā)事件,觸發(fā)條件。在MySQL中,只有這三種DDL操作支持觸發(fā)器,其他操作都不被允許。
  • FOR EACH ROW:受觸發(fā)事件影響的每一行都要激活觸發(fā)器的動(dòng)作。這里指的是行級(jí)觸發(fā),在MySQL里,F(xiàn)OE EACH ROW不可省略,不支持語(yǔ)句級(jí)觸發(fā)。
  • 觸發(fā)器主體:既可以是單獨(dú)的一條SQL語(yǔ)句,也可以是由BEGIN...END組成的復(fù)雜結(jié)構(gòu)塊。
# 創(chuàng)建一個(gè)觸發(fā)器T1,在對(duì)表customer做插入操作時(shí),就會(huì)觸發(fā)T1,之后會(huì)在日志表note中插入一條數(shù)據(jù)
CREATE TRIGGER T1
AFTER 
INSERT ON customer
FOR EACH ROW # 觸發(fā)器主體
INSERT INTO note(日期,目標(biāo),操作) VALUES(NOW(),'customer','insert');

3.刪除觸發(fā)器

  和刪除表和存儲(chǔ)過(guò)程類似,都是使用DROP語(yǔ)句來(lái)刪除觸發(fā)器。

#刪除觸發(fā)器T1
DROP TRIGGER IF EXISTS T1;

觸發(fā)器不能夠更新和修改,想要修改一個(gè)觸發(fā)器的內(nèi)容,只能先將觸發(fā)器刪除,在創(chuàng)建一個(gè)新的觸發(fā)器。

4.查詢觸發(fā)器

#在已知數(shù)據(jù)庫(kù)內(nèi),查詢觸發(fā)器
SHOW TRIGGERS;
SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = '觸發(fā)器名'
#查詢所有的觸發(fā)器
SELECT * FROM information_schema.TRIGGERS(WHERE TRIGGER_SCHEMA = '數(shù)據(jù)庫(kù)名')

5.觸發(fā)器類型OLD和NEW的使用

  觸發(fā)器在DDL操作之前或者之后觸發(fā),總會(huì)對(duì)目標(biāo)表做出一定的改動(dòng),有時(shí)我們需要知道目標(biāo)表改變前后的值,這就用到了OLD和NEW的用法。

顧名思義,OLD就是改變之前的值,是UPDATE之前或者是要被DELETE或者已經(jīng)被DELETE的值。

  而NEW,則是UPDATE之后的新值,即將INSERT或者已經(jīng)INSERT的值。

  具體實(shí)例:

#創(chuàng)建customer表
CREATE TABLE `customer` 
(`CUST_ID` int(11) NOT NULL AUTO_INCREMENT,
`CUST_NAME` varchar(10) NOT NULL,
`CUST_TEL` varchar(10) DEFAULT NULL,
PRIMARY KEY (`CUST_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#向表中插入數(shù)據(jù)

#創(chuàng)建一個(gè)update觸發(fā)器
CREATE TRIGGER T2
AFTER 
UPDATE ON customer
FOR EACH ROW 
#old和new的使用方法:old.columnname/new.columnname(列名)
#將更新前后的值,賦值給兩個(gè)變量
SELECT OLD.CUST_ID,NEW.CUST_ID INTO @OLD_ID,@NEW_ID;

#觸發(fā)觸發(fā)器T2
UPDATE customer SET CUST_ID = '10000' WHERE CUST_NAME = 'AAA';

#查詢OLD和NEW
SELECT @OLD_ID,@NEW_ID;

到此這篇關(guān)于Mysql中的觸發(fā)器的文章就介紹到這了,更多相關(guān)mysql觸發(fā)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql 登錄時(shí)閃退的問(wèn)題解決方法

    mysql 登錄時(shí)閃退的問(wèn)題解決方法

    這篇文章主要介紹了mysql 登錄時(shí)閃退的問(wèn)題解決方法的相關(guān)資料,mysql 出現(xiàn)閃退問(wèn)題,很是棘手在做項(xiàng)目的時(shí)候,這里對(duì)解決這樣的問(wèn)題提供了解決方案,需要的朋友可以參考下
    2016-11-11
  • MYSQL導(dǎo)入導(dǎo)出命令詳解

    MYSQL導(dǎo)入導(dǎo)出命令詳解

    網(wǎng)上看了一些總結(jié)出來(lái)的資料,不知道對(duì)大家有沒(méi)有用的,有用的話也就不枉費(fèi)我一按按鈕的一片苦心了
    2007-09-09
  • 兩種mysql對(duì)自增id重新從1排序的方法

    兩種mysql對(duì)自增id重新從1排序的方法

    本文介紹了兩種mysql對(duì)自增id重新從1排序的方法,簡(jiǎn)少了對(duì)于某個(gè)項(xiàng)目初始化數(shù)據(jù)的工作量,感興趣的朋友可以參考下
    2015-07-07
  • 解決 phpmyadmin #2002 無(wú)法登錄 MySQL 服務(wù)器

    解決 phpmyadmin #2002 無(wú)法登錄 MySQL 服務(wù)器

    我以前使用phpmyadmin都是很正常的,從來(lái)沒(méi)有出現(xiàn)過(guò)問(wèn)題。但是今天出現(xiàn)了提示#2002無(wú)法登陸到MYSQL服務(wù)器
    2012-04-04
  • Mysql聚合函數(shù)的使用介紹

    Mysql聚合函數(shù)的使用介紹

    今天的章節(jié)我們將要來(lái)學(xué)習(xí)一下 “聚合函數(shù)” ;首先我們需要學(xué)習(xí)聚合函數(shù)對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,比如說(shuō)求最大值、最小值、平均值之類的場(chǎng)景。但是單純的使用聚合函數(shù),只能做全表范圍的統(tǒng)計(jì)分析
    2022-10-10
  • 淺談MySQL 億級(jí)數(shù)據(jù)分頁(yè)的優(yōu)化

    淺談MySQL 億級(jí)數(shù)據(jù)分頁(yè)的優(yōu)化

    mysql大數(shù)據(jù)量使用limit分頁(yè),隨著頁(yè)碼的增大,查詢效率越低下。本文就來(lái)介紹一下MySQL 億級(jí)數(shù)據(jù)分頁(yè)的優(yōu)化,感興趣的小伙伴們可以參考一下
    2021-06-06
  • MYSQL關(guān)聯(lián)關(guān)系查詢方式

    MYSQL關(guān)聯(lián)關(guān)系查詢方式

    文章詳細(xì)介紹了MySQL中如何使用內(nèi)連接和左外連接進(jìn)行表的關(guān)聯(lián)查詢,并展示了如何選擇列和使用別名,文章還提供了一些關(guān)于查詢優(yōu)化的建議,并鼓勵(lì)讀者參考和支持腳本之家
    2025-02-02
  • Mysql從5.6.14安全升級(jí)至mysql5.6.25的方法

    Mysql從5.6.14安全升級(jí)至mysql5.6.25的方法

    這篇文章主要介紹了Mysql從5.6.14安全升級(jí)至mysql5.6.25的方法,本教程講的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2016-08-08
  • 解決ERROR?1129?(HY000):?Host?‘xxx‘?is?blocked?because?of?many問(wèn)題

    解決ERROR?1129?(HY000):?Host?‘xxx‘?is?blocked?because?

    這篇文章主要介紹了解決ERROR?1129?(HY000):?Host?‘xxx‘?is?blocked?because?of?many問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Mysql存儲(chǔ)過(guò)程學(xué)習(xí)筆記--建立簡(jiǎn)單的存儲(chǔ)過(guò)程

    Mysql存儲(chǔ)過(guò)程學(xué)習(xí)筆記--建立簡(jiǎn)單的存儲(chǔ)過(guò)程

    我們常用的操作數(shù)據(jù)庫(kù)語(yǔ)言SQL語(yǔ)句在執(zhí)行的時(shí)候需要要先編譯,然后執(zhí)行,而存儲(chǔ)過(guò)程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給定參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)調(diào)用執(zhí)行它。
    2014-08-08

最新評(píng)論

富裕县| 突泉县| 彰武县| 珲春市| 永登县| 昆山市| 溆浦县| 高州市| 阜康市| 新竹市| 东丰县| 岳西县| 宁海县| 乌拉特中旗| 赤水市| 晋宁县| 吴川市| 古交市| 右玉县| 涞源县| 南投县| 赤水市| 潞城市| 桂东县| 瑞安市| 云阳县| 莒南县| 南和县| 楚雄市| 新安县| 高平市| 新干县| 大埔区| 天门市| 靖宇县| 宿松县| 郯城县| 新丰县| 石台县| 佛坪县| 桦南县|