mysql批量插入、更新

2023-10-30

1、创建表

CREATE TABLE `user`  (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',
  `age` int(11) NOT NULL COMMENT '年龄',
  `status` int(11) NOT NULL DEFAULT 0 COMMENT '状态',
  `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `name`(`name`, `age`) USING BTREE
)

添加数据

INSERT INTO `user` VALUES (296, '李四0', 12, 0, '2019-06-25 19:33:26', '2019-06-25 20:42:40');
INSERT INTO `user` VALUES (297, '李四1', 13, 1, '2019-06-25 19:33:26', '2019-06-25 20:42:40');
INSERT INTO `user` VALUES (298, '李四2', 14, 0, '2019-06-25 19:49:55', '2019-06-25 20:42:40');

2、批量更新方式

2.1 使用case when then

>UPDATE USER 
	SET NAME =
CASE
	id 
	WHEN 296 THEN
	"李四10" 
	WHEN 297 THEN
	"李四11" 
	WHEN 298 THEN
	"李四12" 
	END,
	age =
CASE
	id 
	WHEN 296 THEN
	22 
	WHEN 297 THEN
	23
	WHEN 298 THEN
	24
END 
WHERE
	id IN ( 296, 297, 298 );
> Affected rows: 3
> 时间: 0.001s

where的作用:即是将条件语句写在了一起。这里的where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。

mybatis示例:

UPDATE user
<trim prefix="set" suffixOverrides=",">
    <trim prefix="name =case" suffix="end,">
        <foreach collection="list" item="item" index="index">
            <if test="item.name!=null">
                when id=#{item.id} then #{item.dateStart}
            </if>
        </foreach>
    </trim>
    <trim prefix="class_name =case" suffix="end,">
        <foreach collection="list" item="item" index="index">
            <if test="item.className!=null">
                when id=#{item.id} then #{item.className}
            </if>
        </foreach>
    </trim>
</trim>
WHERE id IN
<foreach collection="list" item="item" separator="," open="(" close=")">
    #{item.id}
</foreach>

 

2.2 replace into(不建议)

>REPLACE INTO USER ( NAME, age, `status` )
VALUES
	( '李四10', 22, 110 ),
	( '李四11', 23, 111 ),
	( '李四13', 24, 112 );
> Affected rows: 5
> 时间: 0.002s

先检测该记录是否存在(PRIMARY KEY或一个UNIQUE索引),如果存在,先删除(delete),在插入(insert),受影响为2行;如果不存在,插入(insert),受影响为1行。

存在的问题

  • 如果记录存在,每次执行完,主键自增id就变了(相当于重新insert了一条),对于联表查询,如果主表的id变了,其它子表没做好同步,会造成数据不一致。
  • 自增id会跳跃自增,增长过快。

2.3 on duplicate key update

>INSERT INTO USER ( NAME, age, STATUS, update_time )
VALUES
	( '李四10', 22, 11, now( ) ),
	( '李四11', 23, 12, now( ) ),
	( '李四15', 25, 15, now( ) ) 
	ON DUPLICATE KEY UPDATE STATUS =
VALUES
	( STATUS ),
	update_time =
VALUES
	( update_time );
> Affected rows: 5
> 时间: 0.003s

先检测该记录是否存在(PRIMARY KEY或一个UNIQUE索引),如果存在,更新(update),只更新需要更新的字段,受影响为2行;如果不存在,插入(insert),受影响为1行。

存在问题

  • 自增id会跳跃自增,增长过快。建议id使用如下类型
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT

2.4 insert ignore into(避免重复添加)

>INSERT IGNORE INTO USER ( NAME, age, `status` )
VALUES
	( '李四10', 22, 110 ),
	( '李四11', 23, 111 ),
	( '李四16', 26, 116 );
> Affected rows: 1
> 时间: 0.002s

先检测该记录是否存在(PRIMARY KEY或一个UNIQUE索引),如果存在,忽略,受影响为0行;如果不存在,插入(insert),受影响为1行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql批量插入、更新 的相关文章

  • Hibernate、MySQL 视图和 hibernate.hbm2ddl.auto = 验证

    我可以在 Hibernate 中使用 MySQL 视图 将它们视为表 即 该实体与为表创建的实体没有什么不同 但是 当 Hibernate 设置为验证模型时 我的应用程序将不会部署 因为它找不到视图 因为它假设它是一个表 是否可以在启用部署
  • MySQL更改表,添加具有唯一随机值的列

    我有一个表 我添加了一个名为phone 该表还有一个 id 设置为自动增量的主键 如何将随机值插入到电话列中 该值不会重复 以下 UPDATE 语句确实插入了随机值 但并非所有值都是唯一的 另外 我没有被卖掉 我投了phone字段也正确 但
  • MySQL如何进行浮点加法的数学计算?

    我测试过SELECT 0 1 0 2 用MySQL MariaDB 查询 它返回了正确的答案 MariaDB none gt SELECT 0 1 0 2 0 1 0 2 0 3 1 row in set 0 000 sec 在大多数编程语
  • MAMP Python-MySQLdb 问题:调用 Python 文件后 libssl.1.0.0.dylib 的路径发生变化

    我正在尝试使用 python MySQLdb 访问 MAMP 服务器上的 MySQL 数据库 当我最初尝试使用 python sql 调用 Python 文件来访问 MAMP 上的数据库时 我得到了image not found关于错误li
  • mysql查询先慢后快

    我有 2 个 myISAM 表 分别称为 tests 和 completed tests 一个有 170 个条目 另一个有 118k 条目 当我运行此查询时 SELECT ct archive ct status ct score ct u
  • 在 ADO 查询 (mysql/MyConnector) 中使用参数

    今天我下载并安装了 MyConnector 这样我就可以通过 ADO 使用 Mysql 一切都安装好了 我可以与 ODBC 连接并从我的 delphi 环境进行连接 当我在运行时构建查询时 我收到一条错误消息 项目 Project1 exe
  • 哈希 MySQL 数据库架构

    我想对 MySQL 数据库模式 没有数据 进行哈希 签名 以便对其进行校验和 以确保它不被其他人修改 我怎样才能实现它 据我了解您的问题 您需要表校验和 checksum table table 所以 我想 只需对空表进行校验和
  • mysql 使用什么样的哈希?

    我正在编写类似于 phpMyAdmin 的自己的代码 但我需要用户能够使用 mysql 数据库中的用户名和密码登录 我需要知道mysql数据库使用什么样的哈希来存储每个用户的密码 我检查了 dev mysql com 寻找答案 但除了以 开
  • 哈希密码字段使用什么数据类型以及长度?

    我不确定密码哈希是如何工作的 稍后将实现 但现在需要创建数据库模式 我正在考虑将密码限制为 4 20 个字符 但据我了解 加密后哈希字符串的长度将有所不同 那么 如何将这些密码存储在数据库中呢 更新 仅使用哈希函数不足以存储密码 你应该阅读
  • 如何通过 MySQL Workbench 或 CLI 或 MySQLWeb 数据库管理应用程序连接到 Pivotal Cloud Foundry (PCF) 上的 MySQL 服务?

    我有一个Spring Boot based REST部署在的应用程序Pivotal Cloud Foundry PCF 并且工作正常 但是这个 REST 应用程序到目前为止还没有任何数据库连接 因此 我决定安装MySQL服务于PCF从市场上
  • MySQL LAST_INSERT_ID() 和 FOUND_ROWS()

    当 PHP 脚本每秒有数百个查询时会发生什么 它会影响这些函数吗 是否保证它们会返回当前脚本中最后一个插入语句中最后插入的 id 它会返回当前脚本中最后一次选择的行数吗 如果同时从另一个脚本进行新的插入或选择 在 FOUND ROWS 的情
  • Delphi XE5 FireDAC 错误:无法加载供应商库 [libmysql.dll 或 libmysqld.dll]

    我在 Windows 7 64 位上使用 Delphi XE5 只是尝试 FireDAC 组件 我正在使用一个 TFDConnection 组件连接到本地 MySQL 数据库 v5 6 15 我已经将 libmysql dll 32位 v5
  • 将sql查询结果写入mysql中的文件

    我正在尝试使用 mysql 将查询结果写入文件 我在一些地方看到了有关 outfile 构造的一些信息 但似乎这只将文件写入正在运行 MySQL 的机器 在本例中是远程机器 即数据库不在我的本地机器上 或者 我还尝试运行查询并从 mysql
  • Wordnet sqlite 同义词和示例

    我正在尝试获取给定 wordid 的同义词和示例列表 经过大量的试验和错误 我可以获得所有同义词集的样本 但不是实际的同义词 这是我的查询 它给出了以下结果 select senses wordid senses synsetid sens
  • 日常 MySQL(部分和过滤)复制的最佳实践?

    我有一个相当大的数据库 有超过 40 个表 我只需要复制几个表 5 并且每个表也被过滤 我正在寻找一些复制这些数据的最佳实践 每天就足够了 我可以只选择几个表并为每个表包含一些 WHERE 子句 我正在考虑为每个表启动 mysqldump
  • 级联删除时触发调用

    我在 MySQL 中有表 A 它有一些对其他表 B C D 的级联删除的引用 当从 A 中删除某些内容时 我需要使用触发器 当我直接从 A 删除记录时 此触发器起作用 但它不适用于级联删除 是否存在任何版本的 MySQL 可以让我的触发器与
  • VIEW for 表结合 UNION ALL 的 MySQL 性能

    假设我有 2 张桌子MySQL create table persons id bigint unsigned not null auto increment first name varchar 64 surname varchar 64
  • Mysql关于重复键更新+子查询

    使用这个问题的答案 需要 MySQL INSERT SELECT 查询具有数百万条记录的表 https stackoverflow com questions 662877 need mysql insert select query fo
  • 如何绑定值 INSERT INTO mysql perl

    我有下面的代码可以工作 但我需要知道如何绑定它们以确保安全 如果我只是将 new row 替换为 并将其放入执行中我收到错误 感谢您的帮助 foreach my field account field order new row param
  • Unicode(希腊语)字符存储在数据库中,例如“??????”

    数据库中的希腊字符就像问号 我找不到解决办法 我使用 Java Swing 开发了一个应用程序 但是当我在 MySQL 中插入希腊字母时 就像问号一样 我将数据库排序规则更改为 utf8 并将列也更改为 utf8 我的项目编码设置为UTF

随机推荐

  • Metric评价指标-Perplexity语言模型

    欢迎关注知乎 世界是我改变的 知乎上的原文链接 一 原理介绍 在研究生实习时候就做过语言模型的任务 当时让求PPL值 当时只是调包 不求甚解 哈哈哈 当时也没想到现在会开发这个评价指标 那现在我来讲一下我对这个指标的了解 望各位大佬多多指教
  • HyperLogLog-Redis中的基数统计算法

    1 基本概念 基数 cardinality 是指一个集合中不同元素的个数 例如集合 1 2 3 4 5 2 3 9 7 这个集合有9个元素 但是2和3各出现了两次 因此不重复的元素为1 2 3 4 5 9 7 所以这个集合的基数是7 Red
  • 过来人聊聊眼中的普通码农和技术大牛的区别

    最近几年 IT行业中的各个群里突然流行了一个词 大牛 有些人因为在学术界发了很多论文而被称之为牛 有些人因为在群里努力帮助大家解决问题而被称之为大牛 有些人因为写了一本技术的书而被称之为大牛 有些人因为开源了很多技术知识二被称之为大牛 还有
  • Executor框架及线程池总结

    概述 Executor作为一个灵活且强大的异步执行框架 其支持多种不同类型的任务执行策略 提供了一种标准的方法将任务的提交过程和执行过程进行了解耦开发 基于生产者和消费者模型 还提供了对生命周期的支持 以及统计信息收集 应用程序管理机制和性
  • Cocos2d-x的SprideMonkey的JavaScript与C++的交互(三) - 全局变量Obj的操作

    javascript c 交互 spidermonkey javascript c 交互 需求 全局变量Obj的操作 这个是作为JS脚本来说非常有用处的一个地方 比如说 咱们想在JS脚本中存下窗口位置和大小 还有其他杂七杂八的东西 对游戏或
  • java相关异常大全,持续更新~~~

    Java 异常 1 NullPointerException NullPointerException是Java中最常见的异常之一 通常在试图访问或操作一个null对象时引发 示例代码 String str null int length
  • 1004 成绩排名 (20 分) Java写法 读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

    读入 n gt 0 名学生的姓名 学号 成绩 分别输出成绩最高和成绩最低学生的姓名和学号 输入格式 每个测试输入包含 1 个测试用例 格式为 第 1 行 正整数 n 第 2 行 第 1 个学生的姓名 学号 成绩 第 3 行 第 2 个学生的
  • chorme唤起Java开发的本地程序全采坑记

    chorme唤起Java开发的本地程序全踩坑记 背景说明 在开发企业web应用时 往往需要进行订单通知 状态通知 或者需要一些插件式本地应用来扩展一些网页 实现不了的功能等 以通知为例 如果网页标签页或者浏览器切出去了 意味着网页内部的通知
  • 毕业设计-基于深度学习的网络流量异常检测系统

    目录 前言 课题背景和意义 实现技术思路 一 网络流量异常检测方法 二 基于 的物联网流量异常检测 三 实验 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费
  • docker 删除容器 找回容器内文件_如何管理 Docker 容器里的文件

    之前的文章里介绍了 Docker 的基本操作 再来水一篇文章说说怎么对容器里的文件进行管理 Docker 容器虽然类似虚拟机 但如果想要物理机和容器内系统进行文件传输时 还是有点区别的 如果只是单纯对容器内的系统进行本地文件管理的话 那么用
  • 1、Apache Hudi简介

    1 Hudi简介 Hudi是Hadoop Updates and Incrementals的缩写 用于管理HDFS上的大型分析数据集存储 主要目的是高效的减少入库延时 Hudi是一个开源Spark三方库 支持在Hadoop上执行upsert
  • 单词分析(蓝桥杯)

    单词分析 题目描述 小蓝正在学习一门神奇的语言 这门语言中的单词都是由小写英文字母组 成 有些单词很长 远远超过正常英文单词的长度 小蓝学了很长时间也记不住一些单词 他准备不再完全记忆这些单词 而是根据单词中哪个字母出现得最多来分辨单词 现
  • C语言宏定义运算式计算错误的问题

    RT Thread Studio编译器里使用宏定义计算如下公式 按照正常的数学运算关系 算出来的结果是453 59 如果不加括号算出来的值完全不对 结果是 1050360954 1510059952 把计算过程全都加上括号后计算正确 由此可
  • android基础:android页面添加滚动条

    1 建立一个android项目 2 打开layout下的activity main xml文件 如果创建项目事修改了activity main xml文件就选择你修改的文件名 3 删除activity main xml文件中内容 4 将下列
  • Nacos配置中心使用(Spring Cloud版)

    目标 向项目中集成Nacos配置 原项目是一个SpringBoot项目 这里假设我们无法修改原有项目的SpringBoot版本 注意 在不动SpringBoot版本的前提下 根据SpringBoot的版本 确定Spring Cloud和Na
  • unity3d关节物体连接方式 Joint 简介

    Unity3D 在components physics里有很多种Joint方式 用于模拟物体与物体间的联系 物体间作用力等 由于上次辛苦写了一堆没成功保存后 这次就不写那么详细了 做个引子 真的用到的时候大家可以查官网再做具体研究 Hing
  • 花生壳PHTunnel嵌入Openwrt实例

    下载 下载自己的编译平台的二进制PHTunnel文件是第一步要做的 我们可以到贝锐科技开放平台网站 https developer oray com sdk 进行下载 根据自己的型号进行下载 比如我的路由器是基于mipsel c库使用的是u
  • 你值得拥有——流星雨下的告白(Python实现)

    目录 1 前言 2 霍金说移民外太空 3 浪漫的流星雨展示 4 Python代码 1 前言 我们先给个小故事 提一下大家兴趣 然后我给出论据 得出结论 最后再浪漫的流星雨表白代码奉上 还有我自创的一首诗 开始啦 2 霍金说移民外太空 霍金说
  • Python-继承

    单继承 多继承 面向对象三大特性 封装根据职责将属性和方法封装到一个抽象的类中 继承实现代码的重用 相同的代码不需要重复的缩写 多态不同的对象调用相同的方法 产生不同的执行结果 增加代码的灵活度 1 单继承 1 1继承的概念 语法和特点 继
  • mysql批量插入、更新

    1 创建表 CREATE TABLE user id int 11 UNSIGNED NOT NULL AUTO INCREMENT COMMENT id name varchar 255 CHARACTER SET utf8 COLLAT