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 ; begindeclare @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
这种循环语法适用于非常多的场景,这只是其中的一种,希望我的分享对一些数据库萌新在开发中有所帮助
sql循环语句在update中的应用相关推荐
- SQL 循环语句几种写法
1.if语句使用示例 1 2 3 4 5 6 7 8 9 10 declare @a int set @a=12 if @a>100 begin print @a end else begi ...
- 用c语言循环语句,C语言中循环语句有哪些具体怎么用
C提供三种基本的循环语句:for语句.while语句和do-while语句. 一.for循环 for循环是开界的. 它的一般形式为: for(;;) 语句; 初始化总是一个赋值语句,它用来给循环控制变 ...
- python while循环语句-谈谈Python中的while循环语句
前言 python中有两种循环,while和for,两种循环的区别是,while循环之前,先判断一次,如果满足条件的话,再循环,for循环的时候必须有一个可迭代的对象,才能循环,比如说得有一个数组. ...
- oracle嵌套三层循环语句,在存储过程中执行3种oracle循环语句
http://www.cnblogs.com/coprince/p/3443219.html create or replace procedure pr_zhaozhenlong_loop /* 名 ...
- SQL 更新语句:Update ... set ... from ...
最近在做报表,作为数据库只会一个一个来update的我来说就有点艰难了. 今天想来说一下更新多个字段的语句: update 表名b set 字段1=a.字段a, 字段2=a.字段b, 字段3=a.字 ...
- jsp逐行打印mysql查询表格,jsp页面怎么写循环语句显示数据库中所有数据到网页表格中...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServ ...
- c语言输入循环语句,C语言中输入输出和循环语句详解.ppt
C语言中输入输出和循环语句详解 C语言的输入输和循环分支语句详解 本章主要向大家介绍下C语言的输入和输出功能以及循环分支语句的使用 第4章 顺序结构程序设计 3.1 C语言语句 3.2 赋值语句 3. ...
- pythonfor循环语句例子_Python中的for循环语句
for循环 for..in是另外一个循环语句,它在一序列的对象上 递归 即逐一使用队列中的每个项目. 使用for语句 案例: fori inrange(1,5):print(i)else:print( ...
- mysql动态sql循环语句_mysql存储过程循环遍历sql结果集,并执行动态sql
/* 将其他几张表数据复制到一张总表中 */ DROP PROCEDURE IF EXISTS sp_customer; CREATE PROCEDURE sp_customer() BEGIN -- ...
- python中for循环语句格式_python中for循环和可迭代对象遍历
#for循环和可迭代对象遍历 ''' for循环通常用于可迭代对象的遍历,for循环的语法格式如下: for 变量 in 可迭代对象 循环体语句 操作:遍历一个元组.集合.字典.字符串 ''' for ...
最新文章
- idea的tomcat配置文件在哪里修改_MyBatis配置文件详解
- 云计算究竟能帮你具体做些什么事?
- 用命令行在控制台里玩斗地主,试过没?
- 要求输入框里面必须同时含有字母,数字,特殊字符,且不小于8位
- dmidecode常用的查询
- java io流 教程_Java基础教程:IO流与文件基础
- mysql范围条件_MySQL8.0之跳跃范围扫描
- Python扑克牌发牌
- 用组织分析框架分析阿里巴巴集团
- 松下PLC项目实例,两台CPU间通过RS485通讯,10轴定位控制
- dwr 例外被抛出且未被接住 engine.js
- 云忧cms搭建在宝塔nginx服务器,登录报错
- IP协议号与传输层端口
- 基于FPGA的数字频率计Verilog开发
- c语言:四位数为AABB些型,并且是另一个书的平方,求这昂的四位数
- 机器学习笔记 - 优化简介
- 数据库字符集utf8和utf8mb4的详细区别
- find vba 模糊_求Find模糊查找和绝对查找的方法。
- OpenCV实现简单的录屏功能
- CF1091F New Year and the Mallard Expedition
热门文章
- Android开发入门基础
- [RE]如何调整堆栈平衡
- 浅谈MFC中BitBlt与StretchDIBits的区别
- 三分钟破解奇迹热门外挂
- 根据列表内车牌号,统计各省市车牌占有量
- acdsee ultimate 2020 特别版 v13.0附安装教程
- Socket通讯之UDP
- 5.2php小说网站源码,【PHP源码】杰奇小说源码V2.20仿《不朽文学网》原创小说网站系统程序(采集+支付+VIP)...
- 离合器膜片弹簧的优化设计matlab,基于matlab目标函数的建立优化离合器膜片弹簧的设计研究.doc...
- JAVA基础知识点总结