參照了文檔和例子怎麼寫都不對,後來才慢慢把改正確,所以寫出來參考一下,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;//
需要注意的:
因爲繞了一大圈才寫出來,應該有更簡單的寫法,但是一定要注意下面幾點。
- delimiter//和//在這裏就是告訴mysql解釋器命令在什麼地方結束,否則在命令行輸入會報錯。(同時改變了結束標記,記得接下來用語句delimiter ;改回來)
- NEW默認就是新插入的那一條記錄
- 字段名命名不要用保留字,最好用反引號框起來以做區別` Name`。
- 第三句用having而不是where
- 分號該寫的地方不要忘
- 是count而不是sum(看到兩三個人寫錯)
- 在mysql不能使用rollback,寫具體的刪除命令就好了
一篇簡陋的筆記,也許有錯,歡迎指正,輕拍~