精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日韩伦理在线一区| 性感美女福利视频| 欧美精品二区| 亚洲精品小视频| 污片在线免费看| 毛片大全在线观看| 国产亚洲欧美一区在线观看| 成人免费午夜电影| 美日韩一二三区| 久久高清免费| 亚洲电影免费观看高清| 亚洲福利精品视频| 国产美女一区视频| 国产精品日产欧美久久久久| 国产精品久久久久免费| 中文字幕永久在线| 日韩视频精品在线观看| 日韩亚洲欧美中文高清在线| 精品一区二区三区四区五区六区| 久久sese| 亚洲成人av电影| 一区不卡视频| 国产在线观看高清视频| 国产99久久久精品| 国产精品在线看| 中文字幕激情小说| 欧美日韩hd| 色妞久久福利网| 少妇被狂c下部羞羞漫画| 国产精品原创视频| 在线一区二区观看| 国产视频一视频二| 国产黄色大片在线观看| 最好看的中文字幕久久| 日韩国产在线一区| 日本一级在线观看| av一二三不卡影片| a级国产乱理论片在线观看99| 亚洲视频一区二区三区四区| 噜噜噜91成人网| 91成人在线视频| 久草视频精品在线| 欧美三级第一页| 久久色精品视频| 亚洲精品成人av久久| 要久久电视剧全集免费| 亚洲精品国产品国语在线| wwwww在线观看| 欧美影院精品| 日韩午夜精品视频| 91香蕉国产线在线观看| 亚洲18在线| 欧美精品在线观看一区二区| 韩国视频一区二区三区| 日韩天堂在线| 欧美视频一区二区三区| 午夜免费一区二区| 影音成人av| 欧美色男人天堂| 亚洲欧美久久久久| 免费日韩成人| 91.成人天堂一区| 亚洲第一成肉网| 久久gogo国模啪啪裸体| 日韩免费观看高清完整版在线观看| 国内av一区二区| 欧美视频二区欧美影视| 日韩午夜精品电影| 免费看毛片的网站| 亚洲国产精品嫩草影院久久av| 亚洲精品美女在线| 自拍偷拍亚洲天堂| 残酷重口调教一区二区| 久久久久北条麻妃免费看| av成人免费网站| 亚洲高清自拍| 欧美一级视频在线观看| 潘金莲一级淫片aaaaaa播放| 日本v片在线高清不卡在线观看| 国产精品99久久久久久久久| 中文字幕欧美在线观看| 国内成人免费视频| 国产一区二区免费在线观看| 天天摸夜夜添狠狠添婷婷| 久久久久一区二区三区四区| 日韩av一级大片| 亚洲视频tv| 一区二区三区不卡在线观看| 毛片在线播放视频| 日韩制服一区| 日韩三级在线免费观看| 人人妻人人澡人人爽人人精品| 国产伦精品一区二区三区视频| 色999日韩欧美国产| 久久久久久久国产视频| 久久永久免费| 亚洲一区精品电影| 日韩av成人| 亚洲日本青草视频在线怡红院| 成人免费观看cn| 婷婷久久综合九色综合99蜜桃| 精品盗摄一区二区三区| 日本美女xxx| 黄色片在线免费| wwwww在线观看免费视频| 自拍偷拍国产精品| 欧美女人性生活视频| av日韩一区| 精品亚洲一区二区| 三级av在线免费观看| 一区二区三区四区五区在线| 国产精品夜色7777狼人| 天天干免费视频| 亚洲欧洲www| 99999精品视频| 日韩精品一区二区三区中文字幕 | 久久综合九色综合88i| 美女色狠狠久久| 日韩成人中文字幕| 欧美在线视频第一页| 日韩高清中文字幕一区| 精品国产乱码久久久久久蜜柚| 欧美一区二区三区在线观看免费| 婷婷激情综合网| 野花视频免费在线观看| 欧美疯狂party性派对| 91精品国产91久久久| 国产99视频在线| 国产精品美女一区二区| av免费在线播放网站| 国产精品三p一区二区| 久久久精品在线| 亚洲系列第一页| 国产欧美1区2区3区| 黄色国产一级视频| 国产+成+人+亚洲欧洲在线| 久久在线观看视频| 国产又粗又猛又爽又黄91| 久久亚洲精精品中文字幕早川悠里| wwwwww欧美| 99re91这里只有精品| 久久久国产一区| 国产精品乱码久久久| 中日韩av电影| 高清av免费看| 91亚洲国产成人久久精品| 国产精品入口福利| 91网在线播放| 欧美精品丝袜久久久中文字幕| x88av在线| 日本欧美在线观看| 日韩欧美一区二区三区四区| 欧美成人黑人| 亚洲天堂av图片| 波多野结衣电车| 日本一区二区三区高清不卡| 国产a级片免费观看| 国产一区二区三区电影在线观看 | 黄色高清视频网站| 2019中文亚洲字幕| 久久香蕉国产线看观看av| 国产精品污视频| 亚洲欧美成aⅴ人在线观看| 国产xxxxhd| 欧美三区美女| 久久国产精品高清| 国产成人精品亚洲日本在线观看| 亚洲人成欧美中文字幕| 国产乱码77777777| 国产精品精品国产色婷婷| 日韩视频在线观看一区二区三区| 亚洲国产精品成人| 国产高清在线一区二区| 碰碰在线视频| 亚洲视频国产视频| 亚洲视频在线观看一区二区| 亚洲激情在线播放| 成人免费无码大片a毛片| 石原莉奈一区二区三区在线观看| 亚洲巨乳在线观看| 亚洲一区二区三区中文字幕在线观看 | 黑人无套内谢中国美女| 在线看片一区| 欧洲精品久久| 国产精久久久| 羞羞色国产精品| 91成人高清| 欧美mv和日韩mv的网站| 无码一区二区三区| 亚洲日本一区二区三区| 性欧美成人播放77777| 奇米一区二区三区av| 激情五月六月婷婷| 亚洲日本三级| 亚洲一区二区三区久久| 中文字幕在线看片| 久久精品99久久香蕉国产色戒| 亚洲黄色一级大片| 在线观看亚洲专区| 国产亚洲精品久久久久久无几年桃 | 欧洲在线/亚洲| 无码人妻精品一区二区三区夜夜嗨| av中文一区二区三区| 亚洲午夜av在线| 最新视频 - x88av| 日本亚洲不卡| 成人激情在线播放| 水蜜桃在线视频| 欧美精品日韩www.p站| 天堂网www中文在线| 欧美一区二区性放荡片| 亚洲天堂一区在线| 亚洲欧美国产三级| 欧美性受xxxx黑人| 不卡av免费在线观看| 亚洲午夜激情影院| 久久午夜精品一区二区| 男人添女荫道口女人有什么感觉| 精品成人影院| 精品日本一区二区| 亚洲精品在线播放| 91精品视频专区| 精品欧美一区二区三区在线观看 | 欧美一区免费视频| 极品束缚调教一区二区网站| 国产日韩亚洲欧美| 亚洲永久av| 久久久影视精品| a免费在线观看| xxx欧美精品| 又爽又大又黄a级毛片在线视频| 日韩激情视频在线| 黄色福利在线观看| 欧美videos中文字幕| 国产乱淫a∨片免费观看| 色噜噜狠狠成人中文综合| 久草视频在线观| 姬川优奈aav一区二区| 国产在线综合网| 一区二区在线电影| 青草草在线视频| 亚洲三级在线播放| 国产福利视频网站| 最新国产精品久久精品| 91高清免费观看| 中文字幕日韩欧美一区二区三区| 久久成人激情视频| 国产色产综合产在线视频| 中文字幕免费看| 91麻豆国产精品久久| 人妻少妇精品视频一区二区三区| 成人性生交大片免费看中文网站| 最好看的中文字幕| 国产成人精品亚洲日本在线桃色| 欧美性猛交xx| 国产成人av影院| 欧类av怡春院| 91在线你懂得| 91视频免费观看网站| 久久久久久**毛片大全| 国产精品美女高潮无套| 国产精品久久免费看| 亚洲人与黑人屁股眼交| 椎名由奈av一区二区三区| 九九热精品在线观看| 亚洲国产中文字幕| 亚洲天堂视频网站| 色婷婷av一区二区三区之一色屋| 成年人视频免费| 91精品国产乱码久久蜜臀| 丰满少妇在线观看bd| 精品视频—区二区三区免费| 欧美成人综合在线| 色综合伊人色综合网站| 在线观看a级片| 2019中文字幕在线免费观看| 97久久香蕉国产线看观看| 国产精品一二三在线| 欧美二区观看| 精品久久久三级| 日韩情爱电影在线观看| 人妻av无码专区| 天堂蜜桃91精品| 日本亚洲一区二区三区| 不卡欧美aaaaa| 女人裸体性做爰全过| 一区二区不卡在线播放 | 国产cdts系列另类在线观看| 欧美精品久久久久久久| 久久99久久99精品免观看软件| 国产日韩中文字幕| 欧美一区二区三区红桃小说| 亚洲黄色成人久久久| 亚洲天堂男人| 亚洲36d大奶网| 不卡一区中文字幕| 日本午夜精品视频| 午夜久久久久久久久| 中文文字幕一区二区三三| 精品国产免费人成电影在线观看四季| 男女视频在线观看免费| 久久99精品久久久久久噜噜| 欧美专区福利免费| 国产精品xxx在线观看www| 欧美色蜜桃97| 免费看日本毛片| 国产一区二区日韩精品| 国产 欧美 在线| 一区二区三区成人| 中文字幕乱码在线观看| 亚洲精品久久在线| 主播国产精品| 国产精品丝袜久久久久久高清| 精品国产影院| 青青草视频在线视频| 精品制服美女丁香| 无码h肉动漫在线观看| 亚洲国产日韩在线一区模特| 7777久久亚洲中文字幕| 亚洲欧美中文日韩v在线观看| 羞羞视频在线观看不卡| 国产欧美亚洲视频| 欧美视频免费| 久久久精品在线视频| 成人一区在线看| 九九热精品在线观看| 欧美一区午夜精品| 日本美女在线中文版| 国产91在线高潮白浆在线观看| 大型av综合网站| 今天免费高清在线观看国语| 麻豆国产精品官网| 国产传媒在线看| 在线亚洲高清视频| 男人天堂综合| 欧美最猛性xxxx| 日韩高清成人在线| 国模无码视频一区二区三区| 国产91综合一区在线观看| 久久久久亚洲av无码专区体验| 欧美日韩精品一区二区三区四区 | 性视频1819p久久| 国产精品欧美大片| 日韩中字在线观看| 成人综合在线观看| 国产一级二级三级| 精品少妇一区二区| 538在线视频| 久99久在线| 久久av一区二区三区| 日本xxxxxxxxx18| 欧美亚洲尤物久久| 成av人电影在线观看| 国产精自产拍久久久久久| 色综合久久网| 欧美一级免费在线| 夜夜爽夜夜爽精品视频| 亚洲精品国产一区二| 国内精品美女av在线播放| 极品束缚调教一区二区网站| 116极品美女午夜一级| 亚洲国产激情av| 国产欧美综合视频| 久久人人爽人人爽人人片av高清| 老司机精品视频在线播放| 久久久久久久久久久久久国产精品 | 色综合久久久久网| 成人网视频在线观看| 成人两性免费视频| 国精品一区二区三区| 人人妻人人澡人人爽人人精品| 欧美专区亚洲专区| 成人在线网址| 极品日韩久久| 日本中文在线一区| 国产波霸爆乳一区二区| 亚洲黄色在线观看| 国产经典一区| avove在线观看| 91亚洲男人天堂| 一级黄色片在线观看| 欧美精品国产精品日韩精品| 美女久久久久| 一级黄色高清视频| 大荫蒂欧美视频另类xxxx| 欧美成人精品一区二区男人看| 91日韩久久| 日本va欧美va欧美va精品| 欧美日韩中文字幕在线观看| 日韩av网站在线| 曰本一区二区| 精品久久久久久久免费人妻| 亚洲色图一区二区| 欧洲免费在线视频| 亚洲综合中文字幕68页| 久久久久久色| 精品小视频在线观看| 中文字幕亚洲欧美一区二区三区| a级日韩大片| 色www免费视频|