MySQL批量更新不同表中的数据


Posted in MySQL onMay 11, 2022

批量更新不同表的数据

今天翻到以前写的批量更新表中的数据的存储过程,故在此做一下记录。

当时MySQL中的表名具有如下特征,即根据需求将业务表类型分为了公有、私有和临时三种类型,即不同的业务对应三张表,而所做的是区分出是什么类型(公有、私有、临时)的业务表对数据的固定字段做统一规律的处理。

下面为当时所编写的存储过程

BEGIN
  DECLARE done             INT;
  DECLARE v_table_name     VARCHAR(100);
  DECLARE v_disable        VARCHAR(100);
  DECLARE v_disable_temp   VARCHAR(100); -- 存放最终删除sql 
  DECLARE v_table_pre      VARCHAR(100);
  DECLARE v_table_sub      VARCHAR(200);
  DECLARE v_disable_temp_2 VARCHAR(100);
  -- 查询testkaifa库中以'temp_test_p_'开头的表
  DECLARE cursor_table_gis CURSOR FOR SELECT DISTINCT table_name tableName
                                      FROM
                                        information_schema.columns
                                      WHERE
                                        table_schema = 'testkaifa'
                                        AND table_name LIKE '%temp_test_p_%';
 
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
 
  SELECT @done;
 
  OPEN cursor_table_gis;
 
cursor_loop:
  LOOP
    FETCH cursor_table_gis INTO v_table_name;
    IF done = 1 THEN
      LEAVE cursor_loop;
    END IF;
    -- 连接字符串函数
    SET @v_disable = concat_ws(' ', 'update ', v_table_name, 'set is_valid=false where expire_time>now();');
    SELECT @v_disable;
    PREPARE sqlstr FROM @v_disable;
    EXECUTE sqlstr;
    DEALLOCATE PREPARE sqlstr;
 
    SELECT substring_index(v_table_name, '_', 1)
    INTO
      v_table_pre;
    -- IF v_table_pre = 'temp' THEN
    SELECT reverse(left(reverse(v_table_name), instr(reverse(v_table_name), '_')))
    INTO
      v_table_sub;
    SET @v_disable_temp = concat_ws(' ', 'update ', v_table_name, 'set is_valid=false where (expire_time-now())> (select value_data from ', concat('platform_params_p', v_table_sub), 'where param_key=\'tempDismissInterval\');');
    SELECT @v_disable_temp;
    PREPARE sqlstr2 FROM @v_disable_temp;
    EXECUTE sqlstr2;
    DEALLOCATE PREPARE sqlstr2;
    --  END IF;
 
    SET @v_disable_temp_2 = concat_ws(' ', 'update ', v_table_name, 'set is_valid=false where (test_id in(select test_id from ', concat('temp_test_user_p', v_table_sub), ' where (max(latest_act_time )-now())> (select value_data from ', concat('platform_params_p', v_table_sub), 'where param_key=\'tempDismissInterval\'));');
    SELECT @v_disable_temp_2;
    PREPARE sqlstr2 FROM @v_disable_temp;
    EXECUTE sqlstr2;
    DEALLOCATE PREPARE sqlstr2;
 
  END LOOP cursor_loop;
 
  CLOSE cursor_table_gis;
 
  COMMIT;
-- 
END

本代码涉及到的MySQL的内容为

1.查询表名

SELECT DISTINCT table_name tableName
                                      FROM
                                        information_schema.columns
                                      WHERE
                                        table_schema = 'testkaifa'
                                        AND table_name LIKE '%temp_test_p_%';

2.执行拼接的字符串SQL

PREPARE statement_name FROM sql_text /*定义*/ 
EXECUTE statement_name [USING variable [,variable...]] /*执行预处理语句*/ 
DEALLOCATE PREPARE statement_name /*删除定义*/

例如:

SET @v_disable_temp = concat_ws(' ', 'update ', v_table_name, 'set is_valid=false where (expire_time-now())> (select value_data from ', concat('platform_params_p', v_table_sub), 'where param_key=\'tempDismissInterval\');');
    SELECT @v_disable_temp;
    PREPARE sqlstr2 FROM @v_disable_temp;
    EXECUTE sqlstr2;
    DEALLOCATE PREPARE sqlstr2;

批量更新语句(UPDATE)

使用UPDATE语句实现批量修改

示例

下面创建一个名为‘bhl_tes’的数据库,并创建名为‘test_user’的表,字段分别为‘id’,‘age’,‘name’,’sex‘。

创建数据库‘bhl_tes’

代码

CREATE DATABASE IF NOT EXISTS bhl_test;

MySQL批量更新不同表中的数据

查看结果

MySQL批量更新不同表中的数据

创建表‘test_user’

代码

CREATE TABLE IF NOT EXISTS `test_user`(
   `id` INT UNSIGNED AUTO_INCREMENT,
   `name` VARCHAR(255) NOT NULL,
   `age` INT(11) NOT NULL,
   `sex` VARCHAR(16),
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

MySQL批量更新不同表中的数据

查看结果

MySQL批量更新不同表中的数据

批量插入记录

INSERT INTO test_user 
(name, age, sex)
VALUES 
('张三', 18, '男'),
('赵四', 17, '女'),
('刘五', 16, '男'),
('周七', 19, '女');

MySQL批量更新不同表中的数据

查看结果

MySQL批量更新不同表中的数据

批量修改记录

UPDATE test_user SET 
name = CASE id 
WHEN 1 THEN '张三' 
WHEN 2 THEN '李四' 
WHEN 3 THEN '王五' 
WHEN 4 THEN '小六' 
END,
age = CASE id 
WHEN 1 THEN 7 
WHEN 2 THEN 8 
WHEN 3 THEN 9 
WHEN 4 THEN 14 
END,
sex = CASE id 
WHEN 1 THEN '男' 
WHEN 2 THEN '男' 
WHEN 3 THEN '男' 
WHEN 4 THEN '男' 
END
WHERE id IN (1,2,3,4);

MySQL批量更新不同表中的数据

查看结果

MySQL批量更新不同表中的数据

MySQL 相关文章推荐
详解MySQL InnoDB存储引擎的内存管理
Apr 08 MySQL
MySQL查询学习之基础查询操作
May 08 MySQL
正确使用MySQL INSERT INTO语句
May 26 MySQL
SQL注入的实现以及防范示例详解
Jun 02 MySQL
mysql优化之query_cache_limit参数说明
Jul 01 MySQL
mysql分组后合并显示一个字段的多条数据方式
Jan 22 MySQL
MySQL实现配置主从复制项目实践
Mar 31 MySQL
优化Mysql查询的示例
Apr 26 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 MySQL
手把手带你彻底卸载MySQL数据库
Jun 14 MySQL
数据设计之权限的实现
Aug 05 MySQL
MySQL自定义函数及触发器
Aug 05 MySQL
mysql查找连续出现n次以上的数字
May 11 #MySQL
mysql如何查询连续记录
May 11 #MySQL
mysql 体系结构和存储引擎介绍
MySQL数据库 安全管理
May 06 #MySQL
Mysql 文件配置解析介绍
May 06 #MySQL
MySQL数据库中的锁、解锁以及删除事务
May 06 #MySQL
mysql性能优化以及配置连接参数设置
May 06 #MySQL
You might like
一个自定义位数的php多用户计数器代码
2007/03/11 PHP
php学习 函数 课件
2008/06/15 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
PHP培训要多少钱
2017/06/06 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
2015/11/30 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
[00:11]战神迅矛
2019/03/06 DOTA
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
Python with用法实例
2015/04/14 Python
理解Python中函数的参数
2015/04/27 Python
Python文件及目录操作实例详解
2015/06/04 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
django主动抛出403异常的方法详解
2019/01/04 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
基于python实现对文件进行切分行
2020/04/26 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
养殖行业的创业计划书
2014/01/05 职场文书
中秋晚会策划方案
2014/06/12 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
法律讲堂观后感
2015/06/11 职场文书
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL
Web应用开发TypeScript使用详解
2022/05/25 Javascript
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android