mysql 触发器的创建、问题、解决方…
2015-06-20 10:36
501 查看
触发器(trigger)
作用:
可以监视 增删改操作
并触发 增删改操作
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
创建触发器
(delimiter
$)
create trigger 触发器名称
after/before insert/update/deleteon 表名
for each row
begin
sql 语句—一个或者多个语句,范围在 insert/update/delete内;
end ($)
在此需要重新设置结束符号
delimiter $
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
创建第一个简单触发器:
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
效果
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
g 表 羊自动减少 3只
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
发现问题:
1 、字符集问题导致插入数据失败
解决方案
修改字符集
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
2 、设置结尾符号语句 不可带 分号
否则设置不成功
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
解决方案
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
何在触发器中引用行的值
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" />
对于insert 而言
,新增的行用new来表示。
行中的每一列的值,用
new.列名来表示。
对于delete而言,删去的行用 old来表示。
行中的每一列的值,用old.列名来表示。
对于update而言,更新前的行用 old来表示。old.列名表示更新前的引用。
更新后的行,用new.列名来表示更新后的引用。
触发器的删除
drop
trigger 触发器名称
触发器的显示
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" />
清空表单
truncate 表名
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" />
购买下单实例
1、创建满足条件的新的触发器
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" />
2、执行insert(下第一笔订单
购买 4 号商品,数量为2)
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
3、查看o订单
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
4、g商品表中的对应id号得商品减少
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
完整购买案例
1、增加一个订单,库存相应减少
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
2、删除一个订单,库存相应增加
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
3、修改下单时,商品表数量相应发生变化
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
触发器里
after 和 before的区别
after 是先完成数据的操作,再出发时间,不能对前面的增删改作出影响。
如果用的是
before,可以对数据进行审查。是先于触发再完成增删改,可以审查、判断、即将发生的增删改操作。
before应用
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" 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$
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
作用:
可以监视 增删改操作
并触发 增删改操作
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
创建触发器
(delimiter
$)
create trigger 触发器名称
after/before insert/update/deleteon 表名
for each row
begin
sql 语句—一个或者多个语句,范围在 insert/update/delete内;
end ($)
在此需要重新设置结束符号
delimiter $
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
创建第一个简单触发器:
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
效果
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
g 表 羊自动减少 3只
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
发现问题:
1 、字符集问题导致插入数据失败
解决方案
修改字符集
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
2 、设置结尾符号语句 不可带 分号
否则设置不成功
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
解决方案
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
何在触发器中引用行的值
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" />
对于insert 而言
,新增的行用new来表示。
行中的每一列的值,用
new.列名来表示。
对于delete而言,删去的行用 old来表示。
行中的每一列的值,用old.列名来表示。
对于update而言,更新前的行用 old来表示。old.列名表示更新前的引用。
更新后的行,用new.列名来表示更新后的引用。
触发器的删除
drop
trigger 触发器名称
触发器的显示
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" />
清空表单
truncate 表名
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" />
购买下单实例
1、创建满足条件的新的触发器
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" />
2、执行insert(下第一笔订单
购买 4 号商品,数量为2)
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
3、查看o订单
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
4、g商品表中的对应id号得商品减少
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
完整购买案例
1、增加一个订单,库存相应减少
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
2、删除一个订单,库存相应增加
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
3、修改下单时,商品表数量相应发生变化
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
触发器里
after 和 before的区别
after 是先完成数据的操作,再出发时间,不能对前面的增删改作出影响。
如果用的是
before,可以对数据进行审查。是先于触发再完成增删改,可以审查、判断、即将发生的增删改操作。
before应用
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" 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$
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
触发器的创建、问题、解决方案" TITLE="mysql 触发器的创建、问题、解决方案" />
相关文章推荐
- mysql 命令行操作另外一种进入方式
- mysql 命令行操作另外一种进入方式
- mysql 字符集(CHARACTER SET)和…
- mysql 视图
- mysql  注释
- MYSQL 小细节
- mysql union 的用法
- mysql 子查询(完整)
- mysql 新的学习模式
- mysql 数据恢复 案例: “恢复/导入…
- mysql 数据库 备份和恢复练习
- mysql数据库  备份和恢复
- 刘道成  mysql 视频教程  配套材料
- mysql学习阶段性总结
- mysql 模糊查询
- mysql日期时间类型
- 传智播客  mysql 视频
- MySQL详解(3)----------运算符
- MySQL详解(2)----------存储引擎
- mysql连接查询中索引的重要性