mysql触发器求属性和_MySQL触发器demo
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 触发器中调用存储过程
想要在MYSQL的触发器中调用存储过程,但是IDE提示: 0A000 Not allowed to return a result set from a trigger 触发器代码如下: DELIMI ...
- mysql在触发器中调用存储过程_mysql 触发器中调用存储过程
想要在MYSQL的触发器中调用存储过程,但是IDE提示: 0A000 Not allowed to return a result set from a trigger 触发器代码如下: DELIMI ...
- mysql触发器联立删除_mysql触发器删除实例1
mysql>create table t1 (a1 int);mysql>create table t2 (a2 int , b2 char(5));其中t2.a2和t1.a1是对应的,a ...
- mysql触发器发送curl请求_mysql触发器作用,好处和curl
什么是触发器: 触发器是一种特殊的存储过程,它在试图更改触发器所保护的数据时自动执行. 触发器有什么作用: 1.安全性.可以基于数据库的值使用户具有操作数据库的某种权利. 2.审计.可以跟踪用户对数据 ...
- mysql触发器区分新增 修改_MySQL触发器 , 判断更新操作前后数据是否改变
改动表为user , 改动后将部分信息写入cfq_tab表 1. 新增触发器 create TRIGGER cfq_on_user_add after insert on user for each ...
- mysql 查询语句属性值_MySQL学习——SQL查询语句(一)
查询数据是指从数据库中获取所需要的数据,查询数据是数据库操作中最常用也是最重要的操作,用户可以根据对数据的需求,使用不同的查询方式,通过不同的查询方式可以获得不同的数据,在MySQL中使用select ...
- mysql触发器 存储过程_mysql触发器和存储过程
Mysql触发器和存储过程 1 / 9Mysql触发器 1.语法:命名规则 CREATE TRIGGER { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ...
- mysql命令行查看表的触发器_Mysql事项,视图,函数,触发器命令(详解)
事项开启和使用 //修改表的引擎 alter table a engine=myisam; //开启事务 begin; //关闭自动提交 set autocommit=0; //扣100 update ...
- mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)
MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来 触发器:某个表发生更改时自动处理.触发器是MySQL响应delete,ins ...
最新文章
- 独家 | 由第一原理导出卷积
- 命令行启动tomcat
- python实现人脸识别_python人脸识别代码实现丨内附代码
- Centos7 Docker私有仓库搭建
- a4988 脉宽要求_基于STM32的微型步进电机驱动控制器设计
- JS-数据类型转换-运算符
- 51Nod-1090 3个数和为0【排序+二分查找】
- 硬币支付问题(贪心策略)
- 40_ZYNQ7020开发板RS485协议通信
- 华为手机html查看器,华为手机文件查看管理器
- python 狄里克雷平滑_狄里克雷平滑(Dirichlet)、線性插值平滑(Linear Interpolated)、拉普拉斯平滑(Laplacian)...
- 电商一定是一元化结构
- 135. 精读《极客公园 IFX - 上》
- 多线程 join 钉钉考勤
- Python 提示 ModuleNotFoundError: No module named ‘common‘
- kaldi跑自己数据遇到的问题合集(持续更)
- springmvc的过滤器--Filter
- Android沙箱自动化安全产品
- 计算机是如何跑起来的--读书笔记
- django框架中嵌入容联云sdk实现短信发送接口
热门文章
- Mongo数据库安装成Windows服务
- 几种开源软件授权协议
- 魔兽争霸3地图(WarIII Maps):三国猛兽传
- FusionCharts V3图表导出图片和PDF属性说明
- C#_XXX事件 的重载均与委托System.EventHandler不匹配
- ajax 同步加载数据
- 利用SQL查找表中的质数(prime number)和完全数(perfect number)以及几个有趣的SQL语句...
- dg oracle 切换模式_Oracle数据库 DGbroker三种保护模式的切换
- c语言源程序最多可能由组成,一个C语言源程序由若干函数组成,其中至少应含有一个()。...
- 6.dubbo常用的xml配置有哪些_【面试篇】必须掌握的Spring 常用注解