您的位置:首页 > 数据库 > MySQL

mysql 触发器的创建、问题、解决方…

2015-06-20 10:36 501 查看
触发器(trigger)

作用:

可以监视 增删改操作

并触发 增删改操作


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


创建触发器

(delimiter
$)

create trigger 触发器名称

after/before insert/update/deleteon 表名

for each row

begin

sql 语句一个或者多个语句,范围在 insert/update/delete内;

end ($)

在此需要重新设置结束符号

delimiter $


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


创建第一个简单触发器:


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


效果


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


g 表 羊自动减少 3只


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


发现问题:

1 、字符集问题导致插入数据失败

解决方案
修改字符集


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


2 、设置结尾符号语句 不可带 分号

否则设置不成功


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


解决方案


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


何在触发器中引用行的值


触发器的创建、问题、解决方案" />

对于insert 而言
,新增的行用new来表示。

行中的每一列的值,用
new.列名来表示。
对于delete而言,删去的行用 old来表示。

行中的每一列的值,用old.列名来表示。

对于update而言,更新前的行用 old来表示。old.列名表示更新前的引用。

更新后的行,用new.列名来表示更新后的引用。

触发器的删除

drop
trigger 触发器名称

触发器的显示


触发器的创建、问题、解决方案" />

清空表单

truncate 表名


触发器的创建、问题、解决方案" />

购买下单实例

1、创建满足条件的新的触发器


触发器的创建、问题、解决方案" />

2、执行insert(下第一笔订单
购买 4 号商品,数量为2)


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


3、查看o订单


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


4、g商品表中的对应id号得商品减少


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


完整购买案例

1、增加一个订单,库存相应减少


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


2、删除一个订单,库存相应增加


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />




触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


3、修改下单时,商品表数量相应发生变化


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />




触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


触发器里
after 和 before的区别

after 是先完成数据的操作,再出发时间,不能对前面的增删改作出影响。

如果用的是
before,可以对数据进行审查。是先于触发再完成增删改,可以审查、判断、即将发生的增删改操作。

before应用


触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />


创建触发器时即可对插入数据进行影响

create
trigger buy

before
insert on o

for
each row

begin

if
new.much >5 then

set
new.much=5;

end
if;

update
g set num = num-new.much where id = new.gid;

end$



触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: