MYSQL 使用存储过程批量更新表数据
功能:实现将表result_good_city_dzl中的字段lat更新为表 result_good_city_lh中的lat,条件是两个表中的id一样
即:
update result_good_city_dzl a set a.lat=(select lat from result_good_city_lh b where a.id=b.id and b.lat!=0)
DELIMITER $$
DROP PROCEDURE IF EXISTS update_result_good_city_dzl $$
CREATE PROCEDURE `update_result_good_city_dzl`()
BEGIN
DECLARE LhId BIGINT;
DECLARE Lhlat VARCHAR(40);
declare stop int default 0;
DECLARE cur CURSOR FOR (SELECT lat,id FROM result_good_city_lh);
/*
定义游标的结束,当遍历完成时,将stop设置为null
这里也可以写成 DECLARE CONTINUE HANDLER FOR NOT FOUND SET stop = null;
*/
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop = null;
/*开游标*/
OPEN cur;
/*游标向下走一步,将查询出来的两个值付给定义的两个变量*/
FETCH cur INTO Lhlat,LhId;
/* 循环体 */
WHILE ( stop is not null) DO
/*更新数据表*/
update result_good_city_dzl set lat=Lhlat where id = LhId ;
/*游标向下走一步*/
FETCH cur INTO Lhlat,LhId;
END WHILE;
/*关闭游标*/
CLOSE cur;
END$$
DELIMITER ;
update_result_good_city_dzl();
执行存储过程(sql命令行执行)
CALL update_result_good_city_dzl();
/* Affected rows: 0 已找到记录: 0 警告: 0 持续时间 1 query: 1.014 sec. */
执行时间1秒多
方法2:
DELIMITER $$
DROP PROCEDURE IF EXISTS update_result_good_city_dzl $$
CREATE PROCEDURE update_result_good_city_dzl()
BEGIN
DECLARE LhId INT;
DECLARE Lhlat VARCHAR(40);
DECLARE done INT;
-- 定义游标
DECLARE rs_cursor CURSOR FOR
SELECT lat,id FROM result_good_city_lh;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN rs_cursor;
cursor_loop:LOOP
FETCH rs_cursor INTO Lhlat,LhId; -- 取数据
IF done=1 THEN
leave cursor_loop;
END IF;
-- 更新表
update result_good_city_dzl set lat=Lhlat where id = LhId ;
END LOOP cursor_loop;
CLOSE rs_cursor;
END$$
DELIMITER ;
执行存储过程(sql命令行执行)
CALL update_result_good_city_dzl();
MYSQL 使用存储过程批量更新表数据的更多相关文章
- MySQL中使用replace into语句批量更新表数据
作为示例,我们在这里使用名为testdb的数据库,并且在其中创建两张一模一样的表: drop table if exists test_table_1; create table test_table ...
- ORACLE no1 存储过程插入更新表数据
CREATE OR REPLACE PROCEDURE sp_cust_main_data_yx(InStrDate IN VARCHAR2, ...
- C# Oracle.ManagedDataAccess 批量更新表数据
这是我第一次发表博客.以前经常到博客园查找相关技术和代码,今天在写一段小程序时出现了问题, 但在网上没能找到理想的解决方法.故注册了博客园,想与新手分享(因为本人也不是什么高手). vb.net和C# ...
- ASP.NET MVC用存储过程批量添加修改数据
用Entity Framework 进行数据库交互,在代码里直接用lamda表达式和linq对数据库操作,中间为程序员省去了数据库访问的代码时间,程序员直接可以专注业务逻辑层的编写.但是对于比较复杂的 ...
- mysql语句:批量更新多条记录的不同值[转]
mysql语句:批量更新多条记录的不同值 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 帮助 1 UPDATE mytable SET myfield = 'value' WHERE ...
- oracle 批量更新表字段
(一) 将数字替换成汉字 第一步,去重查询 使用distinct关键字先对该字段值进行去重查询,看共有几种情况 --查询指定区间内表停诊字段的值 SELECT DISTINCT T.CLOSE_T ...
- MySQL入门(7)——表数据的增、删、改
MySQL入门(7)--表数据的增.删.改 插入数据 使用INSERT···VALUES语句插入数据 INSERT语句最常用的格式是INSERT···VALUES: INSERT [LOW_PRIOR ...
- MYSQL中delete删除多表数据
MYSQL中delete删除多表数据 DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释: 1. delete from t1 where 条件 2.delete t1 ...
- Mysql MyISAM数据库批量转换表引擎为Innodb
Mysql MyISAM数据库批量转换表引擎为Innodb 最近在做事物处理需要把表结构都改为带有支持事物的Innodb引擎格式, 把里面数据库 用户名.密码 等信息修改为你自己的,放在网站下运行即可 ...
随机推荐
- python 谈赋值和copy区别
1变量赋值 a=1 b=a b=1 a=3 b还是等于1 2,列表赋值 嵌套列表情况 如果想让列表单独出来怎么办呢 ,这时候用到copy 如果列表嵌套列表情况 还是一样的, 如果想深度copy imp ...
- 广播模式下的生产者与消费者fanout模式
生产者 #coding=utf-8 import pika import sys connection = pika.BlockingConnection(pika.ConnectionParamet ...
- console.log的高级用法
//基本用法 console.log('最常见用法\n换行'); console.error('输出错误信息 会以红色显示'); console.warn('打印警告信息 会以黄色显示'); cons ...
- openstack stein部署手册 2. 基础应用
1. chrony # 安装程序包 yum install -y chrony # 变更配置文件 /etc/chrony.conf 增加 server 192.168.123.200 iburst # ...
- [Linux]Centos7/Centos6更改系统语言
Centos7系统语言配置信息保存在/etc/locale.conf文件内 更改步骤如下: 1.使用vim打开locale.conf文件 vim /etc/locale.conf2.编辑locale. ...
- rabbitmq 结构体
amqp_basic_properties_t props; props._flags = AMQP_BASIC_CONTENT_TYPE_FLAG | AMQP_BASIC_DELIVERY_MOD ...
- kaildi讲解
转载声明:本文为转载文章 作者:ferb2015 原文地址:https://blog.csdn.net/eqiang8848/article/details/81543599 kaldi是一个开源的语 ...
- linux下安装maven私服nexus
Nexus介绍 Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库 ...
- golang中最大协程数的限制(线程)
golang中最大协程数的限制 golang中有最大协程数的限制吗?如果有的话,是通过什么参数控制呢?还是通过每个协程占用的资源计算? 通过channel控制协程数的就忽略吧. 以我的理解,计算机资源 ...
- Setting proxy for Windows CMD and Linux Terminal
setting proxy for Windows CMD and Linux Terminal Linux Terminal: set http_proxy=http://127.0.0.1:811 ...