版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)訓(xùn)案例名稱:觸發(fā)器一、任務(wù)介紹觸發(fā)器是一種與表有關(guān)的操作對(duì)象,當(dāng)表上出現(xiàn)指定事件(INSERT、UPDATE、DELETE)時(shí),會(huì)調(diào)用觸發(fā)器對(duì)象,執(zhí)行觸發(fā)器的操作。二、實(shí)現(xiàn)步驟1.創(chuàng)建觸發(fā)器#使用用戶名root和相應(yīng)密碼,連接本地MySQLC:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用shop數(shù)據(jù)庫(kù)mysql>useshopDatabasechanged#創(chuàng)建用戶信息表user_infomysql>CREATETABLEuser_info(idintnotnullAUTO_INCREMENT,namevarchar(255),sexvarchar(10),primarykey(id));QueryOK,0rowsaffected(1.23sec)#創(chuàng)建統(tǒng)計(jì)表statmysql>CREATETABLEstat(idintnotnullAUTO_INCREMENT,numint,primarykey(id));QueryOK,0rowsaffected(0.34sec)#向統(tǒng)計(jì)表stat中插入一條記錄,默認(rèn)值為0mysql>INSERTINTOstatVALUES(1,0);QueryOK,1rowaffected(0.00sec)#修改結(jié)束符$$mysql>DELIMITER$$#創(chuàng)建一個(gè)觸發(fā)器來計(jì)算用戶的數(shù)量,統(tǒng)計(jì)數(shù)量的值放置在統(tǒng)計(jì)表stat的數(shù)量字段中mysql>CREATETRIGGERcpuNumAFTERINSERTONuser_infoFOREACHROWBEGINUPDATEstatsetnum=num+1WHEREid=1;END$$QueryOK,0rowsaffected(0.18sec)#修改結(jié)束符mysql>DELIMITER;#查看統(tǒng)計(jì)表stat中的數(shù)量字段mysql>SELECT*FROMstat;+----+------+|id|num|+----+------+|1|0|+----+------+1rowinset(0.00sec)#向用戶信息表user_info中插入一條記錄mysql>INSERTINTOuser_infoVALUES(1,'小明','男');QueryOK,1rowaffected(0.01sec)#統(tǒng)計(jì)表stat中的數(shù)量加1mysql>SELECT*FROMstat;+----+------+|id|num|+----+------+|1|1|+----+------+1rowinset(0.00sec)#再向用戶信息表user_info中插入一條記錄mysql>INSERTINTOuser_infoVALUES(2,'小紅','女');QueryOK,1rowaffected(0.00sec)#統(tǒng)計(jì)表stat中的數(shù)量再加1mysql>SELECT*FROMstat;+----+------+|id|num|+----+------+|1|2|+----+------+1rowinset(0.00sec)mysql>2.使用NEW和OLD關(guān)鍵字#使用用戶名root和相應(yīng)密碼,連接本地MySQLC:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用shop數(shù)據(jù)庫(kù)mysql>USEshopDatabasechanged#查詢員工表employeemysql>SELECT*FROMemployee;+----+------+------+------+--------+|id|name|sex|age|deptId|+----+------+------+------+--------+|1|張明|男|30|1||2|孫浩|男|25|1||4|趙穎|女|32|2||5|劉帥|男|28|2||6|劉濤|NULL|NULL|NULL|+----+------+------+------+--------+5rowsinset(0.00sec)#查詢部門表departmentmysql>SELECT*FROMdepartment;+----+------------+---------+|id|deptName|manager|+----+------------+---------+|1|軟件開發(fā)部|李姝||2|人力資源部|吳剛|+----+------------+---------+2rowsinset(0.00sec)#修改結(jié)束符為$$mysql>DELIMITER$$#創(chuàng)建按部門刪除員工的觸發(fā)器,刪除部門后,觸發(fā)器會(huì)自動(dòng)刪除這個(gè)部門中的員工mysql>CREATETRIGGERdeleteEmpAFTERDELETEONdepartmentFOREACHROWBEGINDELETEFROMemployeeWHEREdeptId=OLD.id;END$$QueryOK,0rowsaffected(0.21sec)#修改結(jié)束符為$$mysql>DELIMITER;#刪除部門id等于1的部門時(shí),觸發(fā)器會(huì)刪除這個(gè)部門中的員工mysql>DELETEFROMdeptWHEREid=1;QueryOK,1rowaffected(0.08sec)#查詢部門表中的數(shù)據(jù)mysql>SELECT*FROMdepartment;+----+---------------+----------+|id|deptName|manager|+----+---------------+----------+|2|人力資源部|吳剛|+----+---------------+----------+1rowinset(0.00sec)#查詢員工表中的數(shù)據(jù),可以看到deptId等于1的員工被刪除了mysql>SELECT*FROMemployee;+----+-------+------+------+--------+|id|name|sex|age|deptId|+----+-------+------+------+--------+|3|張靜|女|28|2||4|趙穎|女|32|2||5|劉帥|男|28|2||6|劉濤|NULL|NULL|NULL|+----+-------+------+------+--------+3rowsinset(0.00sec)mysql>3.查看和刪除觸發(fā)器(1)查看觸發(fā)器。查看觸發(fā)器和查看數(shù)據(jù)庫(kù)表一樣,通過SHOWTRIGGERS就可以查看觸發(fā)器;mysql>SHOWTRIGGERS\G***************************1.row***************************Trigger:deleteEmp#觸發(fā)器名稱Event:DELETE#觸發(fā)器事件Table:department#觸發(fā)的表Statement:BEGIN#執(zhí)行的SQL語(yǔ)句DELETEFROMemployeeWHEREdeptId=OLD.id;ENDTiming:AFTER#執(zhí)行的時(shí)機(jī)Created:2023-11-0621:45:04.23#創(chuàng)建時(shí)間sql_mode:STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTIONDefiner:root@localhost#定義的用戶character_set_client:utf8#編碼collation_connection:utf8_general_ciDatabaseCollation:utf8_general_ci(2)刪除觸發(fā)器。刪除觸發(fā)器就像刪除數(shù)據(jù)庫(kù)表一樣簡(jiǎn)單,使用關(guān)鍵字TRIGGER來標(biāo)識(shí)觸發(fā)器,然后使用DROP操作刪除指定名稱的觸發(fā)器。DROPTRIGGERtrigger_name;示例如下。mysql>DROPTRIGGERcpuNum;4.INSERT型觸發(fā)器#使用用戶名root和相應(yīng)密碼,連接本地MySQLC:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用shop數(shù)據(jù)庫(kù)mysql>USEshopDatabasechanged#查詢員工表employeemysql>SELECT*FROMemployee;+----+------+------+|id|name|salary|+----+------+------+|1|張明|3000||2|孫浩|5500||4|趙穎|8200||5|劉帥|9800||6|劉濤|6600|+----+------+------+5rowsinset(0.00sec)#刪除員工表employee的數(shù)據(jù)mysql>DELETEFROMemployee;#查詢員工表employee的數(shù)據(jù),目前沒有數(shù)據(jù)mysql>SELECT*FROMemployee;Emptyset(0.00sec);QueryOK,0rowsaffected(0.36sec)#創(chuàng)建記錄表record,記錄工資低于3500元的員工mysql>CREATETABLErecord(idintnotnullAUTO_INCREMENT,namevarchar(255),salaryint,primarykey(id));QueryOK,0rowsaffected(0.32sec)#查詢記錄表record的數(shù)據(jù),目前沒有數(shù)據(jù)mysql>SELECT*FROMrecord;Emptyset(0.00sec)#修改結(jié)束符$$mysql>DELIMITER$$#mysql>CREATETRIGGERaddRecordAFTERINSERTONemployeeFOREACHROWBEGINIF(NEW.salary<3500)THENINSERTINTOrecordVALUES(NEW.id,NEW.name,NEW.salary);ENDIF;END$$QueryOK,0rowsaffected(0.17sec)#修改結(jié)束符mysql>DELIMITER;#向員工表employee中插入一條工資低于3500元的員工記錄mysql>INSERTINTOemployeeVALUES(11,'小明',2800);QueryOK,1rowaffected(0.00sec)#查詢員工表employee的數(shù)據(jù),可以看到插入成功mysql>SELECT*FROMemployee;+----+--------+--------+|id|name
|salary|+----+--------+--------+|11|小明
|2800|+----+--------+--------+1rowinset(0.00sec)#查詢記錄表record的數(shù)據(jù),可以看到插入了一條工資低于3500元的員工記錄mysql>SELECT*FROMrecord;+----+--------+--------+|id|name|salary|+----+--------+--------+|11|小明|2800|+----+--------+--------+1rowinset(0.00sec)#再向員工表employee中插入一條工資高于3500元的員工記錄mysql>INSERTINTOemployeeVALUES(12,'小紅',5600);QueryOK,1rowaffected(0.00sec)#查詢員工表employee的數(shù)據(jù),可以看到插入成功mysql>SELECT*FROMemployee;+----+--------+--------+|id|name|salary|+----+--------+--------+|11|小明|2800||12|小紅|5600|+----+--------+--------+2rowsinset(0.00sec)#查詢記錄表record的數(shù)據(jù),工資高于3500元的員工記錄沒有插入mysql>SELECT*FROMrecord;+----+--------+--------+|id|name|salary|+----+--------+--------+|11|小明|2800|+----+--------+--------+1rowinset(0.00sec)mysql>5.UPDATE型觸發(fā)器#使用用戶名root和相應(yīng)密碼,連接本地MySQLC:\Users\Administrator>mysql-uroot-p123456#使用shop數(shù)據(jù)庫(kù)mysql>USEshopDatabasechanged#查看員工表employee的數(shù)據(jù)mysql>SELECT*FROMemployee;+----+--------+--------+|id|name|salary|+----+--------+--------+|1|小明|2800||2|小紅|5600|+----+--------+--------+2rowsinset(0.00sec)#查看記錄表record的數(shù)據(jù)mysql>SELECT*FROMrecord;+----+--------+--------+|id|name|salary|+----+--------+--------+|1|小明|2800|+----+--------+--------+1rowinset(0.00sec)#修改結(jié)束符mysql>DELIMITER$$/*創(chuàng)建UPDATE型觸發(fā)器,在員工表employee中進(jìn)行修改,工資大于3500元時(shí)要?jiǎng)h除記錄表record中相應(yīng)的數(shù)據(jù),否則插入或者修改記錄表record中的數(shù)據(jù),REPLACE語(yǔ)句可以用于插入或者更新記錄*/mysql>CREATETRIGGERupdateRecordAFTERUPDATEONemployeeFOREACHROWBEGINIF(NEW.salary>3500)THENDELETEFROMrecordWHEREid=NEW.id;ELSEREPLACEINTOrecordVALUES(NEW.id,NEW.name,NEW.salary);ENDIF;END$$QueryOK,0rowsaffected(0.16sec)#修改結(jié)束符mysql>DELIMITER;#mysql>UPDATEemployeeSETsalary=6000WHEREid=1;QueryOK,1rowaffected(0.00sec)Rowsmatched:1Changed:1Warnings:0#修改成功mysql>SELECT*FROMemployee;+----+--------+--------+|id|name|salary|+----+--------+--------+|1|小明|6000||2|小紅|5600|+----+--------+--------+2rowsinset(0.00sec)#工資大于3500元,在記錄表record中會(huì)刪除員工id為1的數(shù)據(jù)mysql>SELECT*FROMrecord;Emptyset(0.00sec)#將員工id為2的員工的工資從5600元改為2000元mysql>UPDATEemployeeSETsalary=2000WHEREid=2;QueryOK,1rowaffected(0.00sec)Rowsmatched:1Changed:1Warnings:0#修改成功mysql>SELECT*FROMemployee;+----+-------+---------+|id|name|salary|+----+-------+---------+|1|小明|6000||2|小紅|2000|+----+-------+---------+2rowsinset(0.00sec)#記錄表record中插入員工id為2的員工記錄mysql>SELECT*FROMrecord;+----+-------+---------+|id|name|salary|+----+-------+---------+|2|小紅|2000|+----+-------+---------+1rowinset(0.00sec)#中的數(shù)據(jù)mysql>UPDATEemployeeSETsalary=2500WHEREid=2;QueryOK,1rowaffected(0.06sec)Rowsmatched:1Changed:1Warnings:0#修改成功mysql>SELECT*FROMemployee;+----+-------+---------+|id|name|salary|+----+-------+---------+|1|小明|6000||2|小紅|2500|+----+-------+---------+2rowsinset(0.00sec)#修改成功mysql>SELECT*FROMrecord;+----+--------+--------+|id|name|salary|+----+--------+--------+|2|小紅|2500|+----+--------+--------+1rowinset(0.00sec)mysql>6.DELETE型觸發(fā)器#使用用戶名root和相應(yīng)密碼,連接本地MySQLC:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用shop數(shù)據(jù)庫(kù)mysql>USEshopDatabasechanged#查詢員工表employee的數(shù)據(jù)mysql>SELECT*FROMemployee;+----+--------+--------+|id|name|salary|+----+--------+--------+|1|小明|6000||2|小紅|2500|+----+--------+--------+2rowsinset(0.00sec)#查詢記錄表re
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年寵物智能寵物酒店行業(yè)創(chuàng)新與運(yùn)營(yíng)報(bào)告
- 2026年可持續(xù)時(shí)尚產(chǎn)業(yè)創(chuàng)新設(shè)計(jì)與市場(chǎng)趨勢(shì)報(bào)告
- 公司投資決策委員會(huì)管理制度及流程
- 發(fā)電設(shè)備維護(hù)及試驗(yàn)方案規(guī)范
- 2025年風(fēng)力渦輪機(jī)十年發(fā)展:發(fā)電效率與抗風(fēng)能力行業(yè)報(bào)告
- 書店庫(kù)存管理及促銷策劃方案
- 初中物理凸透鏡成像規(guī)律的家庭實(shí)驗(yàn)創(chuàng)新設(shè)計(jì)方案課題報(bào)告教學(xué)研究課題報(bào)告
- 水利水電工程施工技術(shù)方案
- 2025年綠色農(nóng)業(yè)產(chǎn)業(yè)生態(tài)循環(huán)創(chuàng)新報(bào)告
- 倉(cāng)庫(kù)安全隱患排查及整改方案
- 綠化養(yǎng)護(hù)考核方案范本
- 餐飲企業(yè)后廚食品安全培訓(xùn)資料
- 國(guó)網(wǎng)安全家園題庫(kù)及答案解析
- 足踝外科進(jìn)修匯報(bào)
- 【12篇】新部編版小學(xué)語(yǔ)文六年級(jí)上冊(cè)【課內(nèi)外閱讀理解專項(xiàng)訓(xùn)練(完整版)】含答案
- 船艇涂裝教學(xué)課件
- 招標(biāo)績(jī)效考核方案(3篇)
- 2025年貸款房屋轉(zhuǎn)贈(zèng)協(xié)議書
- 2025天津市個(gè)人房屋租賃合同樣本
- 中藥熱熨敷技術(shù)及操作流程圖
- 鶴壁供熱管理辦法
評(píng)論
0/150
提交評(píng)論