触发器:
能监视:增、删、改
能触发:增、删、改
触发器 监视 表 监视事件 增删改 监视事件 after (发生之后)/before(发生之前) 触发事件 增删改
之后:比如你吃好饭之后,出去就要收钱
之前:比如你进公园之前,要票
创建触发器
监视地点 表名
监视事件 insert/update/delete
监视事件 alter/before
查看触发器 show triggers;
Create trigger triggerName
Alter/before insert/update/delete on 表名
For each row 这句话是行触发器 mysql里面没有表触发器
Begin
Sql 语句 一句或者多句 必须是 insert/update/delete ;必须是分号结束
End
写触发器的时候 先 delimiter $ 设置$是结束符
create trigger tg1
after insert on o
for each row
begin
update g set num = num - 3 where id = 2;
end;
删除 触发器
Drop trigger triggerName
如何引用触发器的值
对于insert而言 新增的行 用new来表示
行中的每一列 用 new.列名来表示
create trigger tg1
after insert on o
for each row
begin
update g set num = num - new.much where id = new.gid;
end;
删除订单的数量 库存相应改变
create trigger tg3
after delete on o
for each row
begin
update g set num = num + old.much where id = old.gid;
end$
对于delete 可以用old来表示数据
对于 insert 可以用new来表示
对于update 可以用修改之前用old 修改之后用new
修改订单
create trigger tg4
after update on o
for each row
begin
update g set num = num + old.much - new.much where id = old.gid;
end$
反正他是自动查询修改那一行的列 就算你sql语句里面没有列 他也会自己查询
After 是先完成 增删改 然后再触发
触发语句 晚于增删改,无法影响前面的增删改的动作
Before 是先完成触发,然后增删改
触发的语句先于监视的增删改发生
Create trigger tg5
Before insert on o
For each row
Begin
If new.mach >5 then
Set new.macth = 5;
End if;
Update g set num = num -new.much where id = new.gid;
End$