概述
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的全部内容,希望文章能够帮你解决mysql触发器输出提示信息_MySQL触发器demo所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复