Mysql的鎖機制

2021-10-04 13:02:35 字數 2508 閱讀 1644

mysql innodb的事務: acid

a:原子性,通過undo log實現

i:隔離性,通過鎖機制實現

d:永續性,通過redo log實現

c: 通過原子性、隔離性、永續性實現的

innodb:支援行級鎖和表級鎖;預設支援行級鎖

myisam:支援表鎖

memory:支援表鎖

oltp: on line transcation process(行鎖)

olap: on line analysis process(表鎖)

myisam表鎖

myisam表的讀操作與寫操作之間,以及寫操作之間是序列的

通過lock table person readlocol,允許查詢和插入的並行操作,這個時候讀鎖,可以新增新資料

1. 表共享讀鎖(table read lock): 不會阻塞其他使用者對同乙個表的讀請求,但是會所有使用者阻塞寫請求

2. 表獨佔寫鎖(table write lock):阻塞其他使用者的讀和寫的請求;當前使用者可以讀、寫

session1

a:lock table person write

; //加寫鎖

a:select * from person;

a:insert into person value(1,'zhangsan'

)session 2

b: select * from person; //阻塞

a:unlock tables; //釋放鎖

b: select * from person;//可以讀取資料

innodb鎖機制

1.鎖的型別

innodb預設修改操作,使用的是排他鎖;select語句預設不加任何鎖

(1)共享鎖 - 讀鎖 – select … lock for share model

(2)排他鎖 - 寫鎖 – select … for upadte

可以讀取其他行的資料

2.innodb鎖的實現

行鎖是通過索引來實現的,如果沒有索引,就是表鎖;只有通過索引檢索資料,才會使用行鎖

(1)沒有索引,則使用表鎖

//假定person沒有索引

a: set autocommit =0;

b: set autocommit =0;

a: select

*from person where id =

1for

update

;// 針對id =1,行鎖;但是因為沒有索引,導致是表鎖

b:select

*from person where id =

2for

update

//阻塞;因為表鎖了

a: commit

;

(2)有索引,則使用行鎖,可以同時鎖定不同行,進行寫操作

// alter table add index (id)

a: set autocommit =0;

b: set autocommit =0;

a: select

*from person where id =

1for

update

;// 針對id =1,行鎖;

b:select

*from person where id =

2for

update

//針對 id 2,行鎖

a: commit

;

(3)如果使用相同的索引,鎖定不同的行,則第二個事務要等待

// alter table add index (id)

a: set autocommit =0;

b: set autocommit =0;

a: select

*from person where id =

1and name =

1for

update

;// 針對id =1,行鎖;

b:select

*from person where id =

1and name =

4for

update

//阻塞;因為使用的相同索引id

a: commit

;

mysql鎖機制 mysql 鎖機制

一 概述 mysql有三種鎖的級別 頁級 表級 行級。myisam和memory儲存引擎採用的是表級鎖 table level locking bdb儲存引擎採用的是頁面鎖 page level locking 但也支援表級鎖 innodb儲存引擎既支援行級鎖 row level locking 也...

mysql鎖機制 php Mysql鎖機制

表級鎖 開銷小,加鎖快 不會出現死鎖 鎖定粒度大,發生鎖衝突的概率最高,併發度最低。行級鎖 開銷大,加鎖慢 會出現死鎖 鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。共享鎖和排它鎖 頁面鎖 開銷和加鎖時間界於表鎖和行鎖之間 會出現死鎖 鎖定粒度界於表鎖和行鎖之間,併發度一般 mysql的行級鎖有...

mysql鎖機制總結 mysql鎖機制總結

1.隔離級別 1 讀不提交 read uncommited,ru 這種隔離級別下,事務間完全不隔離,會產生髒讀,可以讀取未提交的記錄,實際情況下不會使用。2 讀提交 read commited,rc 僅能讀取到已提交的記錄,這種隔離級別下,會存在幻讀現象,所謂幻讀是指在同乙個事務中,多次執行同乙個查...