2023年8月3日发(作者:)
sql循环语句在update中的应⽤sql循环语句在update中的应⽤在实际的开发场景中,我们有时候要对表中的所有数据进⾏批量修改,但是当数据量⼗分盘庞⼤时,⽐如⼏百万⼏千万条数据,这时候我们执⾏update语句的话就会长时间锁住该表。这样⾮常容易造成死锁现象(在企业中DBA肯定是不允许执⾏这种sql语句的)。所以为了避免出现这种问题,我们在执⾏批量修改的语句时就要分批修改,⼀次只能修改少量的数据,避免长时间占⽤该表。所以为了应对该种场景,可以使⽤⼀下的数据库的while语法,循环执⾏update语句。现在我通过举例⼀种场景来实现循环操作的执⾏:假设我们有⼀张表User(主键为id):name刚某–东某sex男–男罗某男其中有百万条数据,这时候,万恶的产品突然来了个需求,需要实现需要在表中再加⼀个字段new_status(状态),并且历史数据全部设置为1,这时候就开始执⾏数据库语句了:--
在user表中添加字段 statusalter table user add new_status int ;
begindeclare @start int --
定义变量 startdeclare @end int --
定义变量 enddeclare @maxId int --
定义变量 maxId (主键最⼤值)set @start = 1set @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 + @endset @start = @start + @end
end
--循环体结束end
这种循环语法适⽤于⾮常多的场景,这只是其中的⼀种,希望我的分享对⼀些数据库萌新在开发中有所帮助
2023年8月3日发(作者:)
sql循环语句在update中的应⽤sql循环语句在update中的应⽤在实际的开发场景中,我们有时候要对表中的所有数据进⾏批量修改,但是当数据量⼗分盘庞⼤时,⽐如⼏百万⼏千万条数据,这时候我们执⾏update语句的话就会长时间锁住该表。这样⾮常容易造成死锁现象(在企业中DBA肯定是不允许执⾏这种sql语句的)。所以为了避免出现这种问题,我们在执⾏批量修改的语句时就要分批修改,⼀次只能修改少量的数据,避免长时间占⽤该表。所以为了应对该种场景,可以使⽤⼀下的数据库的while语法,循环执⾏update语句。现在我通过举例⼀种场景来实现循环操作的执⾏:假设我们有⼀张表User(主键为id):name刚某–东某sex男–男罗某男其中有百万条数据,这时候,万恶的产品突然来了个需求,需要实现需要在表中再加⼀个字段new_status(状态),并且历史数据全部设置为1,这时候就开始执⾏数据库语句了:--
在user表中添加字段 statusalter table user add new_status int ;
begindeclare @start int --
定义变量 startdeclare @end int --
定义变量 enddeclare @maxId int --
定义变量 maxId (主键最⼤值)set @start = 1set @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 + @endset @start = @start + @end
end
--循环体结束end
这种循环语法适⽤于⾮常多的场景,这只是其中的⼀种,希望我的分享对⼀些数据库萌新在开发中有所帮助
发布评论