laravel + octane + swoole 偶发性 mysql事务 commit后没有写入数据库

1. 运行环境

1). 当前使用的 Laravel 版本?

Laravel Framework 11.44.2
//: <> (使用 php artisan --version 命令查看)

2). 当前使用的 php/php-fpm 版本?

PHP 版本:
PHP 8.2.22 (cli) (built: Sep 14 2024 14:25:13) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.22, Copyright (c) Zend Technologies
with Xdebug v3.2.0, Copyright (c) 2002-2022, by Derick Rethans

php-fpm 版本:

3). 当前系统

mac 和ubuntu 都有问题

2. 问题描述?

laravel + octane + swoole
在事务 里面insert 数据后, commit 也执行了
try catch 也包裹了, 最终接口返回了自增的id
但是马上去数据库看发现 数据并不存在
查看dblog 是有insert 语句的, 但是没有触发任何回滚事件的监听

3. 您期望得到的结果?

4. 您实际得到的结果?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

如果你不是用的闭包式事务 有可能其他地方的事务没有正常提交或者回滚 到时候这个时候下一个请求进到这一个work里面的时候 还在上一个未提交的事务里面 然后这个时候在开启事务 就是在当前事务下创建了一个Savepoint 然后只是把这个Savepoint提交了 但是事务还没真正的提交 所以能看到操作的日志记录 能看到自增id也变了

1个月前 评论
Smilephp (楼主) 1个月前
cccdz (作者) 1个月前
讨论数量: 31

伪代码 ,catch 没有捕获到任何错误,最终发现数据没有插入进去
`
try{
DB::beginTransaction();
insert xxxx
DB::commit();

}catch(\Throwable $e){
DB::rollBack();
throw new Exceptions($->getMessage());
}
`

1个月前 评论
springlee 1个月前
Smilephp (作者) (楼主) 1个月前
哪吒的狗腿子 4周前

排除乌龙事件,怕不是进程执行sql的时候堵塞了,接收下一个链接导致的事务混乱了~

1个月前 评论
Smilephp (楼主) 1个月前
Imuyu (作者) 1个月前
Smilephp (楼主) 1个月前
Imuyu (作者) 1个月前
Smilephp (楼主) 1个月前
CodingHePing 1个月前
Imuyu (作者) 1个月前

如果你不是用的闭包式事务 有可能其他地方的事务没有正常提交或者回滚 到时候这个时候下一个请求进到这一个work里面的时候 还在上一个未提交的事务里面 然后这个时候在开启事务 就是在当前事务下创建了一个Savepoint 然后只是把这个Savepoint提交了 但是事务还没真正的提交 所以能看到操作的日志记录 能看到自增id也变了

1个月前 评论
Smilephp (楼主) 1个月前
cccdz (作者) 1个月前

file

队列里面可能也存在这种情况 除了程序崩溃这种特殊情况外 忘记commit/rollback 或者异常捕获没有正确捕获 可以通过这种情况发现 去排查业务代码

1个月前 评论
Smilephp (楼主) 1个月前
cccdz (作者) 1个月前
Smilephp (楼主) 1个月前
cccdz (作者) 1个月前
Smilephp (楼主) 1个月前

后来怎么解决的?

1个月前 评论
Smilephp (楼主) 1个月前
Smilephp (楼主) 4周前

DB::transaction(function(){

}); //这样写

1个月前 评论
不负岁月 4周前

一种是: DB::transaction(function(){ }); 另一种 try catch了 是否可以再finally下

4周前 评论

DB::beginTransaction();不是应该放在try外面吗。。

3周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!