【发布时间】:2014-11-19 23:05:28
【问题描述】:
我有一个每秒处理许多查询的系统。我使用mysql 和PHP 对我的系统进行编码。
我的问题是mysqli事务仍然提交事务,即使记录被其他用户同时删除,我所有的表都在使用InnoDB。
这就是我使用 mysqli 编码交易的方式:
mysqli_autocommit($dbc,FALSE);
$all_query_ok=true;
$q="INSERT INTO Transaction() VALUES()";
mysqli_query ($dbc,$q)?null:$all_query_ok=false;
$q="INSERT INTO Statement() VALUES()";
mysqli_query ($dbc,$q)?null:$all_query_ok=false;
if($all_query_ok==true){
//all success
mysqli_commit($dbc);
}else{
//one of it failed , rollback everything.
mysqli_rollback($dbc);
}
以下是另一个用户在其他脚本中同时执行的查询,然后最终弄乱了预期的系统行为,
$q="DELETE FROM Transaction...";
mysqli_query ($dbc,$q)?null:$all_query_ok=false;
请指教,我是否错误地执行了交易?我已阅读有关行级锁定的信息,并相信 innoDB 在事务期间确实锁定了记录
【问题讨论】:
-
@TiMESPLiNTER 和 mysqli_autocommit() 有什么区别吗?
-
mysqli_autocommit()仅定义您执行的查询是否在执行后立即提交。所以你必须关闭它(就像你已经在上面的代码中所做的那样)才能使用事务。 -
不要在无声中投票,下拉评论让我知道如何改进问题
标签: php mysql sql transactions table-locking