MySQL學習筆記 事務和隔離級別

2022-03-29 09:37:32 字數 593 閱讀 7907

在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。我們的資料庫鎖,也是為了構建這些隔離級別存在的。總共有4種:

1.未提交讀(read uncommitted):允許髒讀,也就是可能讀取到其他會話中未提交事務修改的資料

2.提交讀(read committed):只能讀取到已經提交的資料。oracle等多數資料庫預設都是該級別 (不重複讀)

3.可重複讀(repeated read):可重複讀。在同乙個事務內的查詢都是事務開始時刻一致的,innodb預設級別。在sql標準中,該隔離級別消除了不可重複讀,但是還存在幻象讀

4.序列讀(serializable):完全序列化的讀,每次讀都需要獲得表級共享鎖,讀寫相互都會阻塞

參考美團點評的文章:innodb中的事務隔離級別和鎖的關係

髒讀:所謂髒讀是指乙個事務中訪問到了另外乙個事務未提交的資料

幻讀:乙個事務讀取2次,得到的記錄條數不一致

不可重複讀:乙個事務讀取同一條記錄2次,得到的結果不一致

參考:髒讀、幻讀與不可重複讀

Mysql學習筆記 事務的隔離

可重複讀隔離級別的理解,事務 t 啟動的時候會建立乙個檢視 read view,之後事務 t 執行期間,即使有其他事務修改了資料,事務 t 看到的仍然跟在啟動時看到的一樣。也就是說,乙個在可重複讀隔離級別下執行的事務,好像與世無爭,不受外界影響。這個技術在mvcc中或許可以是這樣理解的。但是如果是在...

MySQL學習筆記 事務隔離與鎖

可重複讀級別下,在事務執行期間,即使其他事務修改了資料,該事務看到的仍然跟啟動是看到的一樣。但是,如果乙個事務要更新一行資料,這時剛好有另乙個事務擁有這一行的行鎖,那本事務就會進入鎖等待狀態。問題 該事務獲取到行鎖,要更新資料時,這時候,它讀的資料值是什麼呢?答 更新資料的時候,都是先讀後寫,這個讀...

MySQL學習筆記 事務

事務是用來保證一組資料庫的操作,要麼全部成功,要麼全部失敗 應用場景較多 如銀行轉賬,訂票等。mysql的事務是在引擎層支援的,原生的myisam不支援,因此主流使用innodb引擎。原子性顧名思義,不可分割,要麼所有指令都成功,要麼所有指令都失敗 一致性事務開始前和事務結束後,資料庫的狀態都是正常...