锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. 数据库
  4. 大批量数据,用mysql批量更新数据的四种方法

大批量数据,用mysql批量更新数据的四种方法

0
  • 数据库
  • 发布于 2024-08-08
  • 0 次阅读
黄健
黄健

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

建一个测试表

create table users
(
    id   int auto_increment
        primary key,
    name varchar(255) null,
    age  int          null
);

1 replace into 批量更新【谨慎用】

/**
  没有就新增,id一样,就修改
  特别注意:每列数据都要写上,不然就会设为null,你就惨了
 */
replace into users (id,name,age) values (1,'aa',20),(2,'bb',30),(3,'cc',40);
 
/* 找死 */
replace into users (id,age) values (1,21),(2,31),(3,41);
 
/* 正确写法 */
replace into users (id,name,age) values (1,'aa',21),(2,'bb',31),(3,'cc',41);

2 insert into ...on duplicate key update 批量更新

/**
  执行第一次:(首次数据库表中没有数据,正常插入)
 */
insert into users (id,name,age) values (1,'aa',20),(2,'bb',30),(3,'cc',40)
on duplicate key update age=age+1;
 
/**
  没有就新增,id一样,就修改,age 列都加1
 */
insert into users (id) values (1),(2),(3)
on duplicate key update age=age+1;
 
/**
  将 name 从 'aa' ,改为 'aa-1',
  age加1
 */
insert into users (id,name) values (1,'aa-1'),(2,'bb-1'),(3,'cc-1')
on duplicate key update name=values(name) ,age=age+1;
 
/**
  将 name 从 ‘aa-1’ 改为 'xiaowang'
  age 改为 10 ,以此类推
 */
insert into users (id,name,age) values (1,'xiaowang',10),(2,'xiaoming',15),(3,'xiaochen',20)
on duplicate key update name=values(name),age=values(age);

3 创建临时表,先更新临时表,然后从临时表中 update

/**
  创建临时表[session级别的,所以另开个窗口看不见],先更新临时表,然后从临时表中联表update
 */
create temporary table users_temp
select * from users;
 
select * from users_temp;
/* 修改临时表 */
update users_temp set age=age+1;
 
/*
修改正式表的记录
set位置,正式表要在前面
*/
update users,users_temp set users.age=users_temp.age where users.id=users_temp.id;
 
drop table users_temp;

4 使用 mysql 自带的语句构建批量更新 [数据控制在 1w 以内]

update users set age=age+1 where id in (1,2,3);
 
/**
  建议将修改记录条数控制在1W左右,不要超过2W,否则会耗费的时间也是成倍增加的
 */
update users
set name = case id
    when 1 then '小刚'
    when 2 then '小明'
    when 3 then '小陈'
    else name
end ;
 
update users
set name = case id
               when 1 then '小刚-1'
               when 2 then '小明-1'
               else name
    end
where id in (1,2,3) ;
标签: #数据库 67
相关文章

深入理解MySQL InnoDB中的B+索引机制 2024-09-30 14:41

目录 一、InnoDB中的B+ 树索引介绍 二、聚簇索引 (一)使用记录主键值的大小进行排序

mysql中B+树的数据存储 2024-09-29 16:36

B+树索引基础分析 B+树 的定义 B+树是一种自平衡的树形数据结构,常用于数据库和操作系统的索引结构。它具有以下特点: 所有数据都存储在叶子节点,非叶子节点仅存储键值和子节点的指针。 叶子节点之间通过指针相互连接,形成一个有序链表,便于范围查询。 每个节点可以拥有多个键值,键值之间是有序的。 B+

MySQl索引事务(B树) 2024-09-29 16:36

目标: 索引 事务 1.索引 1.1概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 1.2作用 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。 索引所起的作用类似书籍

MySQL数据库的备份与恢复 2024-09-26 17:57

MySQL数据库的备份与恢复 在现代信息时代,数据已成为企业和个人的重要资产,数据的安全性和可恢复性直接影响到业务的连续性和稳定性。MySQL作为广泛使用的关系型数据库管理系统,其数据的备份与恢复显得尤为重要。本文将详细探讨MySQL数据库的备份与恢复策略,包括备份的重要性、备份类型、常用备份方法及

MySQL中创建数据库和表 2024-09-26 17:57

在MySQL中创建数据库和表是数据库管理的基础步骤,它们构成了数据存储和操作的基础结构。下面,我将详细介绍如何在MySQL中创建数据库和表,包括创建数据库的基本语法、设计表的考虑因素、表的创建过程、数据类型和约束的使用等,力求内容详尽且不少于2000字。 一、创建数据库 在MySQL中,数据库是一个

MySQL数据库主从搭建(详细图文) 2024-09-28 15:11

MySQL数据库主从搭建(详细图文) 前言 主从原理: MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以"事件"的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.