mysql高级 tigger触发器 --[3]
来源:互联网 发布:阳春市网络问政 编辑:程序博客网 时间:2024/05/11 13:34
爆仓怎么办:
用sql的判断语句,就像某某语言一样!
/*之前一些语句:declare xx int/char。。 这个是声明变量if xxx then xyxyend if; if语句*/create trigger t2after inserton ordzfor each rowbegin update goods set number = number-new.gid where gid = new.number; // newend $-- t2基础上,完成much 和 num判断delimiter $create trigger t5after inserton ordz for each rowbegin declare rnum int;# 判断select number into rnum from goods where gid = new.gid;if new.much > rnum then set new.much = rnum;end if;update goods set number = number-new.much where gid = new.gid; end $# 报错:ERROR 1362 (HY000): Updating of NEW row is not allowed in after trigger # 说是不能在语句after之后 在搞# 得在语句执行前面诶 before# 应该在生米煮成熟饭之前搞create trigger t5beforeinserton ordz for each rowbegin declare rnum int;# 判断select number into rnum from goods where gid = new.gid;if new.much > rnum then set new.much = rnum;end if;update goods set number = number-new.much where gid = new.gid; end $+-----+------+--------+| gid | name | number |+-----+------+--------+| 1 | cat | 20 || 2 | dog | 20 || 3 | pig | 20 |+-----+------+--------+insert into ordz values(5,3,50); # 50头猪+-----+------+--------+| gid | name | number |+-----+------+--------+| 1 | cat | 20 || 2 | dog | 20 || 3 | pig | 0 |+-----+------+--------++-----+------+------+| oid | gid | much |+-----+------+------+| 5 | 3 | 20 |+-----+------+------+只是下了20头猪, 没有多余的啦~~~~
for each row 是什么?
行级触发器?
语句级触发器?
# 触发器的 for each row 是什么?触发器分为:语句级触发器, 和行级触发器比如create trigger tn after update on xxtable for each row begin sql N/end$执行:update xx table set xx=xx where id > 100那么:sqlN/ 被触发几次? 以为id > 100 被触发 100 次------------------------------delimiter $create trigger t4before updateon ordzfor each row begin insert into tmp values (5);end $## ERROR 1415 (0A000): Not allowed to return a result set from a trigger# 不允许 result 集合集create table tmp(id int)$select * from ordz $+-----+------+------+| oid | gid | much |+-----+------+------+| 1 | 1 | 2 || 3 | 2 | 2 || 4 | 3 | 30 || 5 | 3 | 20 |+-----+------+------+update ordz set much = 1 where oid = 5 $mysql> select * from tmp$+------+| id |+------+| 5 |+------+update ordz set much = 3 $mysql> select * from tmp$+------+| id |+------+| 5 || 5 || 5 || 5 || 5 |+------+影响多少行,每一行受影响, 触发器就执行,所以叫行级触发器!# 在oracle中如果不写, 那么无论update语句影响多少行,都只执行一次/*比如:1个人下了订单, 买了5件商品, insert 5 次,可以用行级触发器,修改5次库存用语句级来,insert一条发货提醒但是 -- mysql 暂时不支持 语句级的触发器for each row 是行级 ,mysql中必须有其他的数据库,如果不写,则默认为语句级的*/
0 0
- mysql高级 tigger触发器 --[3]
- mysql高级 tigger触发器 --[1]
- mysql高级 tigger触发器 --[2]
- 触发器 tigger
- Mysql Tigger触发器创建和使用
- mysql高级:event触发器
- mysql高级:触发器
- oracle For循环和触发器Tigger
- tigger
- MYSQL 触发器的高级使用
- Mysql高级-视图触发器存储过程
- mysql存储过程、触发器、事物高级应用
- mysql高级 视图,触发器,存储过程
- MySQL高级八——触发器的使用
- MySql高级—视图、函数、存储过程、触发器
- MySql高级—视图、函数、存储过程、触发器
- 【mysql 触发器】触发器使用
- oracle触发器高级教程
- Ubuntu12.04下eclipse提示框黑色背景色的修改方法
- 学习笔记 --- LINUX I2C总线驱动框架分析
- 我总是梦着,那座没有梦的城市
- java 文件路径
- iOS项目目录结构和开发流程(转载)
- mysql高级 tigger触发器 --[3]
- Numpy基础笔记
- js 刷新 reload refresh jqgrid
- linux o(1)调度
- matlab 和c混合编程-------------------基础
- TLD视觉跟踪算法
- JQuery 中有用的方法
- spring容器创建对象时抛错解决办法
- 在linux中打印函数调用栈