Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么事务阻塞MySQL中的简单插入? 事务查询 插入查询 问题_Php_Sql_Innodb - Fatal编程技术网

Php 为什么事务阻塞MySQL中的简单插入? 事务查询 插入查询 问题

Php 为什么事务阻塞MySQL中的简单插入? 事务查询 插入查询 问题,php,sql,innodb,Php,Sql,Innodb,如果在事务启动后执行insert查询,但insert不必等待事务完成。因为事务的更新查询不会锁定insert查询涉及的行 我想要的 如果插入查询不包含插入查询所需的相同serverToken,则插入查询将立即运行 先谢谢你 不确定您的整个过程,但为什么不在insert查询之前移动您的commit?如果insert失败?为什么insert会失败?问题可能与要插入的行链接到被锁定的行这一事实有关。因此,除了在插入之前提交之外,您别无选择。没有其他解决方案。如果insert查询失败,那么我必须重新更新

如果在事务启动后执行insert查询,但insert不必等待事务完成。因为事务的更新查询不会锁定insert查询涉及的行

我想要的 如果插入查询不包含插入查询所需的相同
serverToken
,则插入查询将立即运行

先谢谢你


不确定您的整个过程,但为什么不在insert查询之前移动您的
commit
?如果insert失败?为什么insert会失败?问题可能与要插入的行链接到被锁定的行这一事实有关。因此,除了在插入之前提交之外,您别无选择。没有其他解决方案。如果insert查询失败,那么我必须重新更新整个更新的语句,那么事务的好处是什么
    mysqli_begin_transaction($conn);
    $sql = "UPDATE foldertable SET trashed = 1 WHERE serverToken = (SELECT serverToken from servertoken where userToken = ? limit 1) and 
    
    (folderId = ?
    or 
    RootFolderPath LIKE 
                CONCAT (
                    (SELECT RootFolderPath FROM foldertable WHERE serverToken = (SELECT serverToken from servertoken where userToken = ? ) AND folderid = ? limit 1)
                    ,'/'
                    , ?
                    ,'%'

                )
    )";
    $stmt =  mysqli_stmt_init($conn);
    mysqli_stmt_prepare($stmt, $sql);
    mysqli_stmt_bind_param($stmt, "sisii", $data["userToken"], $id, $data["userToken"], $id, $id);
    if (!mysqli_stmt_execute($stmt)) {
        echo mysqli_stmt_error($stmt);
        $serverError = true;
        return;
    }
    // echo "\n\n affected rows " . mysqli_affected_rows($conn);
    if (mysqli_affected_rows($conn) > 0) {
        sleep(15);
        // Insert into bin folder
        $sql = "INSERT INTO binfolder (serverToken , folderId) value ( (SELECT serverToken from servertoken where userToken = ? limit 1) , ?)";
        $stmt =  mysqli_stmt_init($conn);
        mysqli_stmt_prepare($stmt, $sql);
        mysqli_stmt_bind_param($stmt, "si", $data["userToken"], $id);
        if (!mysqli_stmt_execute($stmt)) {
            echo mysqli_stmt_error($stmt);
            $serverError = true;
            return;
        }
        if (mysqli_affected_rows($conn) > 0) {
            $success = true;
            mysqli_commit($conn);
        }

    }
INSERT INTO foldertable(serverToken) SELECT (123456)