婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > mysql觸發器trigger實例詳解

mysql觸發器trigger實例詳解

熱門標簽:百應電話機器人優勢 電話外呼系統改號 怎樣在地圖標注銷售區域 南昌三維地圖標注 外呼系統打電話上限是多少 啥是企業400電話辦理 地圖標注費用是多少 曲靖移動外呼系統公司 武漢網絡外呼系統服務商

MySQL好像從5.0.2版本就開始支持觸發器的功能了,本次博客就來介紹一下觸發器,首先還是談下概念性的東西吧:

什么是觸發器

觸發器是與表有關的數據庫對象,在滿足定義條件時觸發,并執行觸發器中定義的語句集合。觸發器的這種特性可以協助應用在數據庫端確保數據的完整性。

舉個例子,比如你現在有兩個表【用戶表】和【日志表】,當一個用戶被創建的時候,就需要在日志表中插入創建的log日志,如果在不使用觸發器的情況下,你需要編寫程序語言邏輯才能實現,但是如果你定義了一個觸發器,觸發器的作用就是當你在用戶表中插入一條數據的之后幫你在日志表中插入一條日志信息。當然觸發器并不是只能進行插入操作,還能執行修改,刪除。

創建觸發器

創建觸發器的語法如下:

CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt
trigger_name:觸發器的名稱
tirgger_time:觸發時機,為BEFORE或者AFTER
trigger_event:觸發事件,為INSERT、DELETE或者UPDATE
tb_name:表示建立觸發器的表明,就是在哪張表上建立觸發器
trigger_stmt:觸發器的程序體,可以是一條SQL語句或者是用BEGIN和END包含的多條語句
所以可以說MySQL創建以下六種觸發器:
BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE
AFTER INSERT,AFTER DELETE,AFTER UPDATE

其中,觸發器名參數指要創建的觸發器的名字

BEFORE和AFTER參數指定了觸發執行的時間,在事件之前或是之后

FOR EACH ROW表示任何一條記錄上的操作滿足觸發事件都會觸發該觸發器

創建有多個執行語句的觸發器

CREATE TRIGGER 觸發器名 BEFORE|AFTER 觸發事件
ON 表名 FOR EACH ROW
BEGIN
  執行語句列表
END

其中,BEGIN與END之間的執行語句列表參數表示需要執行的多個語句,不同語句用分號隔開

tips:一般情況下,mysql默認是以 ; 作為結束執行語句,與觸發器中需要的分行起沖突

     為解決此問題可用DELIMITER,如:DELIMITER ||,可以將結束符號變成||

     當觸發器創建完成后,可以用DELIMITER ;來將結束符號變成;

mysql> DELIMITER ||
mysql> CREATE TRIGGER demo BEFORE DELETE
  -> ON users FOR EACH ROW
  -> BEGIN
  -> INSERT INTO logs VALUES(NOW());
  -> INSERT INTO logs VALUES(NOW());
  -> END
  -> ||
Query OK, 0 rows affected (0.06 sec)

mysql> DELIMITER ;

上面的語句中,開頭將結束符號定義為||,中間定義一個觸發器,一旦有滿足條件的刪除操作

就會執行BEGIN和END中的語句,接著使用||結束

最后使用DELIMITER ; 將結束符號還原

tigger_event:

load data語句是將文件的內容插入到表中,相當于是insert語句,而replace語句在一般的情況下和insert差不多,但是如果表中存在primary 或者unique索引的時候,如果插入的數據和原來的primary key或者unique相同的時候,會刪除原來的數據,然后增加一條新的數據,所以有的時候執行一條replace語句相當于執行了一條delete和insert語句。

觸發器可以是一條SQL語句,也可以是多條SQL代碼塊,那如何創建呢?

DELIMITER $ #將語句的分隔符改為$
BEGIN
sql1;
sql2;
...
sqln
END $
DELIMITER ; #將語句的分隔符改回原來的分號";"
在BEGIN...END語句中也可以定義變量,但是只能在BEGIN...END內部使用:
DECLARE var_name var_type [DEFAULT value] #定義變量,可指定默認值
SET var_name = value #給變量賦值
NEW和OLD的使用:

 根據以上的表格,可以使用一下格式來使用相應的數據:

NEW.columnname:新增行的某列數據
OLD.columnname:刪除行的某列數據
說了這么多現在我們來創建一個觸發器吧!

現在有表如下:

用戶users表

CREATE TABLE `users` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
 `add_time` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `name` (`name`(250)) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1;

日志logs表:

CREATE TABLE `logs` (
 `Id` int(11) NOT NULL AUTO_INCREMENT,
 `log` varchar(255) DEFAULT NULL COMMENT '日志說明',
 PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日志表';

需求是:當在users中插入一條數據,就會在logs中生成一條日志信息。

創建觸發器:

DELIMITER $
CREATE TRIGGER user_log AFTER INSERT ON users FOR EACH ROW
BEGIN
DECLARE s1 VARCHAR(40)character set utf8;
DECLARE s2 VARCHAR(20) character set utf8;#后面發現中文字符編碼出現亂碼,這里設置字符集
SET s2 = " is created";
SET s1 = CONCAT(NEW.name,s2);   #函數CONCAT可以將字符串連接
INSERT INTO logs(log) values(s1);
END $
DELIMITER ;

這里我用的navicat: 

查看觸發器SHOW TRIGGERS語句查看觸發器信息

Tip:

上面我用的navicat直接創建,如果大家用的mysql front,name這里會有個區別,我們刪除剛才的觸發器,在Mysql front中測試

drop trigger user_log;#刪除觸發器

打開Mysql Front:

 

mysql front在編譯sql時,不用定義結尾分隔符,修改后的sql直接這樣既可:

#DELIMITER $
CREATE TRIGGER user_log AFTER INSERT ON users FOR EACH ROW
BEGIN
DECLARE s1 VARCHAR(40)character set utf8;
DECLARE s2 VARCHAR(20) character set utf8;
SET s2 = " is created";
SET s1 = CONCAT(NEW.name,s2);   #函數CONCAT可以將字符串連接
INSERT INTO logs(log) values(s1);
END #$
#DELIMITER ;

這里再啰嗦幾句:

tips:SHOW TRIGGERS語句無法查詢指定的觸發器

在triggers表中查看觸發器信息

SELECT * FROM information_schema.triggers;

結果顯示了所有觸發器的詳細信息,同時,該方法可以查詢制定觸發器的詳細信息

SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='user_log';

tips:所有觸發器信息都存儲在information_schema數據庫下的triggers表中

     可以使用SELECT語句查詢,如果觸發器信息過多,最好通過TRIGGER_NAME字段指定查詢

回到上面,我們創建好了觸發器,繼續在users中插入數據并查看數據:

insert into users(name,add_time) values('周伯通',now());

好吧,我們再來查看一下logs表吧!

通過上面的例子,可以看到只需要在users中插入用戶的信息,日志會自動記錄到logs表中,這也許就是觸發器給我帶來的便捷吧! 

限制和注意事項

觸發器會有以下兩種限制:

1.觸發程序不能調用將數據返回客戶端的存儲程序,也不能使用采用CALL語句的動態SQL語句,但是允許存儲程序通過參數將數據返回觸發程序,也就是存儲過程或者函數通過OUT或者INOUT類型的參數將數據返回觸發器是可以的,但是不能調用直接返回數據的過程。

2.不能再觸發器中使用以顯示或隱式方式開始或結束事務的語句,如START TRANS-ACTION,COMMIT或ROLLBACK。

注意事項:MySQL的觸發器是按照BEFORE觸發器、行操作、AFTER觸發器的順序執行的,其中任何一步發生錯誤都不會繼續執行剩下的操作,如果對事務表進行的操作,如果出現錯誤,那么將會被回滾,如果是對非事務表進行操作,那么就無法回滾了,數據可能會出錯。

總結

觸發器是基于行觸發的,所以刪除、新增或者修改操作可能都會激活觸發器,所以不要編寫過于復雜的觸發器,也不要增加過得的觸發器,這樣會對數據的插入、修改或者刪除帶來比較嚴重的影響,同時也會帶來可移植性差的后果,所以在設計觸發器的時候一定要有所考慮。

觸發器是一種特殊的存儲過程,它在插入,刪除或修改特定表中的數據時觸發執行,它比數據庫本身標準的功能有更精細和更復雜的數據控制能力。

數據庫觸發器有以下的作用:

1.安全性。可以基于數據庫的值使用戶具有操作數據庫的某種權利。

  # 可以基于時間限制用戶的操作,例如不允許下班后和節假日修改數據庫數據。

  # 可以基于數據庫中的數據限制用戶的操作,例如不允許股票的價格的升幅一次超過10%。

2.審計。可以跟蹤用戶對數據庫的操作。   

  # 審計用戶操作數據庫的語句。

  # 把用戶對數據庫的更新寫入審計表。

3.實現復雜的數據完整性規則

  # 實現非標準的數據完整性檢查和約束。觸發器可產生比規則更為復雜的限制。與規則不同,觸發器可以引用列或數據庫對象。例如,觸發器可回退任何企圖吃進超過自己保證金的期貨。

  # 提供可變的缺省值。

4.實現復雜的非標準的數據庫相關完整性規則。觸發器可以對數據庫中相關的表進行連環更新。例如,在auths表author_code列上的刪除觸發器可導致相應刪除在其它表中的與之匹配的行。

  # 在修改或刪除時級聯修改或刪除其它表中的與之匹配的行。

  # 在修改或刪除時把其它表中的與之匹配的行設成NULL值。

  # 在修改或刪除時把其它表中的與之匹配的行級聯設成缺省值。

  # 觸發器能夠拒絕或回退那些破壞相關完整性的變化,取消試圖進行數據更新的事務。當插入一個與其主健不匹配的外部鍵時,這種觸發器會起作用。例如,可以在books.author_code 列上生成一個插入觸發器,如果新值與auths.author_code列中的某值不匹配時,插入被回退。

5.同步實時地復制表中的數據。

6.自動計算數據值,如果數據的值達到了一定的要求,則進行特定的處理。例如,如果公司的帳號上的資金低于5萬元則立即給財務人員發送警告數據。

到此這篇關于mysql觸發器trigger實例詳解的文章就介紹到這了,更多相關mysql觸發器實例內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • mysql觸發器(Trigger)簡明總結和使用實例
  • 一篇文章帶你深入了解Mysql觸發器
  • MySQL觸發器的使用
  • mysql日志觸發器實現代碼
  • mysql觸發器之觸發器的增刪改查操作示例
  • MySQL觸發器trigger的使用

標簽:吉林 黑河 荊州 甘南 隨州 資陽 錦州 滄州

巨人網絡通訊聲明:本文標題《mysql觸發器trigger實例詳解》,本文關鍵詞  mysql,觸發器,trigger,實例,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《mysql觸發器trigger實例詳解》相關的同類信息!
  • 本頁收集關于mysql觸發器trigger實例詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    av网站免费线看精品| eeuss国产一区二区三区| 欧美在线免费观看亚洲| 久久福利视频一区二区| 亚洲国产婷婷综合在线精品| 精品国产乱码久久久久久1区2区| 色婷婷久久一区二区三区麻豆| 狂野欧美性猛交blacked| 同产精品九九九| 一区二区三区**美女毛片| 亚洲欧洲美洲综合色网| 久久九九久久九九| 亚洲精品在线观| 91精品福利在线一区二区三区| 欧美日韩在线播放一区| 欧美性大战久久| 欧美天堂亚洲电影院在线播放 | 国产一区二区三区四区五区入口| 一区二区在线免费观看| 国产精品午夜久久| 国产日韩v精品一区二区| 久久久久久久久久久久久女国产乱| 欧美tickling挠脚心丨vk| 精品奇米国产一区二区三区| 精品国产三级电影在线观看| 欧美精品一区二区三区久久久| 日韩欧美国产不卡| 欧美一级欧美三级在线观看 | 91精品国产综合久久久久久漫画 | 亚洲精品日韩综合观看成人91| 亚洲欧美综合网| 国产精品国产自产拍高清av王其| 欧美精品一区二区三区很污很色的| 久久精品亚洲麻豆av一区二区| 久久久综合激的五月天| 精品日韩一区二区| 国产欧美精品一区aⅴ影院 | 狠狠网亚洲精品| 久久91精品久久久久久秒播| 国产福利一区二区| 色噜噜偷拍精品综合在线| 欧美日韩中文国产| 久久久久久久综合日本| 一区二区三区在线观看国产| 午夜精品久久久久久| 国产在线精品免费av| 91小视频在线观看| 日韩欧美一区二区三区在线| 中文在线资源观看网站视频免费不卡| 中文字幕一区视频| 五月婷婷欧美视频| 国产成人精品影视| 欧美日韩久久久一区| 久久久精品黄色| 天堂精品中文字幕在线| 成人黄页毛片网站| 精品免费99久久| 亚洲激情男女视频| 激情图片小说一区| 91国在线观看| 久久久99久久精品欧美| 亚洲一区二区三区四区在线 | 国产欧美日韩另类一区| 一区二区三区av电影| 国产一区二区三区蝌蚪| 欧洲视频一区二区| 精品999久久久| 一区二区三区国产| 国内成人免费视频| 在线观看国产一区二区| 国产日韩欧美电影| 九九**精品视频免费播放| 成人h动漫精品一区二区| 91麻豆精品国产91久久久| 一区二区三区在线观看视频| 国产高清在线精品| 7777精品伊人久久久大香线蕉完整版 | 日韩欧美一级二级三级久久久| 国产精品色在线| 日本在线不卡一区| 91黄色在线观看| 国产欧美精品在线观看| 国产一区二区三区四区五区美女| 日韩一区和二区| **网站欧美大片在线观看| 国产成人综合自拍| 久久午夜免费电影| 精品中文字幕一区二区| 欧美浪妇xxxx高跟鞋交| 国产精品不卡一区| www.日韩在线| 亚洲女爱视频在线| 91网址在线看| 亚洲色图色小说| 91国产免费观看| 亚洲一区电影777| 欧洲一区在线电影| 丝袜国产日韩另类美女| 欧美一级片在线看| 久久超碰97中文字幕| 精品国产乱码久久久久久久久| 欧美a级一区二区| 精品国产乱码久久久久久免费| 国产福利一区二区三区在线视频| 欧美韩国日本一区| 91黄色在线观看| 日本免费在线视频不卡一不卡二| 欧美刺激脚交jootjob| 国产福利91精品一区二区三区| 国产欧美日本一区二区三区| 91免费版在线| 麻豆精品久久精品色综合| 精品国产一区二区三区忘忧草| 国产麻豆91精品| 亚洲日韩欧美一区二区在线| 色综合久久久久网| 亚洲成av人片一区二区三区| 91精品国产全国免费观看 | 亚洲欧美日韩国产综合在线| 色婷婷精品久久二区二区蜜臂av | av资源网一区| 天涯成人国产亚洲精品一区av| 日韩美女视频在线| 成人午夜碰碰视频| 亚洲国产日韩精品| 久久婷婷色综合| 在线观看中文字幕不卡| 久久99精品久久久久婷婷| 欧美激情综合五月色丁香小说| 色综合久久六月婷婷中文字幕| 日本女优在线视频一区二区| 亚洲欧美在线视频观看| 日韩欧美成人一区| 色吊一区二区三区| 91女人视频在线观看| 亚洲国产精品久久久久秋霞影院| 天天色 色综合| 日韩美女视频一区二区在线观看| 国产电影一区在线| 天天综合天天综合色| 久久麻豆一区二区| 欧美日韩三级视频| 成av人片一区二区| 韩国女主播一区二区三区| 亚洲精选在线视频| 欧美国产成人精品| 欧美xxxxxxxxx| 欧美日韩一区二区欧美激情| 成人丝袜视频网| 精品一区二区成人精品| 亚洲成人免费观看| 国产精品久久久久久久第一福利 | 色婷婷综合激情| 成人性视频免费网站| 天堂资源在线中文精品| 亚洲欧洲综合另类| 国产精品视频一二三| 久久国产婷婷国产香蕉| 99re这里只有精品视频首页| 看片的网站亚洲| 欧美日韩精品一区二区| 国产精品18久久久久久久网站| 尤物在线观看一区| 国产女同性恋一区二区| 日韩一二三四区| 欧美男人的天堂一二区| 色成人在线视频| 成人a免费在线看| 国产专区欧美精品| 蜜臀av一区二区在线观看| 一区二区免费看| 国产精品国产自产拍高清av| 国产日韩欧美电影| 亚洲国产高清在线观看视频| 久久久久高清精品| 久久久久久久久岛国免费| 精品欧美乱码久久久久久| 欧美人与禽zozo性伦| 欧美日韩国产一区| 欧美日韩精品一区视频| 91麻豆精东视频| 色婷婷综合久久| 欧美三级电影在线看| 欧美日本一道本| 欧美电影免费观看高清完整版| 欧美videos大乳护士334| 精品国产网站在线观看| 久久影音资源网| 中文一区一区三区高中清不卡| 久久久一区二区三区捆绑**| 国产精品亲子伦对白| 中文字幕一区二区三区av| 亚洲少妇30p| 午夜精品一区二区三区电影天堂 | 亚洲一区免费观看| **网站欧美大片在线观看| 久久久一区二区三区捆绑**| 国产精品卡一卡二卡三| 亚洲人成精品久久久久久| 亚洲国产精品影院|