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,写具体的删除命令就好了

一篇简陋的笔记,也许有错,欢迎指正,轻拍~

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