我在php.net的PHP/Oracle manual中阅读了以下内容:
当使用
oci_execute()
标志使用OCI_NO_AUTO_COMMIT
执行更改数据的第一个SQL语句时,事务开始。其他声明进行的进一步数据更改将成为同一事务的一部分。在事务提交或回滚之前,事务中所做的数据更改是临时的。数据库的其他用户在提交之前不会看到更改。
有两件事我不明白:
答案 0 :(得分:2)
嗯,你应该阅读更多关于交易的信息。
简单地说 - 您可以将事务中的任何查询视为草稿,临时数据集,只有您(在数据库会话/连接中)才能看到,除非您发出提交。
另一个类比的解释是将交易视为您之后实际写在纸上的事物的想法。提交是实际编写它的行为,因此它不再只存在于你的头脑中。
答案 1 :(得分:1)
提交是最终确定永久更改的交易。
由于Oracle具有读取一致性视图,因此启动事务的用户将只能看到新事务启动时提交的数据。因此,当用户A启动事务并且用户B更改表中的某些值并提交它时,用户A将不会看到更改的数据,直到用户A启动新事务。读取一致性视图确保所有用户始终看到一致状态,其中一个状态提交所有数据。
这导致表的单个块在undo表空间中可以有多个版本,只是为了支持各种事务的读取一致视图。