update會鎖表嗎?

2022-06-12 03:30:08 字數 1407 閱讀 2549

update會鎖表嗎?

兩種情況:

1.帶索引 2.不帶索引

前提介紹:

方式:採用命令列的方式來模擬

1.mysq由於預設是開啟自動提交事務,所以首先得檢視自己當前的資料庫是否開啟了自動提交事務。

命令:select @@autocommit;

結果如下:

+————–+

| @@autocommit |

+————–+

| 0 |

+————–+

如果是1,那麼執行命令:set autocommit = 0;設定為不開啟自動提交

2.當前的資料庫**式如下

tb_user | create tabletb_user(

idbigint(20) not null auto_increment,

namevarchar(32) default null,

phonevarchar(11) default null,

operatorvarchar(32) default null,

gmt_createdatetime default null,

gmt_modifieddatetime default null,

primary key (id)

) engine=innodb auto_increment=3 default charset=utf8

顯然除了主鍵,我沒有加任何索引

實際例子:

1.沒有索引

執行命令:begin;開啟事務,然後執行命令:update tb_user set phone=11 where name=」c1」;修改,先別commit事務。

再開乙個視窗,直接執行命令:update tb_user set phone=22 where name=」c2」;會發現命令卡住了,但是當前面乙個事務通過commit提交了,命令就會正常執行結束,說明是被鎖表了。

2.給name欄位加索引

create index index_name on tb_user(name);

然後繼續如1裡面的操作,也就是乙個開啟事務,執行update tb_user set phone=11 where name=」c1」;先不提交

然後另乙個執行update tb_user set phone=22 where name=」c2」;發現命令不會卡住,說明沒有鎖表

但是如果另乙個也是update tb_user set phone=22 where name=」c1」;更新同一行,說明是鎖行了

3.總結

如果沒有索引,所以update會鎖表,如果加了索引,就會鎖行

mysql select是否會鎖表

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

mysql select是否會鎖表 ?

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

在執行Update後未響應 鎖表

1.在對資料進行update操作時,有時執行的時間很長,還沒有響應,大多是因為你在update後沒有立即提交,又進行了其他操作,導致了鎖表。2.檢視那些在對錶進行操作 select vs.sid,vs.serial from v locked object vlo,dba objects do,v ...