使用INSERT INTO ... ON DUPLICATE KEY UPDATE批量插入更新导入excel数据的实践场景应用

INSERT INTO ... ON DUPLICATE KEY UPDATE 是 MySQL 中的一个非常有用的语法,它允许你在插入新记录时,如果记录的唯一键(如主键或唯一索引)已存在,则执行更新操作而不是插入。这可以帮助你避免在插入数据时产生的重复键错误,并允许你以一种原子性的方式处理插入或更新的逻辑。

语法用途

  • 插入新记录:当你要插入的新记录的唯一键在表中不存在时,这条记录会被正常插入。
  • 更新现有记录:如果新记录的唯一键已存在于表中,那么会执行 UPDATE 部分的语句来更新该记录。

语法讲解

基本语法结构如下:

INSERT INTO table_name (column1, column2, ... columnN)
VALUES (value1, value2, ... valueN)
ON DUPLICATE KEY UPDATE
column1 = VALUES(column1), column2 = VALUES(column2), ...
  • table_name:要插入或更新的表名。
  • (column1, column2, ... columnN):要插入或更新的列名。
  • (value1, value2, ... valueN):对应列的值。
  • ON DUPLICATE KEY UPDATE:当遇到重复键时执行的更新操作。
  • column1 = VALUES(column1), column2 = VALUES(column2), ...:要更新的列及其对应的值,VALUES(columnN) 表示的是 INSERT 语句中对应列的值。

示例

假设有一个名为 users 的表,包含 id(主键,自增)、email(唯一索引)和 name 列。

如果你想插入一个新用户,但如果该用户的 email 已存在,则更新其 name,你可以这样做:

INSERT INTO users (email, name)
VALUES ('john@example.com', 'John Doe')
ON DUPLICATE KEY UPDATE
name = VALUES(name);
  • 如果 john@example.comemail 尚未存在于 users 表中,那么会插入一条新记录。
  • 如果 john@example.comemail 已存在于 users 表中,那么会更新该用户的 name 为 ‘John Doe’。

注意事项

  • 确保你的表有定义好的主键或唯一索引,这样 MySQL 才能判断何时执行插入操作,何时执行更新操作。
  • VALUES(columnN) 函数在 ON DUPLICATE KEY UPDATE 子句中用于引用 INSERT 语句中的对应列值。
  • 如果有多个唯一键或唯一索引可能导致冲突,MySQL 会根据定义的顺序来决定使用哪一个。
  • ON DUPLICATE KEY UPDATE 语句可以引用表中的其他列来进行更新,不一定非要用 VALUES(columnN)

这个语法在处理需要确保唯一性的数据时非常有用,比如用户信息、订单号等,它可以减少应用逻辑中的条件判断和数据库操作的次数,提高性能和一致性。

场景应用

从Excel中批量导入数据,使用

 $sql = 'INSERT INTO ' . $db->table('school') . ' (school_id,school_name,school_short_name,school_type,school_attribute,school_teacher,school_student,school_address,school_lng,school_lat,school_leader,school_leader_phone,school_leader2,school_phone2,school_leader3,school_phone3,school_water,school_electricity,school_url,school_content) VALUES ';for ($j = 2; $j <= $highestRow; $j++) {$school_id = $objPHPExcel->getActiveSheet()->getCell("A" . $j)->getValue();$school_name = $objPHPExcel->getActiveSheet()->getCell("B" . $j)->getValue();$school_short_name = $objPHPExcel->getActiveSheet()->getCell("C" . $j)->getValue();$school_type = $objPHPExcel->getActiveSheet()->getCell("D" . $j)->getValue();$school_attribute = $objPHPExcel->getActiveSheet()->getCell("E" . $j)->getValue();$school_teacher = $objPHPExcel->getActiveSheet()->getCell("F" . $j)->getValue();$school_student = $objPHPExcel->getActiveSheet()->getCell("G" . $j)->getValue();$school_address = $objPHPExcel->getActiveSheet()->getCell("H" . $j)->getValue();$school_lng = $objPHPExcel->getActiveSheet()->getCell("I" . $j)->getValue();$school_lat = $objPHPExcel->getActiveSheet()->getCell("J" . $j)->getValue();$school_leader = $objPHPExcel->getActiveSheet()->getCell("K" . $j)->getValue();$school_leader_phone = $objPHPExcel->getActiveSheet()->getCell("L" . $j)->getValue();$school_leader2 = $objPHPExcel->getActiveSheet()->getCell("M" . $j)->getValue();$school_phone2 = $objPHPExcel->getActiveSheet()->getCell("N" . $j)->getValue();$school_leader3 = $objPHPExcel->getActiveSheet()->getCell("O" . $j)->getValue();$school_phone3 = $objPHPExcel->getActiveSheet()->getCell("P" . $j)->getValue();$school_water = $objPHPExcel->getActiveSheet()->getCell("Q" . $j)->getValue();$school_electricity = $objPHPExcel->getActiveSheet()->getCell("R" . $j)->getValue();$school_url = $objPHPExcel->getActiveSheet()->getCell("S" . $j)->getValue();$school_content = $objPHPExcel->getActiveSheet()->getCell("T" . $j)->getValue();//数据入库;$itemStr = '("';$itemStr .= $school_id . '","' . $school_name . '","' . $school_short_name . '","' . $school_type . '","' . $school_attribute . '","' . $school_teacher . '","' . $school_student . '","' . $school_address . '","' . $school_lng . '","' . $school_lat . '","' . $school_leader . '","'. $school_leader_phone . '","' . $school_leader2 . '","' . $school_phone2 . '","' . $school_leader3 . '","' . $school_phone3 . '","' . $school_water . '","' . $school_electricity . '","' . $school_url . '","' . $school_content;$itemStr .= '"),';$sql .= $itemStr;}$sql = rtrim($sql, ',') . " ON DUPLICATE KEY UPDATE ";$sql .= " school_name= VALUES(school_name), school_short_name = VALUES(school_short_name),school_type = VALUES(school_type),school_attribute = VALUES(school_attribute),school_teacher = VALUES(school_teacher),school_student= VALUES(school_student), school_address = VALUES(school_address),school_lng = VALUES(school_lng),school_lat = VALUES(school_lat),school_leader = VALUES(school_leader),school_leader_phone= VALUES(school_leader_phone), school_leader2= VALUES(school_leader2), school_phone2= VALUES(school_phone2), school_leader3= VALUES(school_leader3),school_phone3= VALUES(school_phone3),school_water= VALUES(school_water), school_electricity= VALUES(school_electricity), school_url= VALUES(school_url), school_url= VALUES(school_content)";$db->query($sql);

@漏刻有时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/775046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速幂算法在Java中的应用

引言&#xff1a; 在计算机科学和算法领域中&#xff0c;快速幂算法是一种用于高效计算幂运算的技术。在实际编程中&#xff0c;特别是在处理大数幂运算时&#xff0c;快速幂算法能够显著提高计算效率。本文将介绍如何在Java中实现快速幂算法&#xff0c;并给出一些示例代码和应…

151 shell编程,正则表达式,在C语言中如何使用正则表达式

零&#xff0c;坑点记录&#xff1a;bash 和 dash 的区别&#xff0c;导致的坑点 查看当前用的shell 是啥&#xff0c;用的是/bin/bash hunandedehunandede-virtual-machine:~$ echo $SHELL /bin/bash 当shell 脚本运行的时候&#xff08;后面会学到方法&#xff0c;这里是最…

全局UI方法-弹窗一警告弹窗(AlertDialog)

1、描述 显示警告弹窗组件&#xff0c;可设置文本内容与响应回调。 2、属性 名称参数类型参数描述showAlertDialogParamWithConfirm | AlertDialogParamWithButtons定义并显示AlertDialog组件。 2.1、AlertDialogParamWithConfirm对象说明&#xff1a; 参数名称参数类型必填…

『Apisix安全篇』探索Apache APISIX身份认证插件:从基础到实战

&#x1f680;『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 &#x1f4e3;读完这篇文章里你能收获到 &#x1f6e0;️ 了解APISIX身份认证的重要性和基本概念&#xff0c;以及如何在微服务架构中实施API安全。&#x1f511; 学习如何使…

FreeRTOS(三)

第二部分 事件组 一、事件组的简介 1、事件 事件是一种实现任务间通信的机制&#xff0c;主要用于实现多任务间的同步&#xff0c;但事件通信只能是事件类型的通信&#xff0c;无数据传输。其实事件组的本质就是一个整数(16/32位)。可以是一个事件发生唤醒一个任务&#xff…

ClickHouse初体验

1.clickHouse是啥&#xff1f; ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS)&#xff0c;使用 C语言编写&#xff0c;主要用于在线分析处理查询(OLAP)&#xff0c;能够使用SQL查询实时生成分析数据报告 2.clickHouse的特点 2.1列式存储 对于列的聚合&…

【华为OD机试】考勤信息【C卷|100分】

题目描述 公司用一个字符串来表示员工的出勤信息 absent:缺勤 late:迟到 leaveearly:早退 present:正常上班 现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤奖的条件如下: 缺勤不超过一次; 没有连续的迟到/早退; 任意连续7次考勤,缺勤/迟到/早退不超过3次…

Redis中的缓存雪崩、缓存击穿、缓存穿透问题

这里写目录标题 什么是缓存雪崩(缓存时效)雪崩的原因如何预防缓存雪崩 什么是缓存穿透&#xff08;访问不存在的数据&#xff0c;比如查询id为负一的数据&#xff09;导致缓存穿透的原因解决办法 什么是缓存击穿&#xff08;高并发时缓存时效&#xff09;缓存击穿的原因解决办法…

glob模块篇

文章目录 glob模块介绍搜索当前目录下的所有 .txt 文件&#xff1a;搜索特定目录下的所有 .py 文件&#xff1a;搜索子目录中的文件&#xff1a;使用通配符&#xff1a;glob.glob(pathname, *, root_dirNone, dir_fdNone, recursiveFalse, include_hiddenFalse)glob.iglob(path…

vue中数字转汉字,带小数转化

小数转为角分 export default { methods: { numberToChinese(num) { if (typeof num ! number || isNaN(num)) { return 输入的不是一个有效的数字; } const chineseNums [零, 一, 二, 三, 四, 五, 六, 七, 八, 九]; const units [, 十, 百, 千]; const bigUnits […

城市内涝排水新模式:慧天[HTWATER]

慧天[HTWATER]软件&#xff1a;慧天排水数字化分析平台针对城市排水系统基础设施数据管理的需求&#xff0c;以及水文、水力及水质模拟对数据的需求&#xff0c;实现了以数据库方式对相应数据的存储。可以对分流制排水系统及合流制排水系统进行地表水文、管网水力、水质过程的模…

Transformers 直观解释——不仅是如何工作,而且为什么工作得这么好

输入序列如何到达Attention模块 注意力模块存在于编码器堆栈中的每个编码器中&#xff0c;以及解码器堆栈中的每个解码器中。我们将首先放大编码器的注意力。 Attention in the Encoder&#xff1a; 举个例子&#xff0c;假设我们正在研究一个英语到西班牙语的翻译问题&…

【旅游】泉州攻略v1.0.0

一、泉州古城 泉州市距离深圳大约520公里&#xff0c;从深圳北站出发&#xff0c;高铁大约3小时30分。 到达泉州西站后&#xff0c;往东南方向大约8公里&#xff0c;就可以到达主要的旅游景点泉州古城。 古城很适合使用一天玩耍&#xff0c;核心路线如下&#xff1a; 一路的景…

C++ STL教程

C STL教程 文章目录 C STL教程1.1 std::vector1.1.1vector的定义1.1.2vector容器的初始化1.1.3vector容器内元素的访问和修改1.1.4vector中的常用函数 1.2 std::string1.2.1string的定义1.2.2string的初始化1.2.3string中元素的访问和修改1.2.4string中连接字符串1.2.5string中…

AtCoder Beginner Contest 337 A - E

A - Scoreboard 大意 高桥队和青木队进行了场比赛&#xff0c;给出每场比赛中高桥队和青木队的积分&#xff0c;问最后谁总分更高或平局。 思路 统计总分比较即可。 代码 #include<iostream> using namespace std; int main(){int n, a0, b0;cin >> n;while(…

介绍部署esxi8.0产品的方式

什么是esxi esxi的中文叫裸机虚拟机管理器 ESXi是由VMware公司开发的一种裸机虚拟机管理器&#xff0c;全称为VMware ESXi。 ESXi是一种虚拟化技术&#xff0c;专门设计用于在物理服务器上运行虚拟机&#xff0c;它的主要特点是能够最大限度地降低硬件配置要求并简化部署过程…

184. 部门工资最高的员工

文章目录 题意思路代码 题意 题目链接 查出每个部门最高工资 思路 子查询group by 代码 select b.name as Department,a.name as Employee,salary from Employee as a left joinDepartment as b ona.departmentId b.id where(a.departmentId, salary) in(select departme…

C++迈向精通:学习笔记:类属性与类方法

类属性与类方法 注意&#xff1a;这不是教程&#xff0c;是学习笔记&#xff0c;不适合初学者阅读&#xff01;&#xff01; 类属性与方法 成员属性与成员方法 在类中定义的方法与属性&#xff0c;就叫做成员属性与方法。 类属性与类方法 依然在类里面&#xff0c;但区别…

vcf文件可以用excel打开吗?四种解决方案

vcf文件可以用excel打开吗&#xff1f; 当然可以。 一、VCF文件简介 VCF&#xff08;vCard&#xff09;文件是一种用于存储联系人信息的文件格式。它通常包含姓名、电话号码、电子邮件地址、地址等详细信息。VCF文件在多种设备和操作系统中广泛使用&#xff0c;特别是在电子邮…

字节流 字符流回顾

字节流&#xff1a;字节流以字节为单位进行数据传输。这种流适用于处理二进制数据&#xff0c;例如图片、音频、视频等文件。在Java中&#xff0c;字节流由InputStream和OutputStream类及其子类实现。常见的字节流类包括FileInputStream、FileOutputStream、等。 字符流&#…