mysql触发器求属性和_MySQL触发器demo
MySQL觸發(fā)器示例
0寫在之前:
最近在帶浙大本科生的數(shù)據(jù)庫系統(tǒng)的上機課,我手里拿到的教學文檔非常的老,本人及不習慣老文檔里的sql server的操作,就讓大家安裝的MySQL,這就有了個問題:MySQL上很多SQLserver的操作都無法實現(xiàn),寫觸發(fā)器時大家遇到很多問題就來問我,于是我探索了一下MySQL觸發(fā)器的使用。
1觸發(fā)器要求:
假設有一個借書記錄表,規(guī)定一張借書卡一學期只能借至多2本書,當借第三本書時,觸發(fā)器觸發(fā),輸出不能借三本書,并自動回滾。
2首先數(shù)據(jù)庫
創(chuàng)建數(shù)據(jù)庫 借書記錄borrow: 各屬性(卡號,借書證號,借期,還期)的類型如下:
cno char(7),
bno char(8),
borrow_date date,
return_date date,
插入兩條數(shù)據(jù):
1. ('cno4','bno1','2010-9-4','2010-9-10');
2. ('cno4','bno2','2010-9-4','2010-9-10');
結果如下圖所示:
3創(chuàng)建觸發(fā)器
代碼如下:
DELIMITER ||
CREATE TRIGGER borrow_warning AFTER INSERT ON borrow FOR EACH ROW
BEGIN
DECLARE num int;
DECLARE msgs VARCHAR(60);
set num =(select count(cno) FROM borrow WHERE cno=new.cno);
IF num>2 THEN
select 'cannot brorow three books' into @msgs;
delete FROM borrow WHERE cno=new.cno AND bno=new.bno ;
END IF;
END ||
創(chuàng)建觸發(fā)器后記得取消符號聲明:DELIMITER ;,后面才能正常使用;
需要注意的是:
1 MySQL的觸發(fā)器中沒有print函數(shù),所以我定義了一個變量msgs,當借了三本書條件觸發(fā)時,我將需要輸出的信息傳入變量msgs
2 MySQL的觸發(fā)器中沒有rollback,所以我曲線救國,用delete將新插入的那條記錄刪除(當然這條刪除語句在某些情況下會刪錯,這里我就懶得深究了)
3查看結果
在此之前我們以插入了兩條記錄,并且兩條記錄的cno都是cno4,先查看一下msgs的值:
還沒有值,因為我們的觸發(fā)器還沒有觸發(fā)(雖然我事先插入兩條數(shù)據(jù),再創(chuàng)建的觸發(fā)器,不過邏輯上肯定是應該msgs=null的)。那么我再插入一條數(shù)據(jù):
報錯了,提示無法更新borrow表,其實就是插入了同一個cno的第三條借書記錄,觸發(fā)了觸發(fā)器,再看看msgs是什么呢:
這正是我們想要的結果。
4結語
MySQL觸發(fā)器是個天坑,花了我?guī)讉€小時寫這玩意兒,有條件的同學去用sqlserver試試。shit,觸發(fā)器里的borrow打成了brorow.
總結
以上是生活随笔為你收集整理的mysql触发器求属性和_MySQL触发器demo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嘉兴python培训_嘉服集团
- 下一篇: mysql fulltext 分页_关于