創(chuàng)建和使用觸發(fā)器課件_第1頁
創(chuàng)建和使用觸發(fā)器課件_第2頁
創(chuàng)建和使用觸發(fā)器課件_第3頁
創(chuàng)建和使用觸發(fā)器課件_第4頁
創(chuàng)建和使用觸發(fā)器課件_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

創(chuàng)建和使用觸發(fā)器創(chuàng)建和使用觸發(fā)器【任務(wù)提出】

一天,王寧向李老師請教問題:“老師,我向student表中添加了一條學(xué)生記錄,但是忘了修改class表中number列的值,導(dǎo)致class表中統(tǒng)計(jì)的學(xué)生人數(shù)與實(shí)際不相符。”

李老師告訴王寧,為了防止這種情況,MySQL中提供了觸發(fā)器機(jī)制,當(dāng)我們向student表中添加一條學(xué)生記錄時(shí),自動(dòng)觸發(fā)修改class表的number列,從而解決數(shù)據(jù)不一致問題。觸發(fā)器概述觸發(fā)器(Trigger)是一種特殊的存儲(chǔ)過程,它與表緊密相連,可以是表定義的一部分。當(dāng)預(yù)定義的事件(如用戶修改指定表或者視圖中的數(shù)據(jù)時(shí))發(fā)生時(shí),觸發(fā)器將會(huì)自動(dòng)執(zhí)行。觸發(fā)器基于一個(gè)表創(chuàng)建,但是可以針對多個(gè)表進(jìn)行操作。所以觸發(fā)器可以用來對表實(shí)施復(fù)雜的完整性約束,當(dāng)觸發(fā)器所保存的數(shù)據(jù)發(fā)生改變時(shí),觸發(fā)器被自動(dòng)激活,從而防止對數(shù)據(jù)進(jìn)行不正確的修改。觸發(fā)器概述觸發(fā)器自動(dòng)執(zhí)行,在表的數(shù)據(jù)做了任何修改(比如手工輸入或者使用程序采集的操作)之后立即激活觸發(fā)器可以通過數(shù)據(jù)庫中的相關(guān)表進(jìn)行層疊更改。這比直接把代碼寫在前臺(tái)的做法更安全合理觸發(fā)器可以強(qiáng)制限制,這些限制比用CHECK約束所定義的更復(fù)雜。與CHECK約束不同的是,觸發(fā)器可以引用其他表中的列觸發(fā)器的優(yōu)點(diǎn)如下所述:創(chuàng)建觸發(fā)器因?yàn)橛|發(fā)器是一種特殊的存儲(chǔ)過程,所以觸發(fā)器的創(chuàng)建和存儲(chǔ)過程的創(chuàng)建方式有很多相似之處,其基本語法格式如下:CREATETRIGGERtrigger_nametrigger_timetrigger_eventONtb_nameFOREACHROWtrigger_statement;01利用命令創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器

在觸發(fā)器的SQL語句中,可以關(guān)聯(lián)表中的任何列,通過使用OLD和NEW列名來標(biāo)識(shí),如OLD.col_name、NEW.col_name。OLD.col_name關(guān)聯(lián)現(xiàn)有的行的一列在被更新或刪除前的值。NEW.col_name關(guān)聯(lián)一個(gè)新行的插入或更新現(xiàn)有的行的一列的值。

對于INSERT語句,只有NEW是合法的。對于DELETE語句,只有OLD是合法的。對于UPDATE語句,NEW和OLD可以同時(shí)使用。創(chuàng)建觸發(fā)器

【例1】在gradem數(shù)據(jù)庫的teacher表中,定義一個(gè)觸發(fā)器,當(dāng)一個(gè)教師的信息被刪除時(shí),把該教師的編號(hào)和姓名添加到delteacher表中。如何實(shí)現(xiàn)呢?USEgradem;CREATETABLEdelteacherSELECTtno,tnameFROMteacherWHERE1=0;CREATETRIGGERtrig_teacherAFTERDELETEONteacherFOREACHROWINSERTINTOdelteacher(tno,tname)values(old.tno,old.tname);創(chuàng)建觸發(fā)器在Navicat中,連接到MySQL服務(wù)器。展開【mysql】|【gradem】|【表】,在創(chuàng)建student表的窗口中選中【觸發(fā)器】選項(xiàng)卡分別在【觸發(fā)器】選項(xiàng)卡的【名】、【觸發(fā)】、【觸發(fā)時(shí)機(jī)】等列里輸入或選定相關(guān)信息在窗口下方的【定義】選項(xiàng)卡中指定觸發(fā)器執(zhí)行的SQL語句,然后單擊【保存】按鈕,該觸發(fā)器創(chuàng)建成功02使用Navicat圖形工具創(chuàng)建觸發(fā)器查看觸發(fā)器

查看觸發(fā)器是指查看數(shù)據(jù)庫中已存在的觸發(fā)器的定義、狀態(tài)和語法信息等。可以通過命令來查看已經(jīng)創(chuàng)建的觸發(fā)器。SHOWTRIGGERS;利用SHOWTRIGGERS語句查看通過SHOWTRIGGERS語句查看觸發(fā)器的基本語法如下:查看觸發(fā)器SELECT*FROMinformation_schema.triggers;在triggers表中查看觸發(fā)器的信息

在MySQL中,所有觸發(fā)器的定義都存在information_schema數(shù)據(jù)庫下的triggers表中。查詢triggers表,可以查看到數(shù)據(jù)庫中所有觸發(fā)器的詳細(xì)信息。查詢的語句如下:查看觸發(fā)器SELECT*FROMinformation_schema.triggersWHEREtrigger_name='觸發(fā)器名稱';也可以查詢指定觸發(fā)器的詳細(xì)信息,其語句的基本格式如下:其中,觸發(fā)器名稱要用單引號(hào)(‘’)引起來查看觸發(fā)器SELECT*FROMinformation_schema.triggersWHEREtrigger_name='trig_teacher';例如,利用SELECT語句查詢觸發(fā)器trig_teacher的信息,代碼執(zhí)行如下:刪除觸發(fā)器DROPTRIGGER[dbname.]trig_name;使用DROPTRIGGER語句可刪除當(dāng)前數(shù)據(jù)庫的觸發(fā)器。其基本語法如下:其中,dbname表示數(shù)據(jù)庫名,如果缺省,表示刪除當(dāng)前數(shù)據(jù)庫中的觸發(fā)器。trig_name表示要?jiǎng)h除的觸發(fā)器的名稱刪除觸發(fā)器USEgradem;DROPTRIGGERtrig_teacher;例如,刪除觸發(fā)器“trig_teacher”,可以使用如下語句:創(chuàng)建和使用觸發(fā)器【任務(wù)實(shí)施】王寧根據(jù)所學(xué)的觸發(fā)器知識(shí),寫出了以下代碼:(1)使用CREATETRIGGER語句創(chuàng)建觸發(fā)器trig_classnumUSEgradem;CREATETRIGGERtrig_classnumAFTERINSERTONstudentFOREACHROWUPDATEclassSETnumber=number+1WHEREclassno=left(new.sno,8);創(chuàng)建和使用觸發(fā)器【任務(wù)實(shí)施】(2)驗(yàn)證觸發(fā)器是否會(huì)自動(dòng)執(zhí)行。在INSERT語句之前、之后各執(zhí)行一條SELECT語句,比較一下插入記錄前后處理狀態(tài)的變化。具體驗(yàn)證步驟如下:①SELECTnumberas插入前班級(jí)人數(shù)FROMclassWHEREclassno='20200301';+----------------+|插入前班級(jí)人數(shù)|+----------------+|47|+----------------+1rowinset創(chuàng)建和使用觸發(fā)器②INSERTINTOstudent(sno,sname,ssex)VALUES('2020030148','李勇','男');③SELECTnumbera

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論