无法理解php oracle函数oci_connect()

时间:2011-04-17 19:16:04

标签: php oracle

我在php.net的PHP/Oracle manual中阅读了以下内容:

  

当使用oci_execute()标志使用OCI_NO_AUTO_COMMIT执行更改数据的第一个SQL语句时,事务开始。其他声明进行的进一步数据更改将成为同一事务的一部分。在事务提交或回滚之前,事务中所做的数据更改是临时的。数据库的其他用户在提交之前不会看到更改。

有两件事我不明白:

  1. 什么是承诺?
  2. 这是什么意思“数据库的其他用户在提交之前不会看到更改?”他们怎么能看到变化?

2 个答案:

答案 0 :(得分:2)

嗯,你应该阅读更多关于交易的信息。

简单地说 - 您可以将事务中的任何查询视为草稿,临时数据集,只有您(在数据库会话/连接中)才能看到,除非您发出提交。

另一个类比的解释是将交易视为您之后实际写在纸上的事物的想法。提交是实际编写它的行为,因此它不再只存在于你的头脑中。

答案 1 :(得分:1)

提交是最终确定永久更改的交易。

由于Oracle具有读取一致性视图,因此启动事务的用户将只能看到新事务启动时提交的数据。因此,当用户A启动事务并且用户B更改表中的某些值并提交它时,用户A将不会看到更改的数据,直到用户A启动新事务。读取一致性视图确保所有用户始终看到一致状态,其中一个状态提交所有数据。

这导致表的单个块在undo表空间中可以有多个版本,只是为了支持各种事务的读取一致视图。