Php 为什么事务阻塞MySQL中的简单插入? 事务查询 插入查询 问题
如果在事务启动后执行insert查询,但insert不必等待事务完成。因为事务的更新查询不会锁定insert查询涉及的行 我想要的 如果插入查询不包含插入查询所需的相同Php 为什么事务阻塞MySQL中的简单插入? 事务查询 插入查询 问题,php,sql,innodb,Php,Sql,Innodb,如果在事务启动后执行insert查询,但insert不必等待事务完成。因为事务的更新查询不会锁定insert查询涉及的行 我想要的 如果插入查询不包含插入查询所需的相同serverToken,则插入查询将立即运行 先谢谢你 不确定您的整个过程,但为什么不在insert查询之前移动您的commit?如果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)