事務的本質
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...