精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊一聊MySQL觸發器

數據庫 MySQL
在學習 MySQL 的過程中,可能你了解過觸發器的概念,不清楚各位是否有詳細的去學習過觸發器,最近看了幾篇關于觸發器的文檔,分享下 MySQL 觸發器相關知識。

[[414338]]

本文轉載自微信公眾號「MySQL技術」,作者MySQL技術。轉載本文請聯系MySQL技術公眾號。

1.觸發器簡介

觸發器即 triggers ,它是與表有關的數據庫對象,在滿足定義條件時觸發,并執行觸發器中定義的語句集合。它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行。觸發器經常用于加強數據的完整性約束和業務規則等。

參考官方文檔,觸發器創建語法模板如下:

  1. CREATE 
  2.     [DEFINER = user
  3.     TRIGGER trigger_name 
  4.     trigger_time trigger_event 
  5.     ON tbl_name FOR EACH ROW 
  6.     [trigger_order] 
  7.     trigger_body 
  8.  
  9. trigger_time: { BEFORE | AFTER } 
  10. trigger_event: { INSERT | UPDATE | DELETE } 
  11. trigger_order: { FOLLOWS | PRECEDES } other_trigger_name 

觸發器只能創建在永久表上,不能對臨時表或視圖創建觸發器。觸發器的名稱在單個數據庫內是唯一的。參考上面創建語句,觸發器創建有幾點要素,下面簡要說明下:

trigger_time:是觸發動作時間,可以是 BEFORE 或 AFTER ,表示觸發器在要修改的每一行之前或之后激活。

  • trigger_event:指示激活觸發器的操作類型。這些 trigger_event 值是被允許的:
  • insert:只要向表中插入新行,觸發器就會激活。例如 insert 、load data、replace 語句。
  • update:更改表中某一行數據時激活觸發器。例如 update 語句。

delete:從表中刪除某一行數據時激活觸發器。例如 delete 和 replace 語句。表上的 DROP TABLE 和 TRUNCATE TABLE 語句不會激活此觸發器,因為它們不使用 delete ,刪除分區也不會激活 delete 觸發器。

trigger_body:是觸發器激活時要執行的語句。如果要執行多個語句,可使用 BEGIN…END 復合語句結構。在觸發器主體中,可以使用 old 和 new 來引用觸發器中發生變化的記錄內容。

2.觸發器具體操作

下面來看下觸發器相關的具體操作:

  1. # 創建表 創建觸發器 
  2. mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2)); 
  3. Query OK, 0 rows affected (0.03 sec) 
  4. mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00); 
  5.  
  6. mysql> delimiter // 
  7. mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account 
  8.        FOR EACH ROW 
  9.        BEGIN 
  10.            IF NEW.amount < 0 THEN 
  11.                SET NEW.amount = 0; 
  12.            ELSEIF NEW.amount > 100 THEN 
  13.                SET NEW.amount = 100; 
  14.            END IF; 
  15.        END;// 
  16. mysql> delimiter ; 
  17.  
  18. # 驗證觸發器作用 
  19. mysql> select * from account; 
  20. +----------+---------+ 
  21. | acct_num | amount  | 
  22. +----------+---------+ 
  23. |      137 |   14.98 | 
  24. |      141 | 1937.50 | 
  25. |       97 | -100.00 | 
  26. +----------+---------+ 
  27. rows in set (0.00 sec) 
  28.  
  29. mysql> update account set amount = 114.98 where acct_num = 137; 
  30. Query OK, 1 row affected (0.01 sec) 
  31. Rows matched: 1  Changed: 1  Warnings: 0 
  32.  
  33. mysql> select * from account; 
  34. +----------+---------+ 
  35. | acct_num | amount  | 
  36. +----------+---------+ 
  37. |      137 |  100.00 | 
  38. |      141 | 1937.50 | 
  39. |       97 | -100.00 | 
  40. +----------+---------+ 
  41. rows in set (0.00 sec) 
  42.  
  43. # 查看觸發器 
  44. mysql> show triggers; 
  45.  
  46. # 刪除觸發器 
  47. mysql> drop trigger if exists upd_check; 
  48.  
  49. # 查看數據庫實例中所有觸發器 
  50. SELECT 
  51.  a.TRIGGER_SCHEMA, 
  52.  a.TRIGGER_NAME, 
  53.  a.ACTION_TIMING, 
  54.  a.EVENT_OBJECT_TABLE, 
  55.  a.EVENT_MANIPULATION  
  56. FROM 
  57.  information_schema.`TRIGGERS` a  
  58. WHERE 
  59.  a.TRIGGER_SCHEMA NOT IN ( 'information_schema''performance_schema''mysql''sys' ); 
  60.    
  61. delimiter // 設置MySQL執行結束標志,默認為; 

上面展示了一些關于觸發器的基本操作,其實觸發器在生產環境中還是比較少見的,即使它能解決我們某些數據庫需求,因為觸發器的使用存在一系列的缺點,簡要總結幾點缺點如下:

  • 使用觸發器實現的業務邏輯在出現問題時很難進行定位,特別是涉及到多個觸發器的情況下,會使后期維護變得困難。
  • 大量使用觸發器容易導致代碼結構被打亂,增加了程序的復雜性,
  • 如果需要變動的數據量較大時,觸發器的執行效率會非常低。
  • 觸發器隱式調用容易被忽略,出現問題不好排查。

但是觸發器也并不是一無用處,比如我們不想讓人刪除或更新這個表的數據,可以用觸發器實現,下面的一些場景可能對你有所啟發:

  1. # 禁止刪除數據 即使你有權限 
  2. mysql> select * from student; 
  3. +--------------+------+--------+-------+-------+ 
  4. | increment_id | s_id | s_name | s_sex | s_age | 
  5. +--------------+------+--------+-------+-------+ 
  6. |            1 | 1001 | sdfsd  | 男    |    18 | 
  7. |            2 | 1003 | zsdfsd | 女    |    19 | 
  8. +--------------+------+--------+-------+-------+ 
  9. rows in set (0.00 sec) 
  10.  
  11. mysql> delimiter // 
  12. mysql> CREATE TRIGGER `tri_delstu` BEFORE DELETE ON `student` FOR EACH ROW begin 
  13.     -> declare msg varchar(255); 
  14.     -> set msg="不允許刪除學生信息"
  15.     -> SIGNAL SQLSTATE 'HY000' SET  MESSAGE_TEXT = msg; 
  16.     -> end; // 
  17. Query OK, 0 rows affected (0.02 sec) 
  18.  
  19. mysql> delimiter ; 
  20. mysql> delete from student where s_id = 1003; 
  21. ERROR 1644 (HY000): 不允許刪除學生信息 
  22.  
  23. # 禁止更新某個字段 
  24. mysql> delimiter // 
  25. mysql> CREATE TRIGGER trg__updateSid BEFORE UPDATE ON `student` 
  26.     -> FOR EACH ROW 
  27.     -> BEGIN 
  28.     ->  DECLARE msg VARCHAR(100);  
  29.     ->  IF NEW.s_id <> OLD.s_id THEN 
  30.     ->  SET msg='不允許修改學號';  
  31.     ->  SIGNAL SQLSTATE 'HY000' SET message_text = msg;  
  32.     ->  END IF;  
  33.     -> END; // 
  34. Query OK, 0 rows affected (0.06 sec) 
  35.  
  36. mysql> delimiter ; 
  37. mysql> update student set s_id = 1002 where increment_id = 2; 
  38. ERROR 1644 (HY000): 不允許修改學號 
  39.  
  40. # 限制修改范圍 
  41. mysql> delimiter // 
  42. mysql> CREATE TRIGGER `tri_update_age` BEFORE UPDATE ON `student` FOR EACH ROW BEGIN 
  43.     ->         DECLARE msg VARCHAR(20); 
  44.     ->   IF (NEW.s_age<0) THEN  
  45.     ->         set msg="年齡不能小于0"
  46.     ->   signal sqlstate 'HY000' set message_text=msg; 
  47.     ->         END IF; 
  48.     -> END; // 
  49. Query OK, 0 rows affected (0.02 sec) 
  50.  
  51. mysql> delimiter ; 
  52. mysql> update student set s_age=10 where s_id = 1001; 
  53. Query OK, 1 row affected (0.01 sec) 
  54. Rows matched: 1  Changed: 1  Warnings: 0 
  55.  
  56. mysql> update student set s_age=-10 where s_id = 1001; 
  57. ERROR 1644 (HY000): 年齡不能小于0 

總結: 

本篇文章簡要介紹了觸發器的定義及使用案例。在業務邏輯復雜或表變動比較頻繁的系統還是不推薦使用觸發器,當然它也是有自己的應用場景,無論怎樣,觸發器的邏輯總是越簡單越好,我們應該讓數據庫做它擅長做的事,不能想著所有邏輯都在數據庫層面實現。

 

責任編輯:武曉燕 來源: MySQL技術
相關推薦

2020-10-15 06:56:51

MySQL排序

2022-12-26 08:13:54

子查詢MySQL

2021-04-23 10:31:18

MySQLRole數據庫

2021-03-01 18:37:15

MySQL存儲數據

2018-06-07 13:17:12

契約測試單元測試API測試

2021-01-28 22:31:33

分組密碼算法

2023-09-22 17:36:37

2020-05-22 08:16:07

PONGPONXG-PON

2021-01-01 09:01:05

前端組件化設計

2020-08-12 08:34:16

開發安全We

2022-10-08 11:33:56

邊緣計算云計算

2018-01-10 14:13:04

測試矩陣API測試

2022-11-26 00:00:06

裝飾者模式Component

2020-06-28 09:30:37

Linux內存操作系統

2019-12-17 10:06:18

CDMA高通4G

2022-03-08 16:10:38

Redis事務機制

2022-03-29 09:56:21

游戲版本運營

2020-09-08 06:54:29

Java Gradle語言

2023-07-06 13:56:14

微軟Skype

2021-02-06 08:34:49

函數memoize文檔
點贊
收藏

51CTO技術棧公眾號

天堂资源在线视频| 粉嫩一区二区三区在线看| 91看片淫黄大片一级在线观看| 亚洲成人网久久久| 国产91露脸中文字幕在线| 亚洲天堂国产视频| 欧美女v视频| 97人人澡人人爽91综合色| 中文字幕巨乱亚洲| 欧洲成人免费视频| 国产污在线观看| 中文字幕免费高清电视剧网站在线观看 | 久久国产精品高清一区二区三区| 性xxxx欧美老肥妇牲乱| 色婷婷激情一区二区三区| 99re在线观看视频| 九九九免费视频| 亚洲三级在线| 国产精品第一页第二页第三页| 欧美伊久线香蕉线新在线| 亚洲视频天天射| 青草视频在线免费直播| 激情成人综合网| 久久最新资源网| www.桃色.com| 91蜜桃在线视频| 国产午夜精品福利| 国产精品久久久久久久久久久久 | 黄页网站大全在线观看| 丰满人妻一区二区三区免费视频| 亚洲国产精品日韩专区av有中文| 日韩av中文字幕在线播放| 欧洲黄色一级视频| 激情在线视频| 成人黄色av电影| 2019中文字幕免费视频| 免费毛片在线播放免费| 日本在线电影一区二区三区| 欧美性色欧美a在线播放| 亚洲一区二区三区精品动漫| 中文字幕人妻精品一区| 天天精品视频| 欧美www视频| 99热在线这里只有精品| 精品欧美不卡一区二区在线观看| 高清不卡一区二区在线| 亚洲一区中文字幕| 午夜偷拍福利视频| 国产一区二区观看| 欧美狂野另类xxxxoooo| www.亚洲视频.com| 欧美精品少妇| 久久久亚洲综合| 成人免费在线网址| 日韩三级视频在线| 日韩在线视频精品| 中文字幕亚洲第一| 天美一区二区三区| 99久热在线精品视频观看| 欧美日韩国产美女| www.99热这里只有精品| freexxx性亚洲精品| 亚洲国产岛国毛片在线| 先锋影音一区二区三区| 精品人妻一区二区三区四区不卡 | 神马久久av| 欧美日韩在线一区二区| 国产二区视频在线| 人人干在线视频| 91亚洲国产成人精品一区二三 | 国产成人精品777777| 日韩电影一区| 久久精品电影网站| 久久久久亚洲av无码专区桃色| 日韩免费在线电影| 日韩欧美在线第一页| 国产一级片91| 天堂地址在线www| ww亚洲ww在线观看国产| 欧美日韩电影一区二区三区| 午夜精品久久久久久久99| 国产99久久久久| 亚洲v中文字幕| 91在线网址| 国产高清亚洲| 亚洲aaa精品| 欧美久久久久久久久久久久久 | 国产色噜噜噜91在线精品| 欧美淫片网站| 一本大道久久a久久综合| 国产成人久久777777| 最近高清中文在线字幕在线观看| 国产精品成人午夜| 国产精品日韩三级| 老司机精品视频在线观看6| 久久久久久久久伊人| 亚洲 国产 日韩 综合一区| www.久久ai| 亚洲欧洲性图库| 一本一生久久a久久精品综合蜜| 国产精品剧情| 日韩欧美国产网站| 中文字幕乱妇无码av在线| а天堂中文最新一区二区三区| 日韩一区二区在线观看视频| 99sesese| 国产综合色在线观看| 一本一道波多野结衣一区二区| 九九九九九国产| 日韩av影院| 精品视频在线播放色网色视频| 国产麻豆剧传媒精品国产av| 亚洲综合好骚| 伊人久久亚洲影院| 日韩在线播放av| 美女av免费看| 亚洲日本视频| 91国产精品电影| 国产手机在线视频| 久久精品国产一区二区三区免费看| 国产精品伦理在线| 18久久久久久| 国产又粗又黄又爽| 狠狠色狠狠色综合系列| 久久综合入口| 国产精品麻豆一区二区三区| 久久久久久99久久久精品网站| 波多野结衣三级在线| 精品国产丝袜高跟鞋| 欧美性猛交xxxx富婆弯腰| 熟妇女人妻丰满少妇中文字幕| 最新国产精品视频| 一区二区三区动漫| 人人澡人人澡人人看| 欧美在线观看天堂一区二区三区| 日韩美女中文字幕| 日韩一区二区三区不卡| 91丨porny丨最新| 免费观看亚洲视频| 青青青草视频在线| 91精品国产91久久久久久一区二区| 中文字幕成人免费视频| 少妇精品久久久一区二区三区| 97精品一区二区视频在线观看| 欧美性猛交bbbbb精品| 美腿丝袜在线亚洲一区| 亚洲一区免费网站| 国产福利视频在线| 欧美日韩国产a| 91麻豆制片厂| 国内视频精品| 国产成+人+综合+亚洲欧美丁香花| 亚洲精品一区二三区| 国产老女人精品毛片久久| 精品国产二区在线| 爱爱爱免费视频在线观看| 亚洲男人天堂av| 日韩av一二三四区| 最新亚洲精品| 国产va免费精品高清在线| 亚洲色图欧美视频| 自拍偷拍亚洲综合| 欧美精品 - 色网| 午夜精品国产| 国产亚洲精品自在久久| porn视频在线观看| 欧美理论电影在线| 黄色一级视频免费观看| 成人午夜电影小说| 日本三级福利片| 精品国产亚洲一区二区三区在线 | 成人国产精品久久久久久亚洲| 成人高潮成人免费观看| 欧美系列亚洲系列| 天堂网中文在线观看| 禁久久精品乱码| 精品国产乱码久久久久久蜜柚 | 亚洲国产精品91| 91手机在线观看| av在线电影观看| 欧美精品三级在线观看| 久久久久久国产精品视频| 蜜臀久久99精品久久久久宅男| 性欧美18一19内谢| 粉嫩一区二区三区四区公司1| 奇门遁甲1982国语版免费观看高清| 免费国产在线观看| 51久久夜色精品国产麻豆| 国产免费一区二区三区网站免费| 欧美深夜福利| 国产精品一区二区女厕厕| 亚洲 欧美 精品| 欧美三级资源在线| 欧美精品乱码视频一二专区| 91免费在线播放| 午夜精品免费看| 日韩欧美高清在线播放| 亚洲影院色无极综合| 松下纱荣子在线观看| 精品sm在线观看| 久久亚洲成人av| 久久久久九九视频| 国产精品偷伦视频免费观看了| 99精品在线观看| 久久av一区二区三区亚洲| www555久久| 欧美不卡在线视频| 中文字幕天堂在线| 亚洲成人午夜电影| 91丝袜在线观看| 久草这里只有精品视频| 亚洲一区三区| 欧美性生活一级片| 亚洲最大福利网| 岛国一区二区| 久久精品国产一区| 日本一二三区在线视频| 色婷婷av一区二区三区之一色屋| 爱爱免费小视频| 成人av网站在线观看免费| 在线观看免费的av| 久久一区精品| 一本一本a久久| 国产91精品对白在线播放| 免费在线观看精品| 97视频com| 超碰在线观看免费版| 在线精品高清中文字幕| 亚洲欧美日韩精品永久在线| 日韩视频免费观看高清完整版 | 亚洲第一精品福利| 99在线精品视频免费观看20| 亚洲欧洲韩国日本视频| 一色道久久88加勒比一| 99r精品视频| 精品人妻一区二区免费| 国产成人精品综合在线观看| a级黄色一级片| 国产精品hd| 国产一区二区三区播放| 91精品国产自产拍在线观看蜜 | 国产精品无码电影| 丝袜亚洲另类欧美综合| 日韩国产欧美亚洲| 亚洲欧洲一区| 久色视频在线播放| 国产欧美一级| 一区二区三区欧美成人| 成人羞羞网站入口免费| 亚洲精品免费一区二区三区| 欧美在线一级| 国产日韩欧美在线| ****av在线网毛片| 国模私拍一区二区三区| aⅴ在线视频男人的天堂| 亚洲欧美激情四射在线日| 在线观看亚洲一区二区| 亚洲一卡二卡三卡四卡五卡| 亚洲AV无码国产成人久久| 国产乱子伦视频一区二区三区 | 欧美国产中文字幕| 天堂在线中文资源| 欧美在线免费观看亚洲| 久久久久亚洲av成人片| 亚洲最新视频在线观看| 中文字幕伦理片| 亚洲国产精品黑人久久久| 少妇的滋味中文字幕bd| 成人欧美一区二区三区| 九九精品在线观看视频| 精品电影在线观看| 欧美日韩色视频| 亚洲精品va在线观看| 狠狠色狠狠色综合人人| 欧美偷拍第一页| 国产一区二区三区高清播放| 成人毛片视频网站| 久久精品女人| 日韩精品在线中文字幕| 国产精品一区亚洲| 国产高清视频网站| 老鸭窝毛片一区二区三区 | 精品无码人妻一区二区三区| 精品久久中文字幕| 久久久999久久久| 精品女同一区二区三区在线播放| 四虎影视一区二区| 亚洲一区二区三区小说| 亚洲天堂男人av| 91.com在线观看| 神马午夜一区二区| 欧美成人一区二区三区| 国产精品免费无遮挡| 欧美中文一区二区三区| 国产老女人乱淫免费| 亚洲精品国产综合区久久久久久久| 国产精品一区二区人人爽| 亚洲成av人乱码色午夜| 欧美性孕妇孕交| 久久国产精品免费视频 | 日韩激情网站| 亚洲视频电影| 国产九九精品| 青娱乐国产精品视频| 久久精品国产77777蜜臀| 国产精品果冻传媒| 国产精品色呦呦| 国产香蕉视频在线| 日韩一二在线观看| 成人性爱视频在线观看| 国内成人精品一区| 99久久久国产| 亚洲国产一区二区三区在线| 精品freesex老太交| 色综合电影网| 影音先锋一区| 亚洲天堂av一区二区三区| 久久久噜噜噜久噜久久综合| 欧美极品视频在线观看| 欧美人xxxx| av中文天堂在线| 日本老师69xxx| 欧美美女在线直播| h无码动漫在线观看| 激情亚洲综合在线| 亚洲av毛片基地| 色婷婷av一区二区三区gif| 嫩草影院一区二区| 欧美男插女视频| free性欧美| 91视频国产高清| 粉嫩的18在线观看极品精品| 伊人色综合影院| 国内久久视频| 人妻激情偷乱视频一区二区三区| 国产免费成人在线视频| 日韩欧美高清dvd碟片| 国产成人a人亚洲精品无码| 色综合伊人色综合网| 免费**毛片在线| 国产精品美女av| 亚洲精品a区| 久久亚洲免费| 一本综合久久| 玖玖爱视频在线| 国产精品视频九色porn| 中文亚洲av片在线观看| 中文字幕亚洲字幕| 国产69精品久久久久9999人| 日本视频一区在线观看| 欧美在线日韩| 国产在线视频三区| 尤物在线观看一区| 丰满熟女一区二区三区| 国内精品一区二区三区四区| 久久久精品国产**网站| 日韩电影天堂视频一区二区| 日韩欧美网址| 永久免费的av网站| 亚洲欧美在线视频观看| 国产精品久久久久精| 欧美床上激情在线观看| 99香蕉久久| 日韩中文字幕三区| 国产欧美日韩视频在线观看| 中文字幕永久免费视频| 久久精品视频99| jizzjizzjizz欧美| 精品久久一二三| 国产日韩欧美一区二区三区综合| 最近中文字幕av| 久久久成人的性感天堂| 一区二区三区视频播放| 午夜免费福利小电影| 国产日韩精品久久久| 国产精品久久久久精| 国内精品久久久久久久久| 欧美日韩激情在线一区二区三区| 第一区免费在线观看| 亚洲午夜久久久| 国产高清一区在线观看| 91在线观看免费高清| 99精品免费视频| 国产白丝一区二区三区| 欧美成人激情免费网| 国产伦精品一区二区三区视频金莲| 成人免费视频观看视频| jizzjizz欧美69巨大| 日本中文字幕在线不卡| 同产精品九九九| 亚洲s色大片| 精品网站在线看| 黄页视频在线91| 国产手机在线视频| 久久精品视频免费播放| 天堂日韩电影| 99热这里只有精品2| 色综合网站在线| 日韩少妇视频| 99视频在线免费观看|