ThinkPHP5.0中的事务操作 --不能回滚

两周前才开始接触tp5。刚接触tp5.0的事务回滚。

环境:1. mysql使用的默认引擎是InnoDB 。2.前后使用的是同一个连接。3. 我要做的是批量插入数据,一条条检查,没错插入;有错回滚,之前的插入作废。4. 现在做的这个项目是tp5.0

1. 开始时因为不了解,每条检查完没问题时,插入该条数据,并“Db::commit();”,所以失败了。

事后总结:
1. Db::commit();//整个事务执行成功,可以理解为整个事务执行完了,我这里应该批量插入数据完成后再用这个方法,不应该插入一条commit()一下。
2. Db::rollback();//整个事务全部撤销,我是在检查数据时,不合格时用的,紧跟着return ‘xxxxxxxxx’;没问题。
3. Db::startTrans(); // 启动事务。
4. 按着ctrl,然后点击commit()这个方法,发现没有跳到commit()这个方法的定义处。跳到Db.class里,ctrl+f也搜不到commit()。其他两个方法也找不到。 但可以用,可以这样用。没问题。

2. 就是因为失败了, 之后又找不到commit()等方法,所以在tp5.1,自己写的demo中,各种试,还是不行。

事后总结:
1. tp5.1 有那三个方法。
2. 是数据库的表有问题,导致在tp5.0的项目里的都搞好了,tp5.1的还是不行。自己的demo用的数据库是我不知道从哪来的。一直都不认为表有问题,各种误解。
3. 把表导出来。

    CREATE TABLE `think_data` (
          `id` int(255) NOT NULL,
          `data` varchar(255) NOT NULL,
          PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;

这样的才对

ENGINE=InnoDB DEFAULT CHARSET=utf8;
是表的问题,和tp5事务基础知识不了解的问题。
 Db::startTrans(); // 启动事务

 Db::table('think_data')->insert(['id'=>28,'data'=>'thinkphp']);
 Db::table('think_data')->insert(['id'=>1,'data'=>'thinkphp']);

 Db::rollback();

正常的话,不报错(数据库没有id为1,28的数据),这两条插入语句不会起作用。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值