事務及設定MySQL隔離等級 學習筆記

2021-10-21 20:54:51 字數 1682 閱讀 4692

指訪問並可能更新資料庫中各項資料項的乙個程式執行單元。

原子性:事務所包含的所有操作,要麼全部執行,要麼全部不執行,不能停滯在中間環節。事務在執行過程**錯,會回滾到事務開始前的狀態,即事務是乙個不可分割的整體。

一致性:事務在開始和結束時,應滿足一致性約束。如將訂單行寫到了磁碟上,卻沒有寫入相應的訂單明細,則訂單與訂單明細之間的一致性就被破壞了;操作之前和操作之後總量是不變的,理解:a和b都有100元,a給b了100元,a和b的錢數總和還是200元。

隔離性:指多個事務併發訪問時,事務之間是隔離的,,乙個事務不應該影響其他事務執行,即多個併發事務之間要相互隔離

永續性:對資料庫所做的更改需持久的儲存在資料庫中,不會被回滾。即事務完成之後,結果能持久維持下去,不管斷電還是其他情況。

髒讀:讀取到另乙個事務回滾前的髒資料。即事務b對資料進行修改,事務讀取了修改之後的資料,b又對此資料進行了回滾,此時a讀到的資料就叫髒資料。

不可重複讀:事務a讀取資料後,事務b對此資料進行更改,當a再進行讀取時,發現資料改變了。

幻讀:在乙個事務內讀取到了別的事務插入的資料,導致前後讀取不一致。

不可重複讀針對的是update或delete,幻讀針對的是insert。

read uncommitted (讀未提交)

read committed (讀已提交)

repeatable reads (可重複讀)

serializable (序列化)

隔離級別

髒讀不可重複讀

幻讀read uncommitted (讀未提交)√√

√read committed (讀已提交)✘√

√repeatable reads (可重複讀)✘✘

√serializable (序列化)✘✘

✘隔離級別越高執行效率越低。

mysql支援以上四種隔離級別,預設隔離級別為repeatable reads (可重複讀)。

oracle 只支援serializable (序列化)和read committed (讀已提交),預設隔離級別為read committed (讀已提交)。

– 檢視當前事物級別:

select @@tx_isolation;

– 設定事務隔離級別

setsessiontransaction isolation level ;

global:設定全域性的事務隔離級別;

session:設定當前session的事務隔離級別,如果語句沒有指定global或session,預設值為session;

– 設定read uncommitted級別:

set session transaction isolation level read uncommitted;

– 設定read committed級別:

set session transaction isolation level read committed;

– 設定repeatable read級別:

set session transaction isolation level repeatable read;

– 設定serializable級別:

set session transaction isolation level serializable;

Mysql 事務隔離等級

1.未提交讀 2.提交讀 rc 不可避免 幻讀 3.可重複讀 rr 讀的資料存在快照中 臨鍵鎖 意向 排他 來避免 幻讀 4.序列化 髒讀 rc的情況下,有資料修改,2次讀取的結果不一致 幻讀 rc 情況下,有新資料 插入,2次讀取結果不一致 a.為了解決幻讀問題,innodb引入了gap鎖。在事務...

SpringBoot設定事務隔離等級

spring boot 使用事務非常簡單,首先使用註解 enabletransactionmanagement 開啟事務支援後,然後在訪問資料庫的service方法上新增註解 transactional 便可。在下文中會有圖例 關於事務管理器,不管是jpa還是jdbc等都實現自介面 platform...

SpringBoot設定事務隔離等級

spring boot 使用事務非常簡單,首先使用註解 enabletransactionmanagement 開啟事務支援後,然後在訪問資料庫的service方法上新增註解 transactional 便可。在下文中會有圖例 關於事務管理器,不管是jpa還是jdbc等都實現自介面 platform...