關於MySQL鎖和隔離級別比較好的文章。

2021-08-18 00:10:08 字數 1614 閱讀 4080

我所理解的髒讀,不可重複讀和幻讀。

髒讀:某個事務已更新乙份資料,另乙個事務在此時讀取了同乙份資料,由於某些原因,前乙個事務會滾了操作,導致髒讀產生。

不可重複讀:在乙個事務的兩次查詢中資料不一致,可能是兩次查詢過程中插入了乙個事務更新原有的資料。

幻讀:在乙個事務的兩次查詢中資料筆數不一致,例如有乙個事務查詢了幾行資料,而另乙個卻在兩次查詢中插入了新的幾列資料。

以下為原文。

悲觀鎖就是一種真正的鎖了,它會在獲取資源前對資源進行加鎖,確保同一時刻只有有限的執行緒能夠訪問該資源,其他想要嘗試獲取資源的操作都會進入等待狀態,直到該執行緒完成了對資源的操作並且釋放了鎖後,其他執行緒才能重新操作資源;

互斥鎖(寫鎖):允許事務對一條行資料進行刪除或更新;

意向互斥鎖:事務想要在獲得表中某些記錄的互斥鎖,需要在表上先加意向互斥鎖;

create

table

users(

idint

notnull auto_increment,

last_name varchar(255) not

null,

first_name varchar(255),

age int,

primary key(id),

key(last_name),

key(age)

);

+------+-------------+--------------+-------+

|id |last_name |first_name |age |

|------+-------------+--------------+-------|

|4 |stark |tony |21 |

|1 |tom |hiddleston |30 |

|3 |morgan |freeman |40 |

|5 |jeff |dean |50 |

|2 |donald |trump |80 |

+------+-------------+--------------+-------+

(-∞, 21]

(21, 30]

(30, 40]

(40, 50]

(50, 80]

(80, ∞)

read commited:只對記錄加記錄鎖,而不會在記錄之間加間隙鎖,所以允許新的記錄插入到被鎖定記錄的附近,所以再多次使用查詢語句時,可能得到不同的結果(non-repeatable read);

repeatable read:多次讀取同一範圍的資料會返回第一次查詢的快照,不會返回不同的資料行,但是可能發生幻讀(phantom read);

serializable:innodb 隱式地將全部的查詢語句加上共享鎖,解決了幻讀的問題;

create

table

test(

idint

notnull,

unique(id)

);

Mysql 鎖 隔離級別

1.共享鎖 只要有乙個人 事務或執行緒 在查詢,其他人就都不能改,要照顧少數 下面是將所有性別是男的資料都加上共享鎖 select from table where 男 lock in share mode2.排他鎖 只要有乙個人 事務或執行緒 在用 增刪改差 其他人就不能用 下面是將所有性別是男的...

mysql 鎖,隔離級別

1.鎖是對多執行緒,多程序訪問同一資源進行協調的機制 2.分為行鎖,表鎖,頁鎖。myisam和memory支援表鎖,bdb引擎支援表鎖,頁鎖。innodb支援表鎖,行鎖 預設 3.myisam表鎖 4.myisam併發插入 5.讀寫操作同時爭搶鎖,寫鎖優先,可以設定寫鎖優先順序降低,low prio...

SQLserver鎖和事務隔離級別的比較與使用

來自 物件 鎖 每條sql 語句 隔離 事務 鎖 併發問題 丟失更新 未確認的讀取 髒讀 不一致的分析 非重複讀 多次讀取相同的資料 行 不一致 其他使用者更改update 幻像讀 多次讀取有不存在和新增的資料 其他使用者插入insert 或刪除delete 隔離級別 隔離級別 髒讀 不可重複讀取 ...