1. 程式人生 > >innodb的鎖和高並發

innodb的鎖和高並發

table 是把 1.3 ID 讀寫 事務 bsp HA http

1 innodb的鎖

1.1 s鎖,即讀鎖,即share鎖

1.2 x鎖,即寫鎖,排他鎖

1.3 s鎖和x鎖之間的關系

多個讀鎖可以共存,但是讀鎖不可以和寫鎖共存。寫鎖和寫鎖不可以共存。

1.4 間隙鎖

就是對一段數據加鎖,比如id大於3小於10的行加鎖,防止插入id=4的數據。

2 innodb高並發

適合於讀多寫少的高並發,所以要想獲取高並發,就要讀寫分離。

3 死鎖

事務A有了1要2,事務B有了2要1。

4 innodb的三種行鎖

第一,record lock

單個行上的鎖。

第二,gap lock

間隙上的鎖,不包括行本身,解決幻讀。

第三,next lock

包括間隙和行本身。

5 鎖是附加在sql語句中的,並不需要顯示設置

快照讀,不需要加鎖:

select * from xxx-table where a = 1;

當前讀

select * from xxx for update;

insert into xxx-table values(xxx);

這些需要加排他鎖。

6 所謂的兩階段鎖

就是把鎖操作分成加鎖階段和解鎖階段。

參考:

http://hedengcheng.com/?p=771

鎖是mysql中最難的,加什麽鎖,跟事務的隔離級別,什麽索引等都有關系。

innodb的鎖和高並發