mysql事務本質 資料庫事務的本質

2021-10-17 23:01:17 字數 1522 閱讀 6795

事務的本質

redo log - 重做日誌,儲存sql語句到乙個指定的log檔案,先到logbuffer,然後commit或一定條件滿足後刷到磁碟/undo log - 回滾日誌,將當前要修改的行內容複製到undobuffer,滿足一定條件後刷到磁碟,儲存在資料檔案中

修改一行資料:

先用排他鎖鎖定該行,記錄redolog,把改行修改前的值copy到undolog中,然後修改當前行的值,填寫事物編號,並使回滾指標指向undolog中修改前的行

事物隔離級別

感覺這個例子比較通俗 基於事物的本質參考:可以增加如下理解

名稱解釋-t1

解釋-t2

read uncommitted

讀取未提交內容,髒讀

讀事物直接讀取主記錄,無論事物是否完成

begin transaction

update

rollback

select data

read committed

讀取提交內容

讀事物讀取最新的undolog,確保可以去到最新的更新,但重複可能會讀到不同的值

begin transaction

update

commit

begin transaction

update

commit

select data

select data

repeatable read

可重讀讀事物讀取指定版本號的undolog,確保可以多次重複讀取相同的值,但可能讀不到最新增加的值,因為insert不會記錄undolog

begin transaction

insert value into range

commit

begin transaction

insert value into range

commit

select data where range

select data where range

serializable

可序列化,為每個讀資料建立共享鎖

鎖表完全序列,未提交再操作等待

檢視oracle資料庫隔離級別

首先需要先在事物中,然後用如下sql檢視事物隔離級別

selectsid,serial#,flag,

case when bitand(flag,268435456) = 0 then 'serializable'

else 'read committed'

end asisolationlevel

from v$transactiont,v$session s

where t.addr=s.taddr

and audsid = userenv('sessionid');

sid serial# flag isolationlevel

52 3 3587 serializable

設定oracle資料庫隔離級別

set transaction isolation level***

mysql事務本質 MySQL基礎事務

事務的用法 l 開啟事務 start transaction l 執行sql操作 普通sql操作 l 提交 回滾 commit rollback 注意 l 建表的時候,選擇 innodb引擎才支援事務 l 預設情況下,mysql是自動提交事務,每次執行乙個 sql 語句時,如果執行成功,就會向資料庫...

mysql資料庫事務

維基百科 事務是資料庫管理系統 dbms 執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。只有innodb和ndb 1 原子性 atomicity 事務中的全部操作在資料庫中是不可分割的,要麼全部完成,要麼全部不執行。2 一致性 consistency 幾個並行執行的事務,其執行結果必須與...

MySQL資料庫事務

文章出處 只有innodb引擎支援事務,下邊的內容均以innodb引擎為預設條件 1 髒讀 2 不可重複讀 3 幻讀 1 讀未提交 read uncommitted 可能產生髒讀 不可重複讀 幻讀 2 讀已提交 read committed 避免了髒讀,可能產生不可重複讀 幻讀 3 可重複讀 rep...