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

MySql事物触发器(实例)

2013-04-17 19:41 316 查看
1,连接查询

union 连接的是多个select 语句

join 连接查询:

当我们期望的结果不再同一张表上时,我们需要使用join连接查询

语法:

table1 join table2 on table1的某个字段 = table2的某个字段

条件是 商品表中商品的分类id = 分类表中这个分类的id

当查询语句中,多次使用某个表,或者这个表名特别长的时候,我们建议给这个表添加一个别名

mysql> selectgoods_name,shop_price,cat_name from ecs_goods as g join ecs_catego

ry as c on g.cat_id = c.cat_id whereg.shop_price>=1000;

join的分类:

左连接查询 leftjoin:查询的结果是只要左边有的记录,都会显示,右边没有的显示为null

右连接查询 rightjoin

内连接查询 innerjoin : 查询的结果是两个表都有的数据





事务:

什么是事务?

事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务

注意:mysql数据支持事务,但是要求必须是innoDB存储引擎

解决这个问题:

mysql的事务解决这个问题,因为mysql的事务特性,要求这组操作,要不全都成功,要不全都失败,这样就避免了某个操作成功某个操作失败。利于数据的安全

如何使用:

(1)在执行sql语句之前,我们要开启事务 start transaction;

(2)正常执行我们的sql语句

(3)当sql语句执行完毕,存在两种情况:

1,全都成功,我们要将sql语句对数据库造成的影响提交到数据库中,committ

2,某些sql语句失败,我们执行rollback(回滚),将对数据库操作赶紧撤销

php代码:



开启事务后,只要不执行commit,sql语句不会对真实的数据库造成影响

只有执行commit之后,才会对真实数据库造成影响

触发器:

触发器是数据库的一个程序,他是用来监听着数据表的某个行为,一旦数据表的这个行为发生了,马上执行相应的sql语句

触发器的语法结构:

create trigger 触发器的名称 触发器事件 on 监听的表名 for eachrow 行为发生后执行的sql语句

触发器事件组成:;两部分组成:

触发器事件发生的时间-----是在监听的表的行为 after before 常用的是after

触发器执行的内容:增删改

创建order 表的时候,需要注意,因为order在mysql中是一个关键字排序,为了避免错误的发生,我们可以添加反引号,表明这不是一个关键字

如何使用触发器:

案例研究:

一旦生成订单,对应的库存表要减去相应的数据

(1)建商品表和订单表



订单表



(2)给订单表绑定触发器,一旦订单表增加订单,马上执行sql语句,将商品库存表减去相应的数据





现在有个问题:

每次下订单后,库存表都是减去相应的数量固定死的,但是我们的需求是:用户下几个订单,库存表减去几个库存

如何在触发器中使用触发数据?

什么是触发的数据:就是用户在订单表中购买的数量

new 关键字代表新增加的数量,订单表中新下的订单数量

old 关键字代表是旧的记录(过去的记录,取消的订单数量)

new 的使用:



old的使用:

旧的过去的记录,之前买了几个商品,但是又不想要了,取消订单

取消订单后,库存中要增加的相应的数量



update中new 和 old的使用

现在的需求是:

之前购买了5个samsung手机,现在想买10个,需要更新订单表

这个时候,触发器就需要监听着update这个行为

先将之前下的订单撤销,再重新下订单





触发器是什么?

用来监听数据表的某个行为(insert,delete,update),一旦这个行为发生了,马上执行相应的sql语句

删除触发器:

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