ZJU數據庫原理-MySQL寫Trigger

參照了文檔和例子怎麼寫都不對,後來才慢慢把改正確,所以寫出來參考一下,trigger要求來自ZJU數據庫原理實驗三最後一小題。題目不難,就是同時踩多個坑容易崩潰。

題目:檢查一個借書證不能同時借三本書(簡化一點,認爲借書記錄中有記錄即爲借了書)。

涉及到的表borrow如下(還有card和book表):

borrow(
cno char(7),//卡號
bno char(8),//書號
borrow_date datetime,
return_date datetime,)

程序如下:

mysql> delimiter //
mysql> create trigger borr_exam after insert on borrow
     > for each row
     > begin if exists (select count(bno) from borrow group by cno having borrow.cno=NEW.cno and count(bno)>2) then
     > delete from borrow where bno = NEW.bno;
     > end if;
     > end;// 

需要注意的:

因爲繞了一大圈才寫出來,應該有更簡單的寫法,但是一定要注意下面幾點。

  1. delimiter//和//在這裏就是告訴mysql解釋器命令在什麼地方結束,否則在命令行輸入會報錯。(同時改變了結束標記,記得接下來用語句delimiter ;改回來)
  2. NEW默認就是新插入的那一條記錄
  3. 字段名命名不要用保留字,最好用反引號框起來以做區別` Name`。
  4. 第三句用having而不是where
  5. 分號該寫的地方不要忘
  6. 是count而不是sum(看到兩三個人寫錯)
  7. 在mysql不能使用rollback,寫具體的刪除命令就好了

一篇簡陋的筆記,也許有錯,歡迎指正,輕拍~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章