MSSQLのトランザクションはテーブルをロックしますか?その場合、ロックはトランザクション全体の間保持されるか、ステートメント実行の間だけ保持されます。以下トランザクション例である上記のトランザクションが進行中である場合MSSQLのトランザクションはテーブルをロックする
if (sqlsrv_begin_transaction($dbConnection) === false) {
die(print_r(sqlsrv_errors(), true));
}
$query = "INSERT INTO order_table (name,description,created_at) VALUES ('test_name','test_Transaction','some_date')";
$stmt1 = sqlsrv_query($dbConnection ,$query) or die('MSSQL error: ' . mssql_get_last_message());
$query = "INSERT INTO other_details_table (order_id,details) VALUES ('1234','order_details')";
$stmt2 = sqlsrv_query($dbConnection ,$query) or die('MSSQL error: ' . mssql_get_last_message());
sleep('20'); // used to delay the transaction time
/* If both queries were successful, commit the transaction. */
/* Otherwise, rollback the transaction. */
if($stmt1 && $stmt2) {
sqlsrv_commit($conn);
echo "Transaction committed.<br />";
} else {
sqlsrv_rollback($conn);
echo "Transaction rolled back.<br />";
}
を(任意の構文エラーを無視する)、I「はORDER_TABLE」テーブルにレコードを挿入しようとし、それが正常に挿入されました。トランザクションにあるテーブルをロックし、コミットまたはロールバックの後にロックを解除するにはどうすればよいですか?
トランザクションは、トランザクションがコミットされるまで、関連する新しいレコードを他のユーザーから隠します。あなたが寝ている間にそれらのテーブルで選択を行っている人は誰も新しいデータを見ません。 –
は重複のように見えます:http://stackoverflow.com/questions/9842253/lock-table-while-inserting – FLICKER