MySQL 之 触发器详解
2013-02-01 19:48
246 查看
触发器,顾名思义,一触即发。可以是在事件触发前,也可以是在世界触发后。触发器创建语法:官方定义:
CREATE [DEFINER = { [code]user| CURRENT_USER }]TRIGGER
trigger_name
trigger_time
trigger_eventON
tbl_nameFOR EACH ROW
trigger_body[/code]看不懂,来个直观的:create triggertriggerNameAfter/before insert/update/delete on表名for each row// 这句话固定的,mysql的触发器只支持行级别。Begin要执行的sql语句End;触发器只支持增删改这些操作。这是商品表,num,代表库存。mysql> select * from goods;+----+--------+--------+-------+-----+| id | name | cat_id | price | num |+----+--------+--------+-------+-----+| 1 | 苹果 | 1 | 4999 | 7 || 2 | nexus4 | 2 | 1999 | 5 || 3 | nokia | 3 | 1222 | 20 || 4 | 荣耀2 | 2 | 1888 | 5 || 5 | n93 | 3 | 2500 | 10 || 6 | 三星 | 2 | 3000 | 2 |+----+--------+--------+-------+-----+6 rows in set这是订单表,num,所订购商品的数量。mysql> select * from orders;+----+---------+---------+-----+| id | user | good_id | num |+----+---------+---------+-----+| 1 | gaotong | 1 | 1 |+----+---------+---------+-----+1 row in set现在需要做的是,当对orders表进行增删改时,goods表的库存量会相应的变化。由于我们早在trigger中执行sql语言,是以“ ; ”号结尾。要先更改下分隔符。分别以new 和 old 来引用,新行和旧行。看例子就知道了:mysql> delimiter $mysql> create trigger onInsertTrigger-> after insert on orders-> for each row-> Begin-> update goods set num = num + new.num where id = new.good_id;-> End$Query OK, 0 rows affected这样,在插入数据时,goods表的数据会相应的变化。删除和更新,同理!再来看下怎么用before。现在希望在插入数据之前做一些判断,如果插入的订单数大于10,就是非法的。要把订单数量改为5,然后再插入。首先要删除原来的trigger。mysql> drop trigger onInsertTrigger$Query OK, 0 rows affected
mysql> create trigger checkInsert-> before insert on orders-> for each row-> Begin-> if new.num > 10 then-> set new.num = 5;-> end if;-> update g set num = num-new.num where id = new.good_id;-> end$Query OK, 0 rows affected
相关文章推荐
- mysql 触发器使用及详解
- MySQL触发器使用详解
- Mysql事项,视图,函数,触发器命令(详解)
- mysql之触发器trigger 详解
- MySQL触发器使用详解
- MySQL 触发器详解及简单实例
- MySQL触发器使用详解
- MySQL触发器使用详解
- MySQL触发器使用详解
- MySQL触发器使用详解
- mysql之触发器trigger 详解
- MySQL触发器使用详解
- mysql触发器new old 详解 真实例子
- MySQL触发器使用详解
- 【mysql】触发器的实例详解
- MySQL触发器使用详解
- mysql触发器trigger 实例详解
- mysql触发器new old 详解 真实例子
- MySQL触发器使用详解
- mysql中触发器的使用详解