MySQL中触发器
触发器是与某个事件相关的特殊存储过程,与存储过程不同的是,存储过程需要用 call 调用而出发器不需要使用call调用调用。
也就是自己预先定义好了,当某个事件发生时,就会自动出发触发器进行相关的操作。
仅对 insert 、 update 、delete 有效,对select无。
五要素
trigger_name :触发器名字,其实这个为了便于对触发器的修改与删除而存在。
trigger_time:触发事件,在事件触发前执行还是出发后执行。
tigger_action:触发的动作。
listen_object:监听对象。
listen_action:监听的动作。
下面是一个创建触发器的模板:
create trigger trigger_name trigger_time listen_action ON listen_object
FOR EACH ROW
BEGIN
trigger_action;
ENG$
注意:由于MySQL默认的是 ; 为语句结束符,因此在这里需要修改,我修改为$:delimeter $。
添加订单时,库存减少
订单是原先没有的,如果触发器的事件要引用新添加的订单的信息,那么就要用 new.列明,进行引用数据。
create trigger order_shop AFTER INSERT ON `order`
FOR EACH ROW
BEGIN
update shop set shop_count = shop_count-new.order_count where shop_id = new.shop_id;
END$
删除订单,库存增加
create trigger delete_order BEFORE DELETE ON `order`
FOR EACH ROW
BEGIN
update shop set shop_count = shop_count+OLD.order_count where shop_id = OLD.shop_id;
END$
注意:这里引用数据是使用 old.列明 ,原因在于引用的数据是已经存在了,所以用old
修改订单 ,修改库存
create trigger change_order AFTER UPDATE ON `order`
FOR EACH ROW
BEGIN
update shop set shop_count = shop_count+old.order_count - new.order_count where shop_id = new.shop_id;
END$
注意:这里都用到了old和new关键字,让库存加上原来的数据再减去新数据。
查看所有的触发器:
show triggers;
触发器 after 与 before 区别
after 是 先完成数据的增删改再触发
before 是 先完成触发在再增删改。 eg:限购
例如:没人仅限购五件商品,大于5的都设为5
create trigger example_before BEFORE INSERT ON `order`
FOR EACH ROW
BEGIN
IF new.order_count>5 THEN
SET NEW.order_count = 5;
END IF;
update shop set shop_count = shop_count-new.order_count where shop_id = new.shop_id;
END$
MySQL中触发器的更多相关文章
- MySQL 中触发器的应用
在一个教育系统里面,有 科目表 ,章节表(每一科目对应若干大章节),小节表(每一大章节下面有若干小节),习题表(每一小节对应若干习题), 在后台管理系统中 有这样几个功能要实现,在 科目列表页面中 ...
- 关于mysql中触发器old和new如何更好的区别我有话要说?
1.当使用insert语句的时候,如果原表中没有数据的话,那么对于插入数据后表来说新插入的那条数据就是new,如图所示: 2.当使用delete语句的时候,删除的那一条数据相对于删除数据后表的数据来说 ...
- 关于mysql中触发器old和new
1.当使用insert语句的时候,如果原表中没有数据的话,那么对于插入数据后表来说新插入的那条数据就是new,如图所示: 2.当使用delete语句的时候,删除的那一条数据相对于删除数据后表的数据来说 ...
- MYSQL中SHOW的使用整理收藏
好记性不如乱笔头吧....下面收藏整理了mysql中show 的使用技巧....有需要的博友可以看看哈 a. show tables或show tables from database_name; / ...
- Oracle使用触发器和mysql中使用触发器的比较——学习笔记
一.触发器 1.触发器在数据库里以独立的对象存储, 2.触发器不需要调用,它由一个事件来触发运行 3.触发器不能接收参数 --触发器的应用 举个例子:校内网.开心网.facebook,当你发一个日志, ...
- Oracle使用触发器和mysql中使用触发器的比较
一.触发器 1.触发器在数据库里以独立的对象存储, 2.触发器不需要调用,它由一个事件来触发运行 3.触发器不能接收参数 --触发器的应用 举个例子:校内网.开心网.facebook,当你发一个日志, ...
- MySQL中的存储过程、函数与触发器
一.对待存储过程和函数的态度 优点: 1.存储过程只在创建时进行编译,sql语句则每次执行都需要编译.能提高数据库执行速度. 2.简单复杂操作结合事物一起封装. 3.复用性高. 4.安全性高,可指定存 ...
- mysql中event的用法详解
一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...
- MySQL中的while、repeat、loop循环
循环一般在存储过程和存储函数中使用频繁,这里只给出最简单的示例 while delimiter $$ create procedure test_while() begin declare sum i ...
随机推荐
- Oracle序列和伪表
创建序列 create sequence sq_teacher_tnostart with 10 从哪一个数字开始increment by 1 每次增长的数字maxvalue 999999999999 ...
- TypeScript学习笔记(二) - 基本类型
本篇将简单介绍TypeScript的几种基本类型. TypeScript基本类型有如下几种: Boolean Number String Array Tuple Enum Any 另外还有void类型 ...
- sysstat工具
sysstat工具可以监控系统的IO,CPU,SWAP,LOAD,NETWORK,DISK 安装后,系统会生成定时任务脚本 路径:/etc/cron.d/sysstat 内容: # Run syste ...
- TCP/IP详解与OSI七层模型
TCP/IP协议 包含了一系列构成互联网基础的网络协议,是Internet的核心协议.基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层.网络层.传输层和应用层.下图表示TCP/IP模型与 ...
- FastAdmin 插件配置文件 info.ini 中的 state 什么意思?
FastAdmin 插件配置文件 info.ini 中的 state 什么意思? 在插件配置中有一个 state ,这是配置插件开关的.
- DNS中NS和SOA区别
ns 授權很簡單… 假設你註冊的 domain 叫 abc.com ,而你有 ns1 與 ns2 兩台 server . 那,你必需從 .com 的權威伺服器授權給你,其設定或類似如此: $ORIGI ...
- 【python】 Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat
刚在机器上windows环境下装上pip方便以后安装包的时候使用,谁知道第一次使用pip安装asyncio的时候就报错. 在Windows7x64下使用pip安装包的时候提示报错:Microsoft ...
- ASP/ASP.NET/VB6文件上传
1. asp asp 上传文件真的蛋疼,很麻烦,有时候就用第三方组件,或者比较复杂的写法来实现无组件上传. 测试OK的一个叫风声无组件上传类 V2.1 [Fonshen UpLoadClass Ver ...
- Visual Studio Community 2013 中文语言包-离线安装版
vs_langpack.exe /layout 命令运行或者批处理运行. 转自:http://www.tuicool.com/articles/uMzqAnA 现成安装包下载地址:链接: http:/ ...
- php7新特性一览
1.太空船操作符 用于比较2个表达式,例如当\(a小于,等于或大于\)b时,分别返回-1,0,1 php echo 1 <=> 1; //0 echo PHP_EOL; echo 1 &l ...