Mysql 事務隔離

2021-09-01 11:53:15 字數 1823 閱讀 4103

1、事務的特性:原子性、一致性、隔離性、永續性

2、多事務同時執行的時候,可能會出現的問題:髒讀、不可重複讀、幻讀

3、事務隔離級別:讀未提交、讀提交、可重複讀、序列化

4、不同事務隔離級別的區別:

讀未提交:乙個事務還未提交,它所做的變更就可以被別的事務看到

讀提交:乙個事務提交之後,它所做的變更才可以被別的事務看到

可重複讀:乙個事務執行過程中看到的資料是一致的。未提交的更改對其他事務是不可見的

序列化:對應乙個記錄會加讀寫鎖,出現衝突的時候,後訪問的事務必須等前乙個事務執行完成才能繼續執行

5、配置方法:啟動引數transaction-isolation

6、事務隔離的實現:每條記錄在更新的時候都會同時記錄一條回滾操作。同一條記錄在系統中可以存在多個版本,這就是資料庫的多版本併發控制(mvcc)。

7、回滾日誌什麼時候刪除?系統會判斷當沒有事務需要用到這些回滾日誌的時候,回滾日誌會被刪除。

8、什麼時候不需要了?當系統裡麼有比這個回滾日誌更早的read-view的時候。

9、為什麼盡量不要使用長事務。長事務意味著系統裡面會存在很老的事務檢視,在這個事務提交之前,回滾記錄都要保留,這會導致大量占用儲存空間。除此之外,長事務還占用鎖資源,可能會拖垮庫。

10、事務啟動方式:一、顯式啟動事務語句,begin或者start transaction,提交commit,回滾rollback;二、set autocommit=0,該命令會把這個執行緒的自動提交關掉。這樣只要執行乙個select語句,事務就啟動,並不會自動提交,直到主動執行commit或rollback或斷開連線。

11、建議使用方法一,如果考慮多一次互動問題,可以使用commit work and chain語法。在autocommit=1的情況下用begin顯式啟動事務,如果執行commit則提交事務。如果執行commit work and chain則提交事務並自動啟動下乙個事務。

1.innodb支援rc和rr隔離級別實現是用的一致性檢視(consistent read view)

2.事務在啟動時會拍乙個快照,這個快照是基於整個庫的.

基於整個庫的意思就是說乙個事務內,整個庫的修改對於該事務都是不可見的(對於快照讀的情況)

如果在事務內select t表,另外的事務執行了ddl t表,根據發生時間,要嘛鎖住要嘛報錯(參考第六章)

3.事務是如何實現的mvcc呢?

(1)每個事務都有乙個事務id,叫做transaction id(嚴格遞增)

(2)事務在啟動時,找到已提交的最大事務id記為up_limit_id。

(3)事務在更新一條語句時,比如id=1改為了id=2.會把id=1和該行之前的row trx_id寫到undo log裡,

並且在資料頁上把id的值改為2,並且把修改這條語句的transaction id記在該行行頭

(4)再定乙個規矩,乙個事務要檢視一條資料時,必須先用該事務的up_limit_id與該行的transaction id做比對,

如果up_limit_id>=transaction id,那麼可以看.如果up_limit_idtransaction id,才返回資料

4.什麼是當前讀,由於當前讀都是先讀後寫,只能讀當前的值,所以為當前讀.會更新事務內的up_limit_id為該事務的transaction id

5.為什麼rr能實現可重複讀而rc不能,分兩種情況

(1)快照讀的情況下,rr不能更新事務內的up_limit_id,

而rc每次會把up_limit_id更新為快照讀之前最新已提交事務的transaction id,則rc不能可重複讀

(2)當前讀的情況下,rr是利用record lock+gap lock來實現的,而rc沒有gap,所以rc不能可重複讀

mysql事務隔離最高 Mysql事務隔離級別

mysql官方文件顯示 innodb中每個隔離級別的詳細描述如下 read uncommitted select語句以非鎖定方式被執行,但是乙個可能更早期版本的記錄會被用到。因此,使用這個隔離級別,比如,讀是不連貫的。著也被稱為 髒讀 dirty read 另外,這個隔離級別象read commit...

MySQL 事務隔離

未提交讀 read uncommitted 允許髒讀,也就是可能讀取到其他會話中未提交事務修改的資料 提交讀 read committed 只能讀取到已經提交的資料。oracle等多數資料庫預設都是該級別 不重複讀 可重複讀 repeated read 可重複讀。在同乙個事務內的查詢都是事務開始時刻...

MySQL事務隔離

髒讀 事務a更新了資料但是並未提交,事務b查詢到事務a更新的資料,事務a此時執行回滾操作,事務b讀到的資料是髒資料。不可重複讀 事務a多次讀取同一資料。事務b在事務a多次讀取的過程中,對資料作了更新並提交,導致事務a多次讀取同一資料時,結果不一樣。幻讀事務a多次讀取一組資料。事務b在事務a多次讀取的...