事務及隔離級別

2021-09-19 17:15:28 字數 1633 閱讀 9755

事務是由乙個或者一組sql組成的執行單元。事務具有acid特性:

atomicity(原子性):同乙個事務裡要麼全部提交,要麼全部回滾,不能只有一部分成功或者一部分回滾。如果在事務執行過程

中發生了錯誤,那麼就要通過undo log將事務回滾到開始時的狀態。

consistency(一致性):事務和資料要保持一致性。提交的事務,那麼對應的資料也要做出相應的同步修改。例如:innodb

crash recovery的時候,日誌已經寫完,那麼對應的事務也要提交,否則對應的事務必須得回滾掉,這樣才能保證innodb

儲存引擎奔潰恢復前後的狀態一致;另一種情況,當事務提交,對應的資料頁要刷入磁碟的時候,innodb會通過doublewrite

buffer來保證資料刷盤的安全性。否則如果事務成功提交,資料頁刷盤出現斷裂,那麼innodb的一致性將會被破壞。

isolation(隔離性):每個session所對應的操作和其他的session應該互不影響,互相隔離。如果發生衝突,那麼innodb會通過

行鎖來進行相應的控制。

durability(永續性):事務所對應的操作最後都必將要持久化到磁碟檔案。innodb_flush_logs_at_trx_commit、sync_binlog等

引數的設定來控制持久化的時機。

上面了解了事務的四個特性,下面看一下innodb開啟事務的方式:

start transaction (read write | read only | with consistent snapshot):start transaction with consistent snapshot就是在做邏輯備份

時用到的開啟乙個一致性快照讀的事務。預設開啟乙個讀寫事務。

begin /begin work

結束乙個事務方式:

1,事務提交

commit;

開啟乙個新的事務(start tracsaction、begin、ddl);

set autocommit=1;

2,事務回滾

rollback;

連線斷開、超時斷開、被kill、宕機。

針對set autocommit=0好處就是多個sql提交時,不會每個sql都提交一次,提公升事務的效率。但是壞處就是有些事務忘記提交,

鎖一直不釋放,其他事務就會長期的鎖等待,影響tps。

接著看一下innodb的四種隔離級別:

read uncommitted(讀未提交):能讀到其他session未提交的事務。髒讀。

read committed(讀提交):只能讀到其他session已經提交的事務。不可重複讀/幻讀。

repeatable read(可重複讀):乙個session中乙個事務裡讀到的資料始終一樣(該事務不對該資料做出修改)。

serializable(序列):讀和寫操作都不能同時執行,只能序列操作。

對於髒讀、不可重複讀、幻讀,下圖可以很明顯看出三種現象的區別:

選擇什麼樣的隔離級別,主要看我們的業務需求。如果業務允許幻讀/不可重複讀的發生,那麼選擇rc隔離級別,減少鎖的粒

度,增加伺服器的qps;如果業務不允許幻讀/不可重複讀的發生,那麼只能選擇rr隔離級別。

事務及事務隔離級別

什麼是事務 事務是訪問資料庫的乙個操作序列,資料庫應用系統通過事務集來完成對資料庫的訪問。事務的正確執行使得資料庫從一種狀態轉換為另一種狀態。事務必須服從iso iec所制定的acid原則。acid是原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 du...

事務及事務隔離級別

事務是訪問資料庫的乙個操作序列,資料庫應用系統通過事務集來完成對資料庫的訪問。事務的正確執行使得資料庫從一種狀態轉換為另一種狀態。事務必須服從iso iec所制定的acid原則。acid是原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durabili...

事務及事務隔離級別

事務是訪問資料庫的乙個操作序列,資料庫應用系統通過事務集來完成對資料庫的訪問。事務的正確執行使得資料庫從一種狀態轉換為另一種狀態。事務必須服從iso iec所制定的acid原則。acid是原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durabili...