update會鎖表嗎?
兩種情況:
1.帶索引 2.不帶索引
前提介紹:
方式:採用命令列的方式來模擬
1.mysq由於預設是開啟自動提交事務,所以首先得檢視自己當前的資料庫是否開啟了自動提交事務。
命令:select @@autocommit;
結果如下:
+————–+
| @@autocommit |
+————–+
| 0 |
+————–+
如果是1,那麼執行命令:set autocommit = 0;設定為不開啟自動提交
2.當前的資料庫**式如下
tb_user | create tabletb_user
(
id
bigint(20) not null auto_increment,
name
varchar(32) default null,
phone
varchar(11) default null,
operator
varchar(32) default null,
gmt_create
datetime default null,
gmt_modified
datetime 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 ...