事务操作对很多新人来说, 可能有点陌生, 即使看了 ThinkPHP6 官方手册中事务操作的部分, 也仍然不知所解.
下面就给大家介绍下事务操作
一, 先说说使用场景
假设我需要给朋友转账 1000 元钱, 正常的业务逻辑是:
1, 银行从我的账户中扣除 1000 元
2, 银行给朋友账户加上 1000 元.
如果一切顺利, 则转账成功!
那么问题来了, 如果我不小心把银行账户输错, 导致银行查找不到我输入的银行账户, 但是这个时候钱已经从我的账户扣除了, 如何处理呢?
我们生活中经常说 "如果钱打不过去, 银行会退回来的", 就是这个意思.
二, 事务操作定义
那么通过上面的例子, 我们理解下到底什么是事务操作, 事务指的是逻辑上的一组操作, 组成这组操作的各个单元要么全都成功, 要么全都失败.
就如上面的打钱例子, 要么打钱成功, 如果不成功, 需要把我的钱退回来, 也就是返回到初始状态, 也叫做 "回滚".
三, ThinkPHP6 中的事务操作
我们理解了事务操作的使用场景, 那么在 ThinkPHP6 中如何使用呢?
- Db::transaction(function () {
- Db::table('think_user')->insert(['name'=>'aaa']);
- Db::table('think_user')->delete(1);
- });
我们看上面的例子, 只有当我们插入记录成功的时候才会做删除操作, 如果插入不成功, 不会做删除操作.
比如我们故意写错一个字段 name1, 数据表中没有 name1 该字段, 插入程序不会执行成功, 那么下面的删除语句没有问题, 但是他依然不会执行.
除此之外, 我们还可以手动控制事务. 看下面代码:
- // 启动事务
- Db::startTrans();
- try {
- Db::table('think_user')->find(1);
- Db::table('think_user')->delete(1);
- // 提交事务
- Db::commit();
- } catch (\Exception $e) {
- // 回滚事务
- Db::rollback();
- }
以上就是 ThinkPHP6 中的事务操作的内容, 通过咱们实际生活中的例子讲解, 大家对事务操作就可以很好的理解了.
点关注, 不迷路
来源: http://www.bubuko.com/infodetail-3719222.html