日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql触发器求属性和_MySQL触发器demo

發(fā)布時間:2025/3/11 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql触发器求属性和_MySQL触发器demo 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。