不能理解PHP oracle函数oci_commit()


cany understand php oracle function oci_commit()

我从php.net中读到了以下PHP/Oracle手册:

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

有两件事我不明白:

  1. 提交是为了什么?
  2. "数据库的其他用户在提交之前不会看到更改"是什么意思?他们怎么会看不到这些变化呢?

嗯,你应该多读一些关于交易的知识。

简单地说,你可以把事务中的任何查询看作一个草稿,一个临时的数据集,只有你(在你的数据库会话/连接中)可以看到,除非你发出一个提交。

另一个类似的解释是把交易想象成你对某件事的想法,然后你把它写在纸上。提交是实际写下来的行为,这样它就不再只存在于你的脑海中。

提交是事务的最终化,其中的更改是永久的。

因为Oracle有读一致性视图,所以启动事务的用户只能看到新事务启动时提交的数据。因此,当用户A启动一个事务,用户B更改表中的一些值并提交时,用户A将不会看到更改的数据,直到用户A启动一个新事务。read consistent视图确保所有用户总是看到一个一致的状态,一个所有数据提交的状态。

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