mysql select是否會鎖表

2021-08-13 04:39:38 字數 1580 閱讀 2358

有的人說mysql的 select 會鎖表 ,有的人說 mysql 的查詢不會鎖表 。

其他他們都對,沒有 ,但是很片面。

其實對於mysql的select 是否會鎖表 ,這個完全取決於表採用的是什麼儲存引擎。

這裡我就拿大家最熟悉的儲存引擎innodb 和myisam 來說明這個問題。

對於myisam的表select 是會鎖定表的 ,會導致其他操作掛起,處於等待狀態。

對於innodb的表select 是不會鎖表的。其實這裡使用到了快照。快照這裡不作討論。

下面是是我的佐證:

回話一:

select sql_no_cache * from tmp002

表 tmp002  有5618288 資料 儲存引擎時innodb  ,全部查詢出來大約需要5min左右  

回話二:

update tmp002

set num=6

where mreasonid in ('700098','301001' ) limit 10000

我們首先 執行以下 回話一的 語句 。 再執行回話二。

我們會發現回話2很快就執行了 

update tmp002

set num=6

where mreasonid in ('700098','301001' ) limit 10000

受影響的行: 0

在回話三種執行下 show full processlist 。

沒有發現任何鎖定的現象。

修改表儲存引擎:

alter table tmp002 engine=myisam

受影響的行: 5618288

同樣是上面的例子

回話一:

select sql_no_cache * from tmp002

表 tmp002  有5618288 資料 儲存引擎時innodb  ,全部查詢出來大約需要5min左右  

回話二:

update tmp002

set num=6

where mreasonid in ('700098','301001' ) limit 10000

我們首先 執行以下 回話一的 語句 。 再執行回話二。

我們先回話一直處於執行狀態 ,沒有返回任何資訊 。

在回話三種執行下 show full processlist 。

13564441 root 192.168.53.41:53312 tempdb query 2 locked  update tmp002 set num=6 where mreasonid in ('700098','301001' ) limit 10000

13564671 root 192.168.53.41:53736 tempdb query 4 writing to net select sql_no_cache * from tmp002

回話13564441狀態為 locked ,等待鎖的釋放 。

綜上所述,可以得到下面的結果。

對於myisam的表select 是會鎖定表的 ,會導致其他操作掛起,處於等待狀態。

對於innodb的表select 是不會鎖表的。其實這裡使用到了快照。快照這裡不作討論。

mysql select是否會鎖表 ?

有的人說mysql的 select 會鎖表 有的人說 mysql 的查詢不會鎖表 其他他們都對,沒有 但是很片面。其實對於mysql的select 是否會鎖表 這個完全取決於表採用的是什麼儲存引擎。這裡我就拿大家最熟悉的儲存引擎innodb 和myisam 來說明這個問題。對於myisam的表sel...

update會鎖表嗎?

update會鎖表嗎?兩種情況 1.帶索引 2.不帶索引 前提介紹 方式 採用命令列的方式來模擬 1.mysq由於預設是開啟自動提交事務,所以首先得檢視自己當前的資料庫是否開啟了自動提交事務。命令 select autocommit 結果如下 autocommit 0 如果是1,那麼執行命令 set...

物極必反 蘋果是否會盛極而衰

隨著蘋果產品的不斷大賣與蘋果公司市值進一步提公升,很多投資者開始擔心蘋果會出現盛極而衰的現象,科技界的發展瞬息萬變,誰也無法 蘋果未來的發展。2012開始了,今年蘋果又會有何表現。iphone是否還能體現地位象徵 很手機購買者其實不懂手機,也不是很清楚手機的功能,只是大家都用iphone,我沒有ip...