2011-04-17 26 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