資料庫事務

2021-07-23 15:49:24 字數 879 閱讀 8555

$db->begin()

iret = $db->update('t_test',...)

$db->commit()

事務未提交之前 其中涉及到的記錄都會被鎖定

(個人理解 begin後執行語句 時 會鎖定涉及的 索引行和資料 直到事務提交或者回滾)

下面介紹一下這幾種事務隔離級別的區別以及可能出現的問題:

read uncommitted(未授權讀取、讀未提交):

如果乙個事務已經開始寫資料,則另外乙個事務則不允許同時進行寫操作,但允許其他事務讀此行資料。該隔離級別可以通過「排他寫鎖」實現。

避免了更新丟失,卻可能出現髒讀。也就是說事務b讀取到了事務a未提交的資料。

read committed(授權讀取、讀提交):

讀取資料的事務允許其他事務繼續訪問該行資料,但是未提交的寫事務將會禁止其他事務訪問該行。

該隔離級別避免了髒讀,但是卻可能出現不可重複讀。事務a事先讀取了資料,事務b緊接了更新了資料,並提交了事務,而事務a再次讀取該資料時,資料已經發生了改變。

repeatable read(可重複讀取):

讀取資料的事務將會禁止寫事務(但允許讀事務),寫事務則禁止任何其他事務。

避免了不可重複讀取和髒讀,但是有時可能出現幻讀。這可以通過「共享讀鎖」和「排他寫鎖」實現。

serializable(序列化):

提供嚴格的事務隔離。它要求事務序列化執行,事務只能乙個接著乙個地執行,但不能併發執行。如果僅僅通過「行級鎖」是無法實現事務序列化的,必須通過其他機制保證新插入的資料不會被剛執行查詢操作的事務訪問到。

序列化是最高的事務隔離級別,同時代價也花費最高,效能很低,一般很少使用,在該級別下,事務順序執行,不僅可以避免髒讀、不可重複讀,還避免了幻像讀。

資料庫事務

事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質 原子性 atomicity 事務中的操作要麼全部成功,要麼全部失敗。一致性 consistency 事務執行前後要保持資料庫的一致性。隔離性 iso...

資料庫 事務

資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...

資料庫事務

這段時間面試,由於基礎不是特別好,遇到一些要筆試的公司。就會表示出來 今天有人問我,資料庫事務 是什麼。我只感覺十分熟悉。但是又說不出所以然。回來找了一下,現在整理記錄 1 定義 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...