触发器:
很方便,在商城中最常见。,你可以用两条语句,也可以用一个触发器
场景:
表中, 一个订单产生,然后库存减去数量。
表中,有关联的两个表,可在订单生成的时候判断客户的钱是否够
当有订单的时候,及时的向管理员发送一个信息。也可以用
英语:tigger 扳机;枪击;引线;触发;引起
一个表改变可以改变n个表。?
监视->触发
/*
触发器tigger
需求:
商品表:
订单表:
当下一个订单的时候对应的商品表相应减少
分析:
监视谁:ord
监视动作:insert
出发时间:fater # (暂选择之后)
出发事件:update
*/
create trigger t1
after # 什么时候触发
insert # 监视什么动作
on ord # 监视谁?
for each row # 暂时不理解
begin
update goods xxx
end;
创建试验表:
create table goods(
gid int auto_increment primary key,
name varchar(20),
number smallint
);
create table ordz(
oid int auto_increment primary key,
gid int,
much int
);
insert into goods values(1,'cat','20');
insert into goods values(2,'dog','20');
insert into goods values(3,'pig','20');
+-----+------+--------+
| gid | name | number |
+-----+------+--------+
| 1 | cat | 20 |
| 2 | dog | 20 |
| 3 | pig | 20 |
+-----+------+--------+
创建触发器:
-- 如果买了,向ordz表添加数据, 则需要另外再写一条向goods表中减少
-- 但是创建触发器就方便了
create trigger t1
after insert
on goods
for each row
begin
update goods set num = num-2 where gid = 1;
end;
-- 报错!!! 两个分号
最外层用 $ 符号做分隔符
delimiter $
create trigger t1
after insert
on ordz
for each row
begin
update goods set number = number-2 where gid = 1;
end $
show triggers \G
*************************** 1. row ***************************
Trigger: t1
Event: INSERT
Table: ordz
Statement: begin
update goods set number = number-2 where gid = 1;
end
Timing: AFTER
Created: NULL
sql_mode:
Definer: root@localhost
1 row in set (0.01 sec)
插入ordz表 订单:
insert into ordz values(1,1,2);
+-----+------+--------+
| gid | name | number |
+-----+------+--------+
| 1 | cat | 18 |
| 2 | dog | 20 |
| 3 | pig | 20 |
+-----+------+--------+
问题:
1. 都减少了猫两只
2. 如果订单多了怎么办?