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