mysql批量更新数据,即:循环select记录然后更新某一字段
原因:
今天遇到一个问题:一个数据表case_folder_info想要实现自定义排序功能,就在表里新加了一个字段SORT_NUMBER,由于表里存在已有数据,所以这个SORT_NUMBER字段都为空,但要想实现上移、下移、置顶等功能的话,需要里面有默认数据,所以我想给这个字段里默认有一些排序的值。
思考实现方式:
1、用c#写个小程序,然后取出来所有数据,UPDATE一遍,这个还得新建项目,添加数据库连接字符串,添加数据库类库引用,太麻烦。
2、用数据库自带的命令行方式实现。
最终经过我头脑的一番小斗争,虽然sql不太熟但还是决定尝试一下吧。
实现sql实现的思路:
由于命令行中无法直接使用declare这样使用变量,所以干脆用非常现的方式来解决吧,先建一个临时的存储过程,在存储过程中实现我要想的循环赋值,然后使用完后再删除这个存储过程就可以了。
具体的sql语句:
/*判断是否存在,如果存在就删除*/
drop procedure if exists tempProcedure_Test;/*取一个系统中绝对不会用到的存储过程名称*/
/*创建临时存储过程*/
create procedure tempProcedure_Test()
BEGIN
declare isDone int default 0; /*判断是否还有记录*/
declare intNumber int default 1;/*用于自增的变量*/
declare tempId char(36); /*每条记录循环时的临时ID*/
declare folderIds cursor for select A.ID from case_folder_info as A;/*取出来所有需要循环的数据*/
declare continue handler for not FOUND set isDone = 1;/*如果不存在就设置为1,即为true*/
open folderIds; /*OPEN*/
REPEAT /*开始循环数据*/
fetch folderIds into tempId;
if not isDone THEN
update case_folder_info set SORT_NUMBER=intNumber where id=tempId;
set intNumber=intNumber+1;
end if;
until isDone end repeat;
close folderIds; /*CLOSE,对应上面的open folderIds;*/
END;
call tempProcedure_Test();/*调用下这个临时的存储过程*/
drop procedure tempProcedure_Test; /*使用完毕后要删除垃圾*/
完毕,收工!
mysql批量更新数据,即:循环select记录然后更新某一字段的更多相关文章
- mysql批量更新数据,循环select记录然后更新某一字段
-- 处理IEMI重复的历史数据,建档日期(只有年月日)倒序,档案ID倒序,根据IMEI查档案,查询的结果,相同IMEI下的第一条记录的IEMI不处理,其他的记录的imei 改为空. -- USE ` ...
- mybatis学习之路----mysql批量新增数据
原文:https://blog.csdn.net/xu1916659422/article/details/77971867 接下来两节要探讨的是批量插入和批量更新,因为这两种操作在企业中也经常用到. ...
- java连接mysql批量写入数据
1.采用公认的MYSQL最快批量提交办法 public void index() throws UnsupportedEncodingException, Exception { //1000个一提交 ...
- MySQL批量插入数据的几种方法
最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...
- mysql批量插入数据优化
一.问题 很早以前做了一个更新功能,就是将A表中的数据全部查找出来,相对B表中改变的数据更新B表,B表中没有的数据插入B表. 最近发现该功能执行速率减慢,有时还跑超时.原来是A表中数据渐渐变多,就有了 ...
- mysql批量插入数据的基类
自己设计的一个mysql数据库批量添加数据的基类.用于批量向mysql数据库添加数据,子类实现起来很简单,自测性能也还不错. 1.基类实现-BatchAddBase using System.Coll ...
- mysql 批量删除数据
批量删除2000w数据 使用delete from table太慢 //DELIMITER DROP PROCEDURE if EXISTS deleteManyTable; create PROCE ...
- mysql 批量插入数据
MySQL使用INSERT插入多条记录,应该如何操作呢?下面就为您详细介绍MySQL使用INSERT插入多条记录的实现方法,供您参考. 看到这个标题也许大家会问,这有什么好说的,调用多次INSERT语 ...
- mysql 批量插入数据过多的解决方法
使用场景: 测试时需要插入100w的数据,跑sql脚本插入非常慢. 存储过程如下: //DELIMITER DROP PROCEDURE if EXISTS createAmountCount; cr ...
随机推荐
- 201521145048《java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 Q1.finally 题目4-2 1.1 截图你的提交结果( ...
- java课程设计(Calculator) 201521123027 陈龙
1.团队博客链接 http://www.cnblogs.com/DevilRay/p/7064482.html 2.个人负责模块或任务说明 (1)主函数的编写: (2)加减乘除运算的实现: (3)求倒 ...
- while循环_do_while循环_switch
swith语法: switch(值) { case 值1: 语句 break; case 值2: 语句 break; case 值3: 语句 break; default: break; } 1.值与 ...
- session get和load方法对比
get测试代码如下: public class Test { public static void main(String[] args) { // TODO Auto-generated metho ...
- oracle安装时,条件检查不通过解决办法
1.开始菜单→ 运行:输入regedit,打开注册表 2.依次点开HKEY_LOCAL_MACHINE>>SYSTEM>>CurrenControlSet>>ser ...
- 内核对象 windows操作系统
问题: 什么是内核对象? 答:内核对象实际上时由内核分配的一块内存,而且只能由内核来访问.它时一个数据结构,成员包含有关于该对象的信息.一些成员对于所有对象类型都是一样的,比如对象名称.安全描述.使用 ...
- Highway Networks
一 .Highway Networks 与 Deep Networks 的关系 深层神经网络相比于浅层神经网络具有更好的效果,在很多方面都已经取得了很好的效果,特别是在图像处理方面已经取得了很大的突破 ...
- Spring 5:以函数式方式注册 Bean
http://www.baeldung.com/spring-5-functional-beans 作者:Loredana Crusoveanu 译者:http://oopsguy.com 1.概述 ...
- JS数字金额转换为货币汉字形式
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- Paint the Grid Again ZOJ - 3780 拓扑
Paint the Grid Again Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %lld & %llu [ ...