MySql触发器讲解及使用案例
1.什么是觸發器
觸發器(trigger):監視某種情況,并進行某種操作,它的執行并不是程序調用,也不是手工啟動,而是由事件來觸發,例如:對一張表進行操作(插入,更新,刪除)時,就會觸發執行事先編輯好的若干條SQL語句。
2.觸發器的特點與作用
觸發器里面的sql語句是一個事務,具有原子性,要么全部執行,要么全部不執行。
3.觸發器的創建
使用navicat工具,右鍵點擊表>設計表>觸發器>添加觸發器;
在這里設置觸發時機,和sql語句
sql語句寫在 BEGIN 和 END中間
4.NEW和OLD的使用
MySQL中定義了NEW 和OLD 兩個臨時表,用來表示觸發器的所在表中,觸發了觸發器的哪一行數據,用來引用觸發器中發生變化的記錄內容
1.在 inster 觸發器中,NEW 用來攔截并保存將要(before)或者已經(after) 插入的數據
2.在 update 觸發器中,OLD用來攔截并保存將要或已經修改的原數據,NEW用來攔截并保存將要或已經修改的為新的數據
3.在delete 觸發器中,OLD用來攔截并保存將要或或者已經被刪除的原數據
5.使用案例
例如:我們用一張班級表,一張學生表
場景一:我門往學生表增加成員時,觸發給對應的班級表人數+1
創建班級表:
?學生表:
?學生表通過classID字段關聯班級表
編寫觸發器:
右鍵student表>設計表>觸發器
然后設置觸發規則,我們設置在插入之后,即學生人數增加之后給對應班級人數+1
?更新條件為:班級id 等于 插入后數據classID字段的值
BEGINupdate class set number = number+1 where id = NEW.classID; END此時我們創建一個班級,人數為0
?
?然后在學生表添加一個學生,所在班級為1001
然后我們在返回class班級表,刷新一下數據,會發新此時的班級人數為1
?
?場景二:如果學生姓名叫做 小魔仙,則不允許插入
創建觸發器,選擇數據插入之前觸發該事件,如果插入數據studentName字段值等于 小魔仙 ,則提示請正確輸入您的姓名;
?
BEGINIF (NEW.studentName = '小魔仙') THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '請正確輸入您的姓名';END IF; END然后再次插入數據就會顯示該提示信息,并不運行插入
?
總結
以上是生活随笔為你收集整理的MySql触发器讲解及使用案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: erlang lists
- 下一篇: 第六周交流会内容