我试图充分理解事务的概念。因此,下面的问题......(当然新手,所以不要笑:D)PHP中的SQL服务器事务
我已经在PHP(使用微软的PHP SQL驱动程序)中设置(简化)事务。我想我要删除一些额外的处理后的行:
sqlsrv_begin_transaction($conn);
$sql = "SELECT * FROM test WITH (XLOCK) WHERE a<10";
$statement = sqlsrv_query($conn,$sql);
$sql = "DELETE FROM test WHERE a<10";
sqlsrv_query($conn,$sql);
$result = get_result_array($statement);
sqlsrv_commit($conn);
$result2 = get_result_array($statement);
1)我得到在$ result中预期的结果,但在$ RESULT2空数组。为什么?
我只希望得到$ result2的结果,因为事实上已经被执行了。我猜想$ result中的结果是内存中的一种“临时”结果,实际上并不是实际数据库中的结果。
2)它可能是在事务开始和实际提交之间,来自另一个连接的另一个查询改变了匹配的行(一个< 10)?这意味着我期望的结果根据$结果将不同于数据库中的实际更改。或者是(a)事务发生在数据库的内存中副本上(不受其他连接的内部查询影响),或(b)自事务开始以来获得的锁定是已经为来自其他连接的其他查询采取行动?
输入后,我期待答案b ....?
$ conn'中的连接在提交后仍然打开吗?如果没有,也许这就是'$ result2'为空的原因。 (它试图使用一个关闭的连接)。 – 2010-01-05 17:00:24