亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

mysql 觸發器用法實例詳解

2024-07-24 13:13:31
字體:
來源:轉載
供稿:網友

 MySQL觸發器語法詳解:

         觸發器 trigger是一種特殊的存儲過程,他在插入(inset)、刪除(delete)或修改(update)特定表中的數據時觸發執行,它比數據本身標準的功能更精細和更復雜的數據控制能力。觸發器不是由程序調用,而是由某個事件來觸發的。在有數據修改時自動強制執行其業務規則,經常用于加強數據的完整性約束和業務規則等。觸發器可以查詢其他表,而且包含復制的sql語句。觸發器也可用于強制引用完整性。觸發器可以強制比用check約束定義的約束更為復雜的約束。

(一).CREATE TRIGGER語法

        CREATE TRIGGER trigger_nametrigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt;
        觸發程序是與表有關的命名數據庫對象,當表上出現特定事件時,將激活該對象。
        觸發程序與命名為tbl_name的表相關。tbl_name必須引用永久性表。不能將觸發程序與TEMPORARY表或視圖關聯起來。
        trigger_time是觸發程序的動作時間。它可以是BEFORE或AFTER,以指明觸發程序是在激活它的語句之前或之后觸發。
        trigger_event指明了激活觸發程序的語句的類型。trigger_event可以是下述值之一:

        (1).INSERT:將新行插入表時激活觸發程序,例如,通過INSERT、LOAD DATA和REPLACE
語句。
       (2).UPDATE:更改某一行時激活觸發程序,例如,通過UPDATE語句。
       (3).DELETE:從表中刪除某一行時激活觸發程序,例如,通過DELETE和REPLACE語句。

請注意,trigger_event與以表操作方式激活觸發程序的SQL語句并不很類似,這點很重要。例如,關于INSERT的BEFORE觸發程序不僅能被INSERT語句激活,也能被LOAD DATA語句激活。可能會造成混淆的例子之一是INSERT INTO .. ON DUPLICATE UPDATE ...語法:BEFORE INSERT觸發程序對于每一行將激活,后跟AFTER INSERT觸發程序,或BEFORE UPDATE和AFTER  UPDATE觸發程序,具體情況取決于行上是否有重復鍵。

      對于具有相同觸發程序動作時間和事件的給定表,不能有兩個觸發程序。例如,對于某一表,不能有兩個BEFORE UPDATE觸發程序。但可以有1個BEFORE UPDATE觸發程序和1個BEFORE  INSERT觸發程序,或1個BEFOREUPDATE觸發程序和1個AFTER UPDATE觸發程序。trigger_stmt是當觸發程序激活時執行的語句。如果你打算執行多個語句,可使用BEGIN ... END復合語句結構。這樣,就能使用存儲子程序中允許的相同語句

(二).DROP TRIGGER語法

     DROP TRIGGER[schema_name.]trigger_name舍棄觸發程序。方案名稱(schema_name)是可選的。如果省略了schema(方案),將從當前方案中舍棄觸發程序。

     注釋:從MySQL 5.0.10之前的MySQL版本升級到5.0.10或更高版本時(包括所有的MySQL5.1版本),必須在升級之前舍棄所有的觸發程序,并在隨后重新創建它們,否則,在升級之后DROP TRIGGER不工作。DROP TRIGGER語句需要SUPER權限。

(三).使用觸發程序

      在本節中,介紹了在MySQL 5.1中使用觸發程序的方法,并介紹了在使用觸發程序方面的限制。

      觸發程序是與表有關的命名數據庫對象,當表上出現特定事件時,將激活該對象。在某些觸發程序的用法中,可用于檢查插入到表中的值,或對更新涉及的值進行計算。 

      觸發程序與表相關,當對表執行INSERT、DELETE或UPDATE語句時,將激活觸發程序??梢詫⒂|發程序設置為在執行語句之前或之后激活。例如,可以在從表中刪除每一行之前,或在更新了,每一行后激活觸發程序。要想創建觸發程序或舍棄觸發程序,可使用CREATE TRIGGER或DROP TRIGGER語句.觸發程序不能調用將數據返回客戶端的存儲程序,也不能使用采用CALL語句的動態SQL(允許存儲程序通過參數將數據返回觸發程序)。

      觸發程序不能使用以顯式或隱式方式開始或結束事務的語句,如START TRANSACTION、
COMMIT或ROLLBACK。

     使用OLD和NEW關鍵字,能夠訪問受觸發程序影響的行中的列(OLD和NEW不區分大小寫)。

     在INSERT觸發程序中,僅能使用NEW.col_name,沒有舊行。在DELETE觸發程序中,僅能使用OLD.col_name,沒有新行。在UPDATE觸發程序中,可以使用OLD.col_name來引用更新前的某一行的列,也能使用NEW.col_name來引用更新后的行中的列。

用OLD命名的列是只讀的。你可以引用它,但不能更改它。對于用NEW命名的列,如果具有SELECT權限,可引用它。在BEFORE觸發程序中,如果你具有UPDATE權限,可使用“SET NEW.col_name = value”更改它的值。這意味著,你可以使用觸發程序來更改將要插入到新行中的值,或用于更新行的值。在BEFORE觸發程序中,AUTO_INCREMENT列的NEW值為0,不是實際插入新記錄時將自動生成的序列號。

     通過使用BEGIN ...END結構,能夠定義執行多條語句的觸發程序。在BEGIN塊中,還能使用存儲子程序中允許的其他語法,如條件和循環等。但是,正如存儲子程序那樣,定義執行多條語句的觸發程序時,如果使用mysql/14980.html">mysql程序來輸入觸發程序,需要重新定義語句分隔符,以便能夠在觸發程序定義中使用字符“;”。在下面的示例中,演示了這些要點。在該示例中,定義了1個UPDATE觸發程序,用于檢查更新每一行時將使用的新值,并更改值,使之位于0~100的范圍內。它必須是BEFORE觸發程序,這是因為,需要在將值用于更新行之前對其進行檢查:

mysql> delimiter //mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account   -> FOR EACH ROW   -> BEGIN   -> IF NEW.amount < 0 THEN   -> SET NEW.amount = 0;   -> ELSEIF NEW.amount > 100 THEN   -> SET NEW.amount = 100;   -> END IF;   -> END;//mysql> delimiter ;

      較為簡單的方法是,單獨定義存儲程序,然后使用簡單的CALL語句從觸發程序調用存儲程序。如果你打算從數個觸發程序內部調用相同的子程序,該方法也很有幫助。在觸發程序的執行過程中,MySQL處理錯誤的方式如下:

     (1)如果BEFORE觸發程序失敗,不執行相應行上的操作。
     (2)僅當BEFORE觸發程序(如果有的話)和行操作均已成功執行,才執行AFTER觸發程序。
     (3) 如果在BEFORE或AFTER觸發程序的執行過程中出現錯誤,將導致調用觸發程序的整個語句的失敗。
     (4)對于事務性表,如果觸發程序失?。ㄒ约坝纱藢е碌恼麄€語句的失敗),該語句所執行的所有更改將回滾。對于非事務性表,不能執行這類回滾,因而,即使語句失敗,失敗之前所作的任何更改依然有效。

例一:

mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount; 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美xxxx14xxxxx性爽| 日韩精品在线免费观看| 国内精品一区二区三区四区| 久久久久这里只有精品| 性欧美激情精品| 韩国欧美亚洲国产| 国产在线视频一区| 热门国产精品亚洲第一区在线| 欧美精品久久一区二区| 插插插亚洲综合网| 久久精品夜夜夜夜夜久久| 91国在线精品国内播放| 97国产精品视频| 亚洲精品美女网站| 亚洲精品之草原avav久久| 欧美激情精品久久久| 成人激情视频在线观看| 欧美精品中文字幕一区| 国内精品小视频| 91在线观看免费高清完整版在线观看| 中文字幕在线看视频国产欧美在线看完整| 91精品国产综合久久香蕉的用户体验| 色悠久久久久综合先锋影音下载| 久久久久久午夜| 欧美精品免费看| 亚洲一区二区国产| 欧美成人激情视频免费观看| 国产成人精品国内自产拍免费看| 久久99精品久久久久久噜噜| 黄色精品一区二区| 中文字幕在线成人| 国产欧美中文字幕| 国产香蕉97碰碰久久人人| 欧美一级在线亚洲天堂| 久久噜噜噜精品国产亚洲综合| 色综合久久悠悠| 日韩精品免费综合视频在线播放| 国产精品入口免费视| 亚洲精品久久久久久下一站| 亚洲精品中文字| 成人激情视频小说免费下载| 欧美色图在线视频| 欧美在线亚洲一区| 中文字幕久久亚洲| 91精品久久久久久综合乱菊| 亚洲综合第一页| 九九视频这里只有精品| 在线播放亚洲激情| 欧美一级免费视频| 日韩欧美在线第一页| 91精品国产成人www| 久久精品最新地址| 国产aⅴ夜夜欢一区二区三区| 欧美日韩国产一区中文午夜| 国产丝袜精品第一页| 欧美激情中文网| 国产成人精品免高潮在线观看| 亚洲国产精品系列| 国产免费观看久久黄| 欧美精品免费在线| 精品视频在线观看日韩| 亚洲精品久久久久国产| 国产专区欧美专区| 成人午夜在线观看| 日韩精品视频中文在线观看| 日韩激情视频在线| 亚洲视频网站在线观看| 热99精品里视频精品| 国产精品久久久久久久久久东京| 久久久久中文字幕2018| 国自在线精品视频| 亚洲精品福利在线观看| 一道本无吗dⅴd在线播放一区| 在线看国产精品| 欧美日韩国产色| 大胆人体色综合| 中文字幕精品网| 奇门遁甲1982国语版免费观看高清| 欧美高清第一页| 欧洲成人免费视频| 日韩成人激情视频| 欧美在线激情视频| 亚洲三级免费看| 一本一本久久a久久精品牛牛影视| 亚洲高清不卡av| 欧美电影第一页| 国产成人久久精品| 国产盗摄xxxx视频xxx69| 成人综合国产精品| 欧美床上激情在线观看| 欧美—级a级欧美特级ar全黄| 日韩在线中文视频| 亚洲欧美日韩在线高清直播| 日韩av在线播放资源| 欧美高清视频免费观看| 大荫蒂欧美视频另类xxxx| 亚洲国产精品中文| 亚洲品质视频自拍网| 国产精品国产福利国产秒拍| 97在线视频免费观看| 国语自产在线不卡| 亚洲欧美制服另类日韩| 亚洲图片欧洲图片av| 国产精品综合久久久| 亚洲剧情一区二区| 久久这里只有精品99| 日韩美女视频中文字幕| 国产精品久久精品| 欧美xxxx做受欧美.88| 精品国产乱码久久久久久虫虫漫画| 日韩在线视频网站| 国产中文字幕日韩| 粉嫩av一区二区三区免费野| 麻豆一区二区在线观看| 日韩免费观看高清| 欧美理论电影在线播放| 亚洲性线免费观看视频成熟| 亚洲国产中文字幕久久网| 国产精品揄拍500视频| 日本欧美一级片| 欧美午夜精品久久久久久久| 黑人极品videos精品欧美裸| 欧美俄罗斯乱妇| 国产黑人绿帽在线第一区| 国产欧美日韩免费看aⅴ视频| 国产精品美女主播| 91国产视频在线播放| 国产精品久久久久久av福利软件| 人妖精品videosex性欧美| 日韩欧美在线视频免费观看| 91av福利视频| 7m第一福利500精品视频| 久久福利视频导航| 欧美黑人性猛交| 免费97视频在线精品国自产拍| 日韩欧美在线看| 中文字幕一精品亚洲无线一区| 欧美黄色www| 北条麻妃一区二区在线观看| 欧美性资源免费| 亚洲香蕉av在线一区二区三区| 成人做爽爽免费视频| 91精品在线一区| 久久99热精品| 久久亚洲精品中文字幕冲田杏梨| 国产精品手机播放| 动漫精品一区二区| 亚洲成人久久久久| 免费不卡在线观看av| 国产大片精品免费永久看nba| 欧美日韩综合视频网址| yellow中文字幕久久| 日本免费久久高清视频| 成人精品在线视频| 亚洲福利视频免费观看| 亚洲黄色成人网| 视频直播国产精品| 欧美日韩免费网站| 亚洲精品一区二区在线| 精品日韩美女的视频高清| 91精品在线国产| 亚洲精品久久久久久下一站| 欧美极品xxxx| 成人欧美在线观看|