2011-04-17 28 views
1

我读在PHP/Oracle manual从php.net以下:藤理解PHP预言功能oci_commit()

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

有两件事情,我不明白:

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

这应该是很好的基本阅读:http://en.wikipedia.org/wiki/Database_transaction – 2011-04-17 19:33:28

回答

2

那么,你应该读一些关于交易。

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

另一个类比的解释是将交易视为您事后在纸上写下的内容的想法。提交是实际写它的行为,所以它不再只存在于你的脑海中。

1

承诺是变更永久化的交易的最终确定。

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

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

+0

ahaaaaaaaaaaaa,oky那么php + mysql怎么样我认为它使它自动不是它呢? – user700792 2011-04-17 21:41:40

+0

对于mysql我不知道。自动提交一些缺点,希望能够控制它。 – 2011-04-18 06:03:35