當(dāng)前位置:首頁 >  站長 >  數(shù)據(jù)庫 >  正文

MySQL中觸發(fā)器和游標的介紹與使用

 2021-03-17 17:26  來源: 腳本之家   我來投稿 撤稿糾錯

  域名預(yù)訂/競價,好“米”不錯過

這篇文章主要給大家介紹了關(guān)于MySQL中觸發(fā)器和游標的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

觸發(fā)器簡介

觸發(fā)器是和表關(guān)聯(lián)的特殊的存儲過程,可以在插入,刪除或修改表中的數(shù)據(jù)時觸發(fā)執(zhí)行,比數(shù)據(jù)庫本身標準的功能有更精細和更復(fù)雜的數(shù)據(jù)控制能力。

觸發(fā)器的優(yōu)點:

安全性:可以基于數(shù)據(jù)庫的值使用戶具有操作數(shù)據(jù)庫的某種權(quán)利。例如不允許下班后和節(jié)假日修改數(shù)據(jù) 庫數(shù)據(jù);

審計:可以跟蹤用戶對數(shù)據(jù)庫的操作;

實現(xiàn)復(fù)雜的數(shù)據(jù)完整性規(guī)則。例如,觸發(fā)器可回退任何企圖吃進超過自己保證金的期貨;

提供了運行計劃任務(wù)的另一種方法。例如,如果公司的帳號上的資金低于 5 萬元則立即給財務(wù)人員發(fā)送 警告數(shù)據(jù)。

MySQL 中使用觸發(fā)器

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

創(chuàng)建觸發(fā)器的技巧就是記住觸發(fā)器的四要素:

監(jiān)控地點:table;

監(jiān)控事件:insert/update/delete;

觸發(fā)時間:after/before;

觸發(fā)事件:insert/update/delete。

創(chuàng)建觸發(fā)器的基本語法如下所示:

trigger_name:觸發(fā)器的名稱;

tirgger_time:觸發(fā)時機,為 BEFORE 或者 AFTER;

trigger_event:觸發(fā)事件,為 INSERT、DELETE 或者 UPDATE;

tb_name:表示建立觸發(fā)器的表名,在哪張表上建立觸發(fā)器;

trigger_stmt:觸發(fā)器的程序體,可以是一條 SQL 語句或者是用 BEGIN 和 END 包含的多條語句;

FOR EACH ROW 表示任何一條記錄上的操作滿足觸發(fā)事件都會觸發(fā)該觸發(fā)器。

注意:對同一個表相同觸發(fā)時間的相同觸發(fā)事件,只能定義一個觸發(fā)器。

觸發(fā)器新舊記錄

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ù)。

創(chuàng)建觸發(fā)器,當(dāng)用戶購買商品時,同時更新對應(yīng)商品庫存記錄,代碼如下所示:

創(chuàng)建觸發(fā)器,當(dāng)用戶刪除訂單時,同時更新對應(yīng)商品庫存記錄,代碼如下所示:

before 和 after 的區(qū)別

before 在執(zhí)行語句之前after 在執(zhí)行語句之后

當(dāng)訂單商品數(shù)量超過庫存時,修改訂單數(shù)量為最大庫存:

游標

游標簡介

游標的作用就是用于對查詢數(shù)據(jù)庫所返回的記錄進行遍歷,以便進行相應(yīng)的操作。游標有下面這些特征

游標是只讀的,也就是不能更新它;

游標是不能滾動的,也就是只能在一個方向上進行遍歷,不能在記錄之間隨意進退,不能跳過某些記錄;

避免在已經(jīng)打開游標的表上更新數(shù)據(jù)。

創(chuàng)建游標

創(chuàng)建游標的語法包含四個部分:

定義游標:declare 游標名 cursor for select 語句;

打開游標:open 游標名;

獲取結(jié)果:fetch游標名 into 變量名[,變量名];

關(guān)閉游標:close 游標名;

創(chuàng)建一個過程 p1,使用游標返回 test 數(shù)據(jù)庫中 student 表的第一個學(xué)生信息。代碼如下所示:

在 test 數(shù)據(jù)庫創(chuàng)建一個 student2 表,創(chuàng)建一個過程 p2,使用游標提取 student 表中所有學(xué)生信息插入到 student2 表中。代碼如下所示:

總結(jié)

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

來源:腳本之家

鏈接:https://www.jb51.net/article/207666.htm

申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!

相關(guān)標簽
mysql

相關(guān)文章

熱門排行

信息推薦