我有一個系統每秒處理很多查詢。我使用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
在交易過程中鎖定記錄
您可以使用['的mysqli :: begin_transaction'(http://php.net/manual/de/mysqli.begin-transaction.php) – TiMESPLiNTER 2014-09-25 08:46:42
@TiMESPLiNTER做到這一點具有mysqli_autocommit任何區別()? – 2014-09-25 08:48:50
'mysqli_autocommit()'只是定義了您執行的查詢是否在執行後立即提交。所以你必須關閉它(就像你已經在上面的代碼中那樣)來使用事務。 – TiMESPLiNTER 2014-09-25 08:52:07