mysql 触发器的详细用法
来源:互联网 发布:剑灵金燕捏脸数据 编辑:程序博客网 时间:2024/05/16 08:00
触发器:
一类特殊的数据库程序,可以监视某种数据的操作(insert/update/delete),并触发相关的操作(insert/update/delete),保护数据的完整性
应用场景:数据同步
例如:当一个用户完整信息保存在A/B/C三张表中,传统方法维护用户信息需要将对应的信息使用条SQL语句,依次插入,但是使用触发器的方式的话,我们可以只用插入A表中一条数据,就会自动触发数据插入B/C表的操作,这样就可以通过一个表的操作,同步其他操作,实现自动化维护数据的目的。
触发器语法格式:
creat trigger 触发器名称after/before(触发器工作的时机)update/delete/insert(触发器监听事件)on 表名(触发器监听的目标表)for each row(行级监视,mysql固定写法,oracle不同)begin sql语句集........(触发器执行动作,分号结尾)end;
删除触发器:drop trigger if exist 触发器名称
查询数据库触发器:show triggers;
行变量:当目标表发生改变时候,变化的行可用行变量表示
new:代表目标表目标行发生改变之后的行
old:代表目标表目标行发生改变之前的行
触发器案例:商品表/订单表(商品数量控制)
触发器监听:insert
create trigger tr1after insert on ordersfor each rowbeginupdate goods set godnum = godnum-new.godnum where id = new.id;end;
分析:orders表添加新的记录之后,goods表对应的商品数量同步减少对应的商品订单出数量
触发器监听:delete
create trigger tr2after delete on ordersfor each rowbeginupdate goods set godnum= godnum+old.godnum where id = old.id;end
分析:客户删除订单,恢复商品表对应商品的数量
触发器监听:update
create trigger tr3after update on ordersfor each rowbeginupdate goods set godnum= godnum+(old.godnum-new.godnum) where id = old.id;end
分析:客户修改订单,商品表对应商品数量同步更新
触发器声明变量用法:
create trigger tr4before insert on ordersfor each rowbegin declare godSum int default 0; -- 定义触发器变量 select godNum into godSum from goods where godId = new.godId; -- 变量赋值 if godSum< new.godNum then-- 触发器控制逻辑 update goods set godNum = new.godNum where godId = new.godId; end if;end
分析:当客户新建订单超过商品表的商品数量则修改商品表,保商品表商品库存量非负
mysql触发器特别注意:
①:for each row:必须填写,保证mysql支持行级控制,oracle同时支持行级控制和语句级控制
②:注意:如果在BEFORE或AFTER触发程序的执行过程中出现错误,将导致调用触发程序的整个语句的失败。对于事务性表,如果触发程序失败(以及由此导致的整个语句的失败),该语句所执行的所有更改将回滚。对于非事务性表,不能执行这类回滚,因而,即使语句失败,失败之前所作的任何更改依然有效。
- mysql 触发器的详细用法
- MySQL 触发器的用法
- Mysql 中触发器的用法
- MySQL触发器的正确用法
- MySQL的经典用法(五)----触发器
- mysql触发器用法详解
- Mysql触发器用法
- mysql触发器用法
- mysql触发器作用及用法
- mysql中的存储过程、触发器、视图的用法
- Mysql存储过程,函数,视图,触发器的用法
- MySQL存储过程、游标、触发器和视图的简单用法
- mysql的limit的用法详细
- oracle触发器的用法
- 数据库触发器的用法
- oracle触发器的用法
- Mysql Update语句的详细用法
- MySQL limit实际用法的详细解析
- HDU 2033 JAVA
- leetcode274~H-Index
- 超大背包问题 折半枚举
- 我大C的博客开张啦!!!
- HDU 2034 JAVA
- mysql 触发器的详细用法
- mysql查询当天所有数据以及常用日期函数总结
- 李飞飞:如何教计算机理解图片
- HDU 2035 JAVA
- 放置江湖技术支持
- POJ 3349 Snowflake Snow Snowflakes (哈希表)
- [C#] C# 知识回顾
- initializer_list中的const auto& 问题
- 安装vim及插件