1. 程式人生 > 實用技巧 >MYSQL-事務中的鎖與隔離級別

MYSQL-事務中的鎖與隔離級別

1.什麼是鎖

“鎖”顧名思義就是鎖定的意思。

2.作用

在事務ACID特性過程中,“鎖”和“隔離級別”一起來實現“I”隔離性的作用。

3.鎖的類別

排他鎖:保證在多事務操作時,資料的一致性。(在我修改資料時,其他人不得修改)
共享鎖:保證在多事務工作期間,資料查詢時不會被阻塞。

樂觀鎖:多實務操作時,資料可以同時修改,誰先提交,以誰為準
悲觀鎖:多實務操作時,資料只有一個人可以修改

4.多版本併發控制

1.只阻塞修改類操作(排他鎖),不阻塞查詢類操作(共享鎖)
2.樂觀鎖的機制(誰先提交誰為準)

5.鎖的粒度

1.MyIsam:表級鎖
2.Innodb:行級鎖

事務中的隔離級別

1.四種隔離級別

1.RU級別:READ UNCOMMITTED(獨立提交):未提交讀,允許事務檢視其他事務所進行的未提交更改

2.RC級別:READ COMMITTED:允許事務檢視其他事務所進行的已提交更改,檢視不需要重新記入資料庫

3.RR級別:REPEATABLE READ:允許事務檢視其他事務所進行的已提交更改,檢視資料需要重新進入資料庫(InnoDB 的預設級別)

4.序列化:SERIALIZABLE:將一個事務的結果與其他事務完全隔離

2.檢視隔離級別

#檢視隔離級別
mysql> show variables like '%iso%';

3.設定隔離級別

1.設定RU級別

[root@db03 ~]# vim /etc/my.cnf
transaction_isolation=read-uncommit

2.設定RC級別

[root@db03 ~]# vim /etc/my.cnf
transaction_isolation=read-commit

4.名詞

1.髒讀:RU級別,執行事務修改資料,被讀取,但是資料最終回滾了,查詢到的資料就是髒讀

2.幻讀:刪除所有表資料,刪除的同時有人插入資料,檢視資料時以為是沒刪乾淨

3.不可重複讀:修改資料後被讀取,被讀取之後再次修改資料,兩次資料不一致