MySQL InnoDB事務隔離級別和鎖機制

2021-09-25 02:56:41 字數 1957 閱讀 1202

擴充套件:在sqlserver資料庫中,並不使用索引組織表,而是使用一種稱為堆表的表型別。因此對於sqlserver來說,書籤是乙個行識別符號,用類似 檔案號:頁號:槽號 的格式來定位行資料。

共享鎖(s lock):允許事務讀一行資料。

排它鎖(x lock):允許事務刪除或更新一行資料。.x

sx不相容不相容

s不相容

相容gap lock:間隙鎖,鎖定乙個範圍,但不包含記錄本身。

next-key lock:gap lock + record lock,鎖定乙個範圍,並且鎖定記錄本身。

意向共享鎖(is lock):事務想要獲得一張表中某幾行的共享鎖。

意向排它鎖(ix lock):事務想要獲得一張表中某幾行的排它鎖。.is

ixsxis

相容相容

相容不相容

ix相容

相容不相容

不相容s

相容不相容

相容不相容

x不相容

不相容不相容

不相容

注意:不同事務隔離級別下,快照讀對歷史版本的讀取方式並不相同:read committed級別下,對快照資料總是讀取 最新乙份的 快照資料;repeatable read級別下,總是讀取當前 事務開始時的 快照資料。

// 讀加s鎖

select * from table where ? lock in share mode;

// 讀加x鎖

select * from table where ? for update;

// 寫加x鎖

所有的dml操作:insert, update, delete

組合4.jpg-72.1kb

public long getnum(long templateid) throws exception  catch (exception e) 

}

public long getnum(long templateid) throws exception  catch (exception e) 

}

下拉檢視答案:||

||||

||||

||||

||會發生死鎖。innodb檢測到死鎖後,會回滾其中乙個事務,使另乙個事務成功執行完畢。即併發請求時,只有乙個請求可成功執行,而另乙個事務將回滾,並返回異常。如下圖:

1).事務1阻塞。

2).死鎖。事務1執行成功,事務2自動回滾並返回異常。

serializable隔離級別並不是完全序列化,而是讀寫序列化

盡量避免先讀後更情況的發生,轉為先更後讀

如果一定要先讀後更,那麼可以使用加x鎖的一致性鎖定讀(for update)。

end

Mysql InnoDB事務隔離級別

隔離級別 髒讀 dirty read 不可重複讀 nonrepeatable read 幻讀 phantom read 未提交讀 read uncommitted 可能可能 可能已提交讀 read committed 不可能可能 可能可重複讀 repeatable read 不可能不可能 可能可序列...

MySQL innoDB的事務隔離

關於事務的特性?acid 原子性,一致性 隔離性 永續性。innodb 中的事務的隔離級別?讀提交 乙個事物在已提交的時候才可以被其他事務看到 可重複讀 乙個事務在執行過程中看到的資料,總是跟另個乙個事物在啟動時看到的資料是一致的,只要事務未提交都對其他事務是不可見的。讀未提交 這個事務還未提交就可...

Mysql Innodb事務的隔離級別

隔離級別 髒讀 dirty read 不可重複讀 nonrepeatable read 幻讀 phantom read 解釋未提交讀 read uncommitted 可能可能 可能事務a執行期間能讀到事務b修改且沒有提交的資料。已提交讀 read committed 不可能可能 可能事務a執行期間...