Stay hungry, Stay foolish

0%

[MySQL]事务处理实例

刚开始我对mysql的事务处理并不是多了解。就在搜索了一番,发现个通病:

大部分用来讲事务的例子都是用银行转账和购买图书,让人觉得事务除了处理这两种东西别无他用。

通过我自己的操作加理解如下:

事务就是一些SQL语句,它们是一个整体,要么全部执行,要么全不执行。

我用到事务是因为兑换礼物:

兑换礼物要扣除礼物的数目,同时减掉用户的积分,两个要么都执行,要么都不执行,这是一个事务。当然,也会发生竞争的现象,但是实现了这个事务,竞争就不会发生问题了。所以说竞争只是事务的一个子类,而不能说是事务。

下面用例子来说明一下:

1
2
3
4
5
6
7
8
9
10
11
12
//查看礼物是否有剩余的代码
//查看用户积分是否够
$dGift->beginTransaction(); //调用PDO的事务开启
$res1 = $dGift->editInfo($id); //通过ID修改礼物的信息
$res2 = $dUser->editPoint($user_id); //通过用户ID减去相关积分
if ($res1 && $res2){
$dGift->commit();
return true;
} else {
$dGift->rollBack();
return false;
}
据说打赏我的人,代码没有BUG