站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        MySQL學習總結(jié)之觸發(fā)器詳解

        本篇文章給大家?guī)砹岁P(guān)于mysql的相關(guān)知識,其中主要介紹了關(guān)于觸發(fā)器的相關(guān)問題,觸發(fā)器,就是?種特殊的存儲過程,觸發(fā)器和存儲過程?樣是?個能夠完成特定功能、存儲,希望對大家有幫助。

        MySQL學習總結(jié)之觸發(fā)器詳解

        推薦學習:mysql教程

        觸發(fā)器

        一、觸發(fā)器的介紹

        觸發(fā)器,就是?種特殊的存儲過程。觸發(fā)器和存儲過程?樣是?個能夠完成特定功能、存儲

        在數(shù)據(jù)庫服務器上的SQL?段,但是觸發(fā)器?需調(diào)?,當對數(shù)據(jù)表中的數(shù)據(jù)執(zhí)?DML操作時

        ?動觸發(fā)這個SQL?段的執(zhí)?,?需?動調(diào)?。

        在MySQL,只有執(zhí)?insertdeleteupdate操作才能觸發(fā)觸發(fā)器的執(zhí)?。

        二、 觸發(fā)器使用

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

        create trigger tri_name   -- tri_name:觸發(fā)器別名 <before|after> 						-- 定義觸發(fā)時機 <insert|delete|update>		-- 定義DML類型 ON <table_name>						-- 要觸發(fā)的表 for each <row|statement>							 -- for each row 聲明為?級觸發(fā)器(操作的每?條記錄就觸發(fā)觸發(fā)器執(zhí)??次) -- for each statement 聲明語句級觸發(fā)器(觸發(fā)動作體執(zhí)行一次) begin											-- 當只有一句sql語句時,begin...end 可以省略	 	sql_statement 					-- 進行觸發(fā)器對應的DML類型的操作 end;   #示例 -- 創(chuàng)建觸發(fā)器:當學?信息表發(fā)?添加操作時,則向?志信息表中記錄?條?志 create trigger tri_test1 after insert on students for each row insert into stulogs(time,log_text) values(now(), concat('添 加',NEW.stu_num,'學?信息'));

        2.查看觸發(fā)器

        #查看全部觸發(fā)器 show triggers;  #查看觸發(fā)器的創(chuàng)建語句 show create trigger 觸發(fā)器名字;

        3.刪除觸發(fā)器

        觸發(fā)器不能修改,只能刪除

        drop trigger  觸發(fā)器名字;

        三、 NEW與OLD

        觸發(fā)器?于監(jiān)聽對數(shù)據(jù)表中數(shù)據(jù)的insert、delete、update操作,在觸發(fā)器中通常處理

        ?些DML的關(guān)聯(lián)操作;我們可以使? NEW 和 OLD 關(guān)鍵字在觸發(fā)器中獲取觸發(fā)這個觸發(fā)器

        的DML操作的數(shù)據(jù)

        • NEW : 在觸發(fā)器中?于獲取insert操作添加的數(shù)據(jù)、update操作修改后的記錄
        • OLD:在觸發(fā)器中?于獲取delete操作刪除前的數(shù)據(jù)、update操作修改前的數(shù)據(jù)

        1.NEW的使用

        #insert操作中:NEW表示添加的新記錄 create trigger tri_test1 after insert on students for each row insert into stulogs(time,log_text) values(now(), concat('添 加',NEW.stu_num,'學?信息'));   #update操作中:NEW 表示修改后的數(shù)據(jù) -- 創(chuàng)建觸發(fā)器 : 在監(jiān)聽update操作的觸發(fā)器中,可以使?NEW獲取修改后的數(shù)據(jù) create trigger tri_test2 after update on students for each row insert into stulogs(time,log_text) values(now(), concat('修改學?信息 為:',NEW.stu_num,NEW.stu_name));

        2.OLD的使用

        #delete操作中:OLD表示刪除的記錄 create trigger tri_test3 after delete on students for each row insert into stulogs(time,log_text) values(now(), concat('刪 除',OLD.stu_num,'學?信息'));    #update操作中:OLD表示修改前的記錄 create trigger tri_test2 after update on students for each row insert into stulogs(time,log_text) values(now(), concat('將學?姓名從 【',OLD.stu_name,'】修改為【',NEW.stu_name,'】'));

        四、10.4 觸發(fā)器使?總結(jié)

        1.優(yōu)點

        • 觸發(fā)器是?動執(zhí)?的,當對觸發(fā)器相關(guān)的表執(zhí)?響應的DML操作時?即執(zhí)?;
        • 觸發(fā)器可以實現(xiàn)表中的數(shù)據(jù)的級聯(lián)操作(關(guān)聯(lián)操作),有利于保證數(shù)據(jù)的完整性;
        • 觸發(fā)器可以對DML操作的數(shù)據(jù)進?更為復雜的合法性校驗

        2.缺點

        • 使?觸發(fā)器實現(xiàn)的業(yè)務邏輯如果出現(xiàn)問題將難以定位,后期維護困難;
        • ?量使?觸發(fā)器容易導致代碼結(jié)構(gòu)雜亂,增加了程序的復雜性;
        • 當觸發(fā)器操作的數(shù)據(jù)量?較?時,執(zhí)?效率會??降低。

        3.使?建議

        在互聯(lián)?項?中,應避免適應觸發(fā)器;

        對于并發(fā)量不?的項?可以選擇使?存儲過程,但是在互聯(lián)?引?中不提倡使?存儲過程

        (原因:存儲過程時將實現(xiàn)業(yè)務的邏輯交給數(shù)據(jù)庫處理,?則增減了數(shù)據(jù)庫的負載,?則不利于數(shù)據(jù)庫的遷移)

        推薦學習:mysql學習教程

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 四虎成人精品| 亚洲精品天天影视综合网| 久久99精品国产99久久6男男| 久久国产精品偷99| 日本精品中文字幕| 国产在线精品一区二区中文| 亚洲?V乱码久久精品蜜桃| 国产精品亚洲精品日韩已方| 精品久久一区二区| 91精品国产福利尤物| 久久久无码人妻精品无码| 亚洲无码精品浪潮| 人妻少妇看A偷人无码精品视频| 国产精品乱码一区二区三区| 日韩一级精品视频在线观看| 2021精品国产综合久久| 国产欧美精品AAAAAA片| 久久夜色精品国产噜噜亚洲AV| 亚洲一级Av无码毛片久久精品 | 精品无码三级在线观看视频| 51国偷自产精品一区在线视频| 国产精品欧美亚洲韩国日本| 69久久夜色精品国产69| 国产精品免费看久久久| 久久99国产乱子伦精品免费| 久久精品中文闷骚内射| 久久66热人妻偷产精品9| 久久久久久久久无码精品亚洲日韩 | 久久精品国产精品亚洲| 久久精品国产色蜜蜜麻豆| 久久久久无码精品国产app| 国产亚洲精品自在线观看| 国产欧美一区二区精品性色99 | 国产精品免费网站| 免费91麻豆精品国产自产在线观看| 久久精品国产影库免费看| 亚洲精品电影网| 国产精品青青在线观看爽香蕉| 精品国产三级a乌鸦在线观看| 久久精品国产亚洲Aⅴ蜜臀色欲| 男女男精品视频网站在线观看|