




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、MySQL 觸發(fā)器入門MySQL 5.1包含對觸發(fā)器的支持。觸發(fā)器是一種與表操作有關(guān)的數(shù)據(jù)庫對象,當(dāng)觸發(fā)器所在表上出現(xiàn)指定事件時,將調(diào)用該對象,即表的操作事件觸發(fā)表上的觸發(fā)器的執(zhí)行?!緞?chuàng)建觸發(fā)器】在MySQL 中,創(chuàng)建觸發(fā)器語法如下:CREATE TRIGGER trigger_name trigger_time trigger_eventON tbl_name FOR EACH ROW trigger_stmt其中:trigger_name:標(biāo)識觸發(fā)器名稱,用戶自行指定;trigger_time:標(biāo)識觸發(fā)時機,取值為 BEFORE 或 AFTER;trigger_event:標(biāo)識觸發(fā)事件,取
2、值為 INSERT、UPDATE 或 DELETE;tbl_name:標(biāo)識建立觸發(fā)器的表名,即在哪張表上建立觸發(fā)器;trigger_stmt:觸發(fā)器程序體,可以是一句SQL 語句,或者用 BEGIN 和 END 包含的多條語句。由此可見,可以建立6種觸發(fā)器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE 。另外有一個限制是不能同時在一個表上建立2個相同類型的觸發(fā)器,因此在一個表上最多建立6個觸發(fā)器?!総rigger_event 詳解】MySQL 除了對 INSERT、UPDAT
3、E 、DELETE 基本操作進行定義外,還定義了 LOAD DATA 和 REPLACE 語句,這兩種語句也能引起上述6中類型的觸發(fā)器的觸發(fā)。LOAD DATA 語句用于將一個文件裝入到一個數(shù)據(jù)表中,相當(dāng)與一系列的 INSERT 操作。 REPLACE 語句一般來說和 INSERT 語句很像,只是在表中有 primary key 或 unique 索引時,如果插入的數(shù)據(jù)和原來 primary key 或 unique 索引一致時,會先刪除原來的數(shù)據(jù),然后增加一條新數(shù)據(jù),也就是說,一條 REPLACE 語句有時候等價于一條 INSERT 語句,有時候等價于一條 DELETE 語句加上一條 INS
4、ERT 語句。因此:INSERT 型觸發(fā)器:插入某一行時激活觸發(fā)器,可能通過 INSERT、LOAD DATA 、REPLACE 語句觸發(fā);UPDATE 型觸發(fā)器:更改某一行時激活觸發(fā)器,可能通過 UPDATE 語句觸發(fā);DELETE 型觸發(fā)器:刪除某一行時激活觸發(fā)器,可能通過 DELETE、REPLACE 語句觸發(fā)。【BEGIN END 詳解】在MySQL 中,BEGIN END 語句的語法為:BEGINstatement_listEND其中,statement_list 代表一個或多個語句的列表,列表內(nèi)的每條語句都必須用分號(; )來結(jié)尾。而在MySQL 中,分號是語句結(jié)束的標(biāo)識符,遇到分
5、號表示該段語句已經(jīng)結(jié)束,MySQL 可以開始執(zhí)行了。因此,解釋器遇到statement_list 中的分號后就開始執(zhí)行,然后會報出錯誤,因為沒有找到和 BEGIN 匹配的 END。這時就會用到 DELIMITER 命令(DELIMITER 是定界符,分隔符的意思),它是一條命令,不需要語句結(jié)束標(biāo)識,語法為:DELIMITER new_delemiternew_delemiter 可以設(shè)為1個或多個長度的符號,默認(rèn)的是分號(; ),我們可以把它修改為其他符號,如管道符:DELIMITER |在這之后的語句,以分號結(jié)束,解釋器不會有什么反應(yīng),只有遇到了管道符,才認(rèn)為是語句結(jié)束。注意,使用完之后,我
6、們還應(yīng)該記得把它給修改回來。【一個完整的創(chuàng)建觸發(fā)器示例】假設(shè)系統(tǒng)中有兩個表:班級表 class(班級號 classID, 班內(nèi)學(xué)生數(shù) stuCount學(xué)生表 student(學(xué)號 stuID, 所屬班級號 classID要創(chuàng)建觸發(fā)器來使班級表中的班內(nèi)學(xué)生數(shù)隨著學(xué)生的添加自動更新,代碼如下: DELIMITER |create trigger tri_stuInsert after inserton student for each rowbegindeclare c int;set c = (select stuCount from class where classID=new.classI
7、D;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ù)類型;可以同時定義多個同類型的變量,用逗號隔開;變量初始值為 NULL,如果需
8、要,可以使用 DEFAULT 子句提供默認(rèn)值,值可以被指定為一個表達式。對變量賦值采用 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)被修改
9、的原數(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 賦值,這樣不會再次觸發(fā)觸發(fā)器,造成循環(huán)調(diào)用(如每插入一個學(xué)生前,都在其學(xué)號前加“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í)行順序】我們建
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《致我們終將逝去的青春》觀后感6篇
- 年產(chǎn)2萬噸抗靜電擦拭布項目實施方案(參考范文)
- 節(jié)能技術(shù)在標(biāo)準(zhǔn)廠房項目中的應(yīng)用
- 貴州食品工程職業(yè)學(xué)院《礦井通風(fēng)與安全》2023-2024學(xué)年第二學(xué)期期末試卷
- 陽光學(xué)院《橡膠工廠設(shè)備》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱應(yīng)用職業(yè)技術(shù)學(xué)院《傳播學(xué)研究方法》2023-2024學(xué)年第二學(xué)期期末試卷
- 柳州職業(yè)技術(shù)學(xué)院《口腔材料》2023-2024學(xué)年第二學(xué)期期末試卷
- 六盤水幼兒師范高等??茖W(xué)?!冻鞘协h(huán)境生態(tài)學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北商貿(mào)學(xué)院《免疫與病原生物學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 成都文理學(xué)院《機械產(chǎn)品三維設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 消費心理學(xué)-理論、案例與實踐-綜合練習(xí)題及答案
- 《深度解析張旭課程》課件
- 家裝主材下單安裝流程
- 供水管網(wǎng)漏損更新改造工程(一期)可行性研究報告
- 課題申報參考:產(chǎn)教融合背景下護理專業(yè)技能人才“崗課賽證”融通路徑研究
- 中藥炮制工中級測試題+答案
- 房地產(chǎn)開發(fā)履約保證措施
- 2025年度合伙人利益共享及風(fēng)險分擔(dān)協(xié)議范本
- 2025年復(fù)旦大學(xué)自主招生個人陳述范文分享
- 山東鐵投集團招聘筆試沖刺題2025
- 真需求-打開商業(yè)世界的萬能鑰匙
評論
0/150
提交評論