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