日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
使用MySQL觸發(fā)器的教程

下文主要給大家?guī)硎褂肕ySQL觸發(fā)器的教程,希望這些內(nèi)容能夠帶給大家實(shí)際用處,這也是我編輯使用MySQL觸發(fā)器的教程這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。

成都創(chuàng)新互聯(lián)公司基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺(tái)為眾多戶提供成都多線服務(wù)器托管 四川大帶寬租用 成都機(jī)柜租用 成都服務(wù)器租用。

MySQL包含對(duì)觸發(fā)器的支持。觸發(fā)器是一種與表操作有關(guān)的數(shù)據(jù)庫對(duì)象,當(dāng)觸發(fā)器所在表上出現(xiàn)指定事件時(shí),將調(diào)用該對(duì)象,即表的操作事件觸發(fā)表上的觸發(fā)器的執(zhí)行。

創(chuàng)建觸發(fā)器
在MySQL中,創(chuàng)建觸發(fā)器語法如下:

代碼如下:

使用MySQL觸發(fā)器的教程

CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt

其中:

trigger_name:標(biāo)識(shí)觸發(fā)器名稱,用戶自行指定;
trigger_time:標(biāo)識(shí)觸發(fā)時(shí)機(jī),取值為 BEFORE 或 AFTER;
trigger_event:標(biāo)識(shí)觸發(fā)事件,取值為 INSERT、UPDATE 或 DELETE;
tbl_name:標(biāo)識(shí)建立觸發(fā)器的表名,即在哪張表上建立觸發(fā)器;
trigger_stmt:觸發(fā)器程序體,可以是一句SQL語句,或者用 BEGIN 和 END 包含的多條語句。

由此可見,可以建立6種觸發(fā)器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。

另外有一個(gè)限制是不能同時(shí)在一個(gè)表上建立2個(gè)相同類型的觸發(fā)器,因此在一個(gè)表上最多建立6個(gè)觸發(fā)器。

trigger_event 詳解
MySQL 除了對(duì) INSERT、UPDATE、DELETE 基本操作進(jìn)行定義外,還定義了 LOAD DATA 和 REPLACE 語句,這兩種語句也能引起上述6中類型的觸發(fā)器的觸發(fā)。

LOAD DATA 語句用于將一個(gè)文件裝入到一個(gè)數(shù)據(jù)表中,相當(dāng)與一系列的 INSERT 操作。

REPLACE 語句一般來說和 INSERT 語句很像,只是在表中有 primary key 或 unique 索引時(shí),如果插入的數(shù)據(jù)和原來 primary key 或 unique 索引一致時(shí),會(huì)先刪除原來的數(shù)據(jù),然后增加一條新數(shù)據(jù),也就是說,一條 REPLACE 語句有時(shí)候等價(jià)于一條。

INSERT 語句,有時(shí)候等價(jià)于一條 DELETE 語句加上一條 INSERT 語句。

INSERT 型觸發(fā)器:插入某一行時(shí)激活觸發(fā)器,可能通過 INSERT、LOAD DATA、REPLACE 語句觸發(fā);
UPDATE 型觸發(fā)器:更改某一行時(shí)激活觸發(fā)器,可能通過 UPDATE 語句觸發(fā);
DELETE 型觸發(fā)器:刪除某一行時(shí)激活觸發(fā)器,可能通過 DELETE、REPLACE 語句觸發(fā)。

BEGIN … END 詳解
在MySQL中,BEGIN … END 語句的語法為:

BEGIN
[statement_list]
END
其中,statement_list 代表一個(gè)或多個(gè)語句的列表,列表內(nèi)的每條語句都必須用分號(hào)(;)來結(jié)尾。
而在MySQL中,分號(hào)是語句結(jié)束的標(biāo)識(shí)符,遇到分號(hào)表示該段語句已經(jīng)結(jié)束,MySQL可以開始執(zhí)行了。因此,解釋器遇到statement_list 中的分號(hào)后就開始執(zhí)行,然后會(huì)報(bào)出錯(cuò)誤,因?yàn)闆]有找到和 BEGIN 匹配的 END。

這時(shí)就會(huì)用到 DELIMITER 命令(DELIMITER 是定界符,分隔符的意思),它是一條命令,不需要語句結(jié)束標(biāo)識(shí),語法為:
DELIMITER new_delemiter
new_delemiter 可以設(shè)為1個(gè)或多個(gè)長(zhǎng)度的符號(hào),默認(rèn)的是分號(hào)(;),我們可以把它修改為其他符號(hào),如$:
DELIMITER $
在這之后的語句,以分號(hào)結(jié)束,解釋器不會(huì)有什么反應(yīng),只有遇到了$,才認(rèn)為是語句結(jié)束。注意,使用完之后,我們還應(yīng)該記得把它給修改回來。

一個(gè)完整的創(chuàng)建觸發(fā)器示例
假設(shè)系統(tǒng)中有兩個(gè)表:
班級(jí)表 class(班級(jí)號(hào) classID, 班內(nèi)學(xué)生數(shù) stuCount)
學(xué)生表 student(學(xué)號(hào) stuID, 所屬班級(jí)號(hào) classID)
要?jiǎng)?chuàng)建觸發(fā)器來使班級(jí)表中的班內(nèi)學(xué)生數(shù)隨著學(xué)生的添加自動(dòng)更新,代碼如下:

代碼如下:下載地址 springmvc+mybatis+spring 整合SSM   

DELIMITER $
create trigger tri_stuInsert after insert
on student for each row
begin
declare c int;
set c = (select stuCount from class where classID=new.classID);
update class set stuCount = c + 1 where classID = new.classID;
end$
DELIMITER ;

變量詳解
MySQL 中使用 DECLARE 來定義一局部變量,該變量只能在 BEGIN … END 復(fù)合語句中使用,并且應(yīng)該定義在復(fù)合語句的開頭,

即其它語句之前,語法如下:

DECLARE var_name[,...] type [DEFAULT value]
其中:
var_name 為變量名稱,同 SQL 語句一樣,變量名不區(qū)分大小寫;type 為 MySQL 支持的任何數(shù)據(jù)類型;可以同時(shí)定義多個(gè)同類型的變量,用逗號(hào)隔開;變量初始值為 NULL,如果需要,可以使用 DEFAULT 子句提供默認(rèn)值,值可以被指定為一個(gè)表達(dá)式。

對(duì)變量賦值采用 SET 語句,語法為:

SET var_name = expr [,var_name = expr] ...

NEW 與 OLD 詳解

上述示例中使用了NEW關(guān)鍵字,和 MS SQL Server 中的 INSERTED 和 DELETED 類似,MySQL 中定義了 NEW 和 OLD,用來表示

觸發(fā)器的所在表中,觸發(fā)了觸發(fā)器的那一行數(shù)據(jù)。
具體地:
在 INSERT 型觸發(fā)器中,NEW 用來表示將要(BEFORE)或已經(jīng)(AFTER)插入的新數(shù)據(jù);
在 UPDATE 型觸發(fā)器中,OLD 用來表示將要或已經(jīng)被修改的原數(shù)據(jù),NEW 用來表示將要或已經(jīng)修改為的新數(shù)據(jù);
在 DELETE 型觸發(fā)器中,OLD 用來表示將要或已經(jīng)被刪除的原數(shù)據(jù);
使用方法: NEW.columnName (columnName 為相應(yīng)數(shù)據(jù)表某一列名)
另外,OLD 是只讀的,而 NEW 則可以在觸發(fā)器中使用 SET 賦值,這樣不會(huì)再次觸發(fā)觸發(fā)器,造成循環(huán)調(diào)用(如每插入一個(gè)學(xué)生前,都在其學(xué)號(hào)前加“2013”)。

查看觸發(fā)器

和查看數(shù)據(jù)庫(show databases;)查看表格(show tables;)一樣,查看觸發(fā)器的語法如下:

SHOW TRIGGERS [FROM schema_name];
其中,schema_name 即 Schema 的名稱,在 MySQL 中 Schema 和 Database 是一樣的,也就是說,可以指定數(shù)據(jù)庫名,這樣就

不必先“USE database_name;”了。

刪除觸發(fā)器

和刪除數(shù)據(jù)庫、刪除表格一樣,刪除觸發(fā)器的語法如下:

DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

觸發(fā)器的執(zhí)行順序

我們建立的數(shù)據(jù)庫一般都是 InnoDB 數(shù)據(jù)庫,其上建立的表是事務(wù)性表,也就是事務(wù)安全的。這時(shí),若SQL語句或觸發(fā)器執(zhí)行失敗,MySQL 會(huì)回滾事務(wù),有:

①如果 BEFORE 觸發(fā)器執(zhí)行失敗,SQL 無法正確執(zhí)行。
②SQL 執(zhí)行失敗時(shí),AFTER 型觸發(fā)器不會(huì)觸發(fā)。
③AFTER 類型的觸發(fā)器執(zhí)行失敗,SQL 會(huì)回滾

對(duì)于以上關(guān)于使用MySQL觸發(fā)器的教程,大家是不是覺得非常有幫助。如果需要了解更多內(nèi)容,請(qǐng)繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會(huì)喜歡上這些內(nèi)容的。


網(wǎng)站欄目:使用MySQL觸發(fā)器的教程
網(wǎng)站地址:http://www.dlmjj.cn/article/pospjd.html