php - 存储过程和包装它的 php 代码上的双重事务

标签 php mysql laravel transactions

我的代码如下。

1) PHP代码

\DB::transaction(function () use ($id, $member_id) {

                \DB::select(\DB::raw('call doJob(?,?,@pJobLogId)'), [$id, $member_id]);

});

2)存储过程,上面的doJob..

BEGIN

    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        ROLLBACK;
        RESIGNAL;
    END;

    START TRANSACTION;

    // codes(logic)...

    COMMIT;

END

以上有问题吗?如果我应该放弃一笔交易,我应该放弃哪一笔交易?

另外我不知道双重事务是否会导致此类错误。 我看到了如下的错误日志,但这几乎不会发生。

SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction

最佳答案

根据MySql官方文档:

Section 13.3.3 Statements That Cause an Implicit Commit

Transactions cannot be nested. This is a consequence of the implicit commit performed for any current transaction when you issue a START TRANSACTION statement or one of its synonyms. https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html

关于php - 存储过程和包装它的 php 代码上的双重事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55724107/

相关文章:

php - 如何在CentOs中安装php-xml

php - SHA1 校验和在 php 和 android 中对于同一个文件变得不同

php - 使用 PHP Redis 客户端,在应用程序的每个 PHP 脚本中创建新的 $connection 对象,或者创建一个 GLOBAL $connection 对象?

php - 自动 git pull 到服务器 : Host key verification failed

php - while 循环期间损坏的 PDO 插入

php - 在 mysql WordPress 数据库中的每一行的唯一 php 页面中显示字段

mysql - 如何在 R 中转义撇号以便将字符串插入 MySQL 表中

php - 如何获取 Storage::put 返回 false 的原因?

php - Elasticsearch 映射整数或长整型

php - 一直使用 Laravel Eloquent?