Aplicación de la declaración de bucle sql en la actualización

Aplicación de la declaración de bucle sql en la actualización

En escenarios de desarrollo reales, a veces necesitamos modificar todos los datos de la tabla en lotes, pero cuando la cantidad de datos es muy grande, como millones de decenas de millones de datos, será largo cuando ejecutemos la declaración de actualización. Es hora de cerrar la mesa. Esto es muy fácil de causar un fenómeno de interbloqueo (en la empresa DBA definitivamente no se le permite ejecutar este tipo de declaración SQL). Por lo tanto, para evitar este tipo de problemas, debemos modificar las sentencias por lotes cuando ejecutamos la modificación por lotes, solo se puede modificar una pequeña cantidad de datos a la vez para no ocupar la tabla durante mucho tiempo. Entonces, para lidiar con este tipo de escenario, puede usar la sintaxis while de la siguiente base de datos para ejecutar la instrucción de actualización en un bucle.

Ahora uso un ejemplo de un escenario para implementar la operación de bucle:

Supongamos que tenemos un usuario de tabla (la clave principal es id):

nombre sexo
Gang Mou masculino
- -
Dongmou masculino
Luo Mou masculino

Hay un millón de datos. En este momento, el producto maligno de repente llegó a una demanda. Debe tenerse en cuenta que es necesario agregar un campo más new_status (estado) a la tabla, y todos los datos históricos se establecen en 1.

En este momento, se ejecuta la declaración de la base de datos:


-- 在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 

Este tipo de sintaxis de bucle es adecuado para muchos escenarios, este es solo uno de ellos, espero que compartir sea útil para el desarrollo de nuevas bases de datos

Supongo que te gusta

Origin blog.csdn.net/fei476662546/article/details/108753217
Recomendado
Clasificación