使用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.com
的email
尚未存在于users
表中,那么会插入一条新记录。 - 如果
john@example.com
的email
已存在于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);
@漏刻有时
相关文章:
使用INSERT INTO ... ON DUPLICATE KEY UPDATE批量插入更新导入excel数据的实践场景应用
INSERT INTO ... ON DUPLICATE KEY UPDATE 是 MySQL 中的一个非常有用的语法,它允许你在插入新记录时,如果记录的唯一键(如主键或唯一索引)已存在,则执行更新操作而不是插入。这可以帮助你避免在插入数据时产生的重复键…...
AJAX-项目优化(目录、基地址、token、请求拦截器)
目录管理 基地址存储 在utils/request.js配置axios请求基地址 作用:提取公共前缀地址,配置后axios请求时都会baseURLurl 填写API的公共前缀后,将js文件导入到html文件中 <script src"../../utils/request.js"></script&…...
SQLite中的动态内存分配(五)
返回:SQLite—系列文章目录 上一篇:SQLite中的原子提交(四) 下一篇:自己编译SQLite或将SQLite移植到新的操作系统(六) 概述 SQLite使用动态内存分配来获得 用于存储各种对象的内存 (例如…...
快速上手Spring Cloud 十一:微服务架构下的安全与权限管理
快速上手Spring Cloud 一:Spring Cloud 简介 快速上手Spring Cloud 二:核心组件解析 快速上手Spring Cloud 三:API网关深入探索与实战应用 快速上手Spring Cloud 四:微服务治理与安全 快速上手Spring Cloud 五:Spring …...
如何简化多个 if 的判断结构
多少算太多? 有些人认为数字就是一,你应该总是用至少一个三元运算符来代替任何单个 if 语句。我并不这样认为,但我想强调一些摆脱常见的 if/else 意大利面条代码的方法。 我相信很多开发人员很容易陷入 if/else 陷阱,不是因为其…...
发掘服务器硬件优势:怎样有效管理、维护、更新
1. 概述 服务器是许多信息技术的核心,通过提供计算和存储资源,以用于企业和机构的数据处理和存储。服务器硬件也是服务器的核心组成部分,在服务器架构和配置中扮演着重要角色。 服务器硬件的优势: - 提供更高的性能和处理能力。…...
SD卡备份和烧录ubuntu20.04镜像
设备及系统:nuc幻影峡谷工控机,ubuntu20.04,树莓派4B,SD卡读卡器 一、确定SD卡设备号的两种方法 方法1: 将有ubuntu镜像的SD卡插入读卡器,再将读卡器插入电脑主机,在 工具 中打开 磁盘&#…...
短视频账号矩阵系统/开发 -- -- -- 蒙太奇算法上线
短视频账号矩阵系统,短视频矩阵系统开发3年技术之路,目前已经在技术竞品出沉淀出来,近期技术迭代的新的功能同步喽: php7.4版本,自研框架,有开发文档,类laravel框架 近期剪辑迭代的技术算法&am…...
Docker Stack(堆栈) 部署多服务集群,多服务编排
1、Docker Stack简介 Docker Stack(堆栈) 是在 Swarm 上管理服务堆栈的工具。而在以前文章docker swarm集群搭建 介绍的 Docker Swarm 只能实现对单个服务的简单部署,于是就引出了Docker Stack。 上面我们介绍到 docker-compose:可以在一台机器上使用…...
全国青少年软件编程(Scratch)等级考试二级考试真题2023年12月——持续更新.....
青少年软件编程(图形化)等级考试试卷(二级) 分数:100 题数:37 一、单选题(共25题,共50分) 1.在制作推箱子游戏时,地图是用数字形式储存在电脑里的,下图是一个推箱子地图,地图表示如下: 第一行(111111) 第二行(132231) 第三行(126621) 第四行( ) 第五行(152…...
python基础——异常捕获【try-except、else、finally】
📝前言: 这篇文章主要介绍一下python基础中的异常处理: 1,异常 2,异常的捕获 3,finally语句 🎬个人简介:努力学习ing 📋个人专栏:C语言入门基础以及python入门…...
JAVA面试大全之JVM和调优篇
目录 1、类加载机制 1.1、类加载的生命周期? 1.2、类加载器的层次? 1.3、Class.forName()和ClassLoader.loadClass()区别?...
数据可视化-ECharts Html项目实战(8)
在之前的文章中,我们学习了如何设置散点图涟漪效果与仪表盘动态指针效果。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢 今天的文章,会…...
JavaSE:继承和多态(下篇)
目录 一、前言 二、多态 (一)多态的概念 (二)多态实现条件 (三)多态的优缺点 三、重写 (一)重写的概念 (二)重写的规则 (三)重…...
springboot+mybatis项目集成p6spy输出格式化sql日志
本文背景:公司项目框架是基于springboot+mybatis的web项目,由于鄙人在使用过程中发现打印的mybatis日志每次都要粘贴出来,然后再用在线工具的格式化填充参数,很不方便,最近发现那个在线的工具打不开了,更不方便了,因此想有没有直接可以输出的填充好参数的sql语句,当然i…...
yarn安装和使用及与npm的区别
一、yarn安装和使用 要安装和使用yarn,您可以按照以下步骤进行操作: 安装Node.js:首先,您需要在您的计算机上安装Node.js。您可以从Node.js的官方网站(https://nodejs.org/en/download/)下载并安装适用于您…...
【3D-GS】Gaussian Splatting SLAM——基于3D Gaussian Splatting的全网最详细的解析
【3D-GS】Gaussian Splatting SLAM——基于3D Gaussian Splatting的定SLAM 3D-GS 与 Nerf 和 Gaussian Splatting1. 开山之作 Nerf2. 扛鼎之作 3D Gaussian Splatting2.1 什么是3D高斯?高斯由1D推广到3D的数学推导2.2 什么是光栅化?2.3 什么是Splatting?2.4 什么是交叉优化?…...
推荐多样性 - 华为OD统一考试(C卷)
OD统一考试(C卷) 分值: 200分 题解: Java / Python / C++ 题目描述 推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略: 各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列表…...
vue基础教程(4)——十分钟吃透vue路由router
同学们可以私信我加入学习群! 正文开始 前言一、路由概念二、路由使用三、创建路由对应的组件四、给整个项目一个入口总结 前言 前面的文章运行成功后,页面显示如下: 在这个页面中,点击Home和About都会切换右面的页面内容&#…...
使用OpenSSL指令测试椭圆曲线签名算法ECDSA
文章目录 小结问题及解决获取secp256r1的公钥和私钥DER格式使用OpenSSL及secp256r1算法获得签名使用OpenSSL及secp256r1算法对签名进行认证 参考 小结 本文记录了使用OpenSSL指令测试椭圆曲线签名算法ECDSA,进行了以下操作:生成椭圆曲线secp256r1 公私密…...
ubuntu之搭建samba文件服务器
1. 在服务器端安装samba程序 sudo apt-get install samba sudo apt-get install smbclient 2.配置samba服务 sudo gedit /etc/samba/smb.conf 在文件末尾追加入以下配置 [develop_share] valid users ancy path /home/ancy public yes writable y…...
P10—P11:Java程序的编译和运行
编译阶段(P10) Java程序的运行包括两个阶段:编译阶段、运行阶段编译阶段主要任务:对Java源程序(以.java为后缀的文件),进行检查其是否符合Java的语法规则。如果符合,则生成字节码文…...
【Docker】Windows中打包dockerfile镜像导入到Linux
【Docker】Windows中打包dockerfile镜像导入到Linux 大家好 我是寸铁👊 总结了一篇【Docker】Windows中打包dockerfile镜像导入到Linux✨ 喜欢的小伙伴可以点点关注 💝 前言 今天遇到一个新需求,如何将Windows中打包好的dockerfile镜像给迁移…...
数据结构之单链表实现(JAVA语言+C语言)
一、理论 1 单链表结构 2 增、删、查 、改思路 (增)直接添加放到最后即可。按顺序添加:找到要修改的节点的前一个节点,插入新节点()。(改)要修改的节点修改内容即可。(…...
docker 安装Sentinel
1.拉取镜像:docker pull bladex/sentinel-dashboard 2.运行镜像:docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard 3. 访问地址: 本地地址:http://localhost:8858 (默认端口为8080) 远程地址…...
通过内网穿透、域名解析实现本地服务部署到公网的架构设计方案
本文主要是总结这些年自己在家玩互联网服务的心得收获, 同时随着年龄增大, 发现脑子确实越来越不好用, 只有记录到笔记中才是真正有意义的。 学生时期做了一些实验, 比如给实验室做日报系统、管理10多台服务器,当时学习了很多架构设计的知识,比如集群化…...
语音陪玩交友软件系统程序-app小程序H5三端源码交付,支持二开!
电竞行业的发展带动其周边产业的发展,绘制着游戏人物图画的抱枕、鼠标垫、海报销量极大,电竞游戏直播、游戏教程短视频也备受人们喜爱,自然,像游戏陪练、代练行业也随之生长起来,本文就来讲讲,从软件开发角…...
import关键字的使用
- import : 导入 - import语句来显式引入指定包下所需要的类。相当于import语句告诉编译器到哪里去寻找这个类。为了使用定义在其它包中的 Java 类,需用 import 语句来显式引入指定包下所需要的类。相当于 import 语句告诉编译器到哪里去寻找这个类 。 语法格式 …...
江协STM32:点亮第一个LED灯和流水灯
很多单片机都是高电平弱驱动,低电平强驱动,所以这里是低电平有效 点亮一个LED灯 操作STM32的GPIO需要三个操作: 第一个使用RCC开启GPIO的时钟 第二步使用GPIO_Init函数初始化GPIO 第三步使用输出或输入函数控制GPIO 1.使用RCC开启GPIO的时…...
设计模式之建造者模式精讲
也叫生成器模式。将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 在建造者模式中,有如下4个角色: 抽象建造者(Builder):用于规范产品的各个组成部分,并进行抽象&…...
郑州做的比较好网站公司/seo攻略
c语言上机填空题.DOC1. 在考生目录下,有Modify.c程序,该程序中 N 是根据程序功能需要填充部分,请完成程序填充(注意不得加行、减行、加句、减句,否则后果自负)。 该程序功能输入m、n(要求输入数均大于0),输出它们的最大…...
湘潭做网站 搜搜磐石网络/怎样做品牌推广
什么牌子的蓝牙耳机无延迟?无延迟游戏蓝牙耳机分享随着各种自媒体、手游、短视频越来越流行,大家对使用便捷的蓝牙耳机的需求也呈几何倍数开始上升。价格相对亲民的游戏蓝牙耳机尤其受到消费者的喜爱。但是如何挑选适合自己的游戏蓝牙耳机呢?…...
沈阳专业网站建设公司排名/调研报告万能模板
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。 下面是我的scala学习笔记连接: Scala学习笔记&#x…...
网站绑定微信号/百度竞价怎么操作
junit 报错 java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayNametestSelectByExample], 坑了我三个点的问题 不是没写 Test,不是 public,参数,返回值,修饰符的错误,也不是 spring 包与 junit 的…...
代理登录网站/uc信息流广告投放
利用matlab将位图转为SVG矢量图0 前言1 算法思路1.1 读取图片1.2 中值滤波1.3 中值滤波1.4 去除孤立的像素1.5 提取单独的颜色1.6 找出二值图像中所有的连接体1.7 将提取出来的每个多边形膨胀1.8 输出为SVG格式2 最终结果展示3 完整的Matlab代码惯例声明:本人没有相…...
盐城哪家做网站的正规/上海网络推广联盟
尽管在PCB电路板生产中实行严格的工艺管理,但在实际的生产过程中,常出现一些与工艺要求不符的不良状况,根据全面质量管理的标准和要求,就需要将这些不良品分检出来,并对这些不良进行分析和处理。认知PCB生产中的质量管控(1) PCB生…...