我有一个每秒处理许多查询的系统。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
在事务期间确实会锁定记录