【发布时间】:2016-12-09 11:30:33
【问题描述】:
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 />";
}
当上述事务正在进行时,我尝试在表'order_table'中插入一条记录,它插入成功。如何锁定事务中的表并在提交或回滚后解锁它们。
【问题讨论】:
-
事务对其他用户隐藏相关的新记录,直到事务提交。任何人在您睡觉时对这些表进行选择都不会看到新数据。
标签: php sql-server transactions