mysql触发器输出提示信息_MySQL触发器demo

28fe3a79-4815-eb11-8da9-e4434bdf6706.png

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');

结果如下图所示:

2afe3a79-4815-eb11-8da9-e4434bdf6706.png

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的值:

2dfe3a79-4815-eb11-8da9-e4434bdf6706.png

还没有值,因为我们的触发器还没有触发(虽然我事先插入两条数据,再创建的触发器,不过逻辑上肯定是应该msgs=null的)。那么我再插入一条数据:

2ffe3a79-4815-eb11-8da9-e4434bdf6706.png

报错了,提示无法更新borrow表,其实就是插入了同一个cno的第三条借书记录,触发了触发器,再看看msgs是什么呢:

31fe3a79-4815-eb11-8da9-e4434bdf6706.png

这正是我们想要的结果。

4结语

MySQL触发器是个天坑,花了我几个小时写这玩意儿,有条件的同学去用sqlserver试试。shit,触发器里的borrow打成了brorow.

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值