Mysql学习——触发器
来源:互联网 发布:软件项目蓝图设计 编辑:程序博客网 时间:2024/05/29 09:12
一、触发器的定义
触发器是一类特殊的事务,可以监视某种数据操作(insert/delete/update),并触发相应操作(insert/delete/update)。
使用场景:
1、当向一张表中添加或删除记录时,需要在相关表中进行同步操作
2、当表上某列数据的值与其他表中的数据有联系时。
3、当需要对某张表进行跟踪时
二、触发器创建语法 —— 4要素
1、监视地点 table
2、监视事件 insert/update/delete
3、触发时间 after/before
4、触发事件 insert/update/delete
创建触发器的语法:
create trigger 触发器名称
after/before (触发时间)
insert/update/delete (监视事件)
on 表名 (监视地址)
for each row
begin
sql1;
..
sqlN;
end;
设置mysql 最外层分割符 delimiter $
查看已有触发器: show triggers
删除已有触发器:drop trigger 触发器名称
例子:
通过监视订单表的新增订单,减少商品表中对应商品的库存
商品表:
CREATE TABLE `good` (
`gid` int(11) NOT NULL,
`name` varchar(10) NOT NULL,
`num` smallint(6) DEFAULT NULL,
PRIMARY KEY (`gid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
订单表:
CREATE TABLE `ord` (
`gid` int(11) DEFAULT NULL,
`orderid` int(11) DEFAULT NULL,
`much` smallint(6) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
建立监听器: new 对应新行 old 对应旧行
delimiter $
create trigger good_num_trigger
after
insert
on ord
for each row
begin
update good set num = num - new.much where gid = new.gid;
end$
create trigger good_add_num
after
delete
on ord
for each row
begin
update good set num = num+old.much where gid =old.gid;
end$
delimiter ;
建立监听器:在订单订购数量改变时,更新商品库存表中的库存 new 对应新行 old 对应旧行
delimiter $
create trigger ord_update_much
before
update
on ord
for each row
begin
update good set num = num+old.much -new.much where gid =new.gid;
end$
delimiter ;
建立监听器:判断插入的订单的much 是否大于订购商品的库存,如果大于库存,则调整该订单的订购数量为当前商品库存
delimiter $
create trigger ord_check_much
before
insert
on ord
for each row
begin
declare
rnum int;
select num into rnum from good where gid = new.gid;
if new.much > rnum then
set new.much = rnum;
end if;
update good set num = num -new.much where gid =new.gid;
end$
delimiter ;
注意:for each row 在mysql 中的监听器必须有,在其他数据库中比如oracle中的监听器是可以缺失的
1、如果有 for each row ,则是行级监听器
执行的语句操作了n行数据,则该监听器被调用n次。
2、如果没有for each row,则是语句级监听器
按照监听到的语句数量,调用监听器
- Mysql学习——触发器
- mysql——触发器
- mysql——触发器
- Mysql学习笔记二十四——触发器
- mysql 触发器学习
- MySql触发器学习
- mysql 触发器学习
- MySQL 触发器简单学习
- mysql 触发器学习
- mysql 触发器学习
- mysql触发器学习
- mysql 触发器学习
- mysql触发器学习
- mysql 触发器学习
- MySQL触发器 trigger学习
- mysql触发器学习
- mysql触发器学习
- mysql 触发器学习
- iOS下载数据-断点续传
- java异常throw和throws区别
- CSS浮动属性Float详解
- Search in Rotated Sorted Array II
- JS打开新窗口的2种方式
- Mysql学习——触发器
- 关于mysql视图(转载)
- 微博营销实战4——网络舆论的监控与应对
- 263. Ugly Number
- Android----ListView的使用--->加载网络图片
- HDU5520 NumberLink(ACM/ICPC2015沈阳区域赛) 费用流
- mysql 数据库表分区 方式以及优化查询查看方式介绍
- 由ssh引发的对/etc/init.d/目录的思考
- android 休眠唤醒机制分析(一) — wake_lock