sql循环语句在update中的应用

sql循环语句在update中的应用

在实际的开发场景中,我们有时候要对表中的所有数据进行批量修改,但是当数据量十分盘庞大时,比如几百万几千万条数据,这时候我们执行update语句的话就会长时间锁住该表。这样非常容易造成死锁现象(在企业中DBA肯定是不允许执行这种sql语句的)。所以为了避免出现这种问题,我们在执行批量修改的语句时就要分批修改,一次只能修改少量的数据,避免长时间占用该表。所以为了应对该种场景,可以使用一下的数据库的while语法,循环执行update语句。

现在我通过举例一种场景来实现循环操作的执行:

假设我们有一张表User(主键为id):

name sex
刚某
东某
罗某

其中有百万条数据,这时候,万恶的产品突然来了个需求,需要实现需要在表中再加一个字段new_status(状态),并且历史数据全部设置为1,

这时候就开始执行数据库语句了:


-- 在user表中添加字段 status
alter table user add new_status int ; 

begin

declare @start int  -- 定义变量 start
declare @end int	--  定义变量 end
declare @maxId int  --  定义变量 maxId (主键最大值)

set @start = 1
set @end = 100000  -- 循环体每次执行1万条数据
set @maxId = (select max(id) from user)  -- user表中最大值

-- 循环体开始
while @start < @maxId 

begin 
-- 循环体内需要执行的 SQL 语法
update user set new_status = 1 where id between @start and @start + @end
set @start = @start + @end 
end 
--循环体结束

end 

这种循环语法适用于非常多的场景,这只是其中的一种,希望我的分享对一些数据库萌新在开发中有所帮助

猜你喜欢

转载自blog.csdn.net/fei476662546/article/details/108753217