日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

mysql批量更新千萬數(shù)據(jù)思路 mysql批量更新數(shù)據(jù)

我們在數(shù)據(jù)庫執(zhí)行update語句的時候,到底是鎖表還是鎖行?這里直接用MySQL上例子測試下 。
一、環(huán)境準備1、新建一個表create table test_update(id BIGINTnot null primary key COMMENT '主鍵ID,雪花算法生成',name VARCHAR(100) COMMENT '姓名',user_no VARCHAR(20) COMMENT '用戶編號');2、插入兩條數(shù)據(jù)insert into test_update(id,name,user_no)values(1,'張三','001');insert into test_update(id,name,user_no)values(2,'李四','002');二、開始測試場景一:不加索引

開啟事務
sql1:update test_update set name=’張三1’ where user_no in(‘001’);
不提交事務
開啟事務
sql2:update test_update set name=’李四1’ where user_no in(‘002’);
提交事務
我們發(fā)現(xiàn)在sql1不提交事務的情況下,sql2被阻塞了,只有當sql1的事務提交后sql2才會執(zhí)行成功 。
總結(jié):在不加索引的情況下,update語句鎖表 。
場景二:加索引
先在user_no加索引
ALTER TABLE test_update ADD INDEX index_name (user_no);
開啟事務
sql1:update test_update set name=’張三1’ where user_no in(‘001’);
不提交事務
開啟事務
sql2:update test_update set name=’李四1’ where user_no in(‘002’);
提交事務
我們發(fā)現(xiàn)在sql1不提交事務的情況下,sql2也執(zhí)行成功了,也就是sql2不依賴于sql1的事務提交 。
總結(jié):在加索引的情況下,update語句鎖行 。
場景三:加索引,但是in里面是復雜查詢上面的例子in里面都是確定的值,加入in里面是查詢出來的呢,如下例子(user_no已經(jīng)加上索引)
【mysql批量更新千萬數(shù)據(jù)思路 mysql批量更新數(shù)據(jù)】開啟事務
sql1:update test_update set name=’張三1’ where user_no in(select user_no from other_table where id=1);
不提交事務
開啟事務
sql2:update test_update set name=’李四1’ where user_no in(select user_no from other_table where id=2);
提交事務
我們發(fā)現(xiàn)在sql1不提交事務的情況下,sql2被阻塞了,只有當sql1的事務提交后sql2才會執(zhí)行成功,跟場景一結(jié)果一樣 。
總結(jié):在加索引的情況下,in里面是不確定的值,update語句鎖表 。

    推薦閱讀