Mysql 插入或者更新 踩坑

news/2024/10/11 5:27:53/

最近在做电商项目,里面存在定时同步的代理商接口,接口xml里面使用了 MySQL的插入或者更新语法,我测试的时候老是发现数据没有更新,点进去才发现这个坑,路过的xdm 可以看下.

我的代码就不贴上来了,写一下具体语法.

导语:在进行数据库操作时,我们经常会遇到插入数据的情况,有时候我们需要插入一条新数据,有时候又需要更新已存在的数据。为了提高数据库操作的效率,我们可以使用INSERT INTO ON DUPLICATE KEY UPDATE语句来完成插入或更新的操作,本篇博客将详细介绍这个语句的使用方法和优点。

1. INSERT INTO ON DUPLICATE KEY UPDATE的基本概念

INSERT INTO ON DUPLICATE KEY UPDATE语句是MySQL提供的一种高效的数据库插入或更新方法。当我们执行INSERT INTO语句时,如果插入的数据违反了唯一约束条件(例如主键或唯一索引),则会触发ON DUPLICATE KEY UPDATE语句,从而执行更新操作。否则,将执行插入操作。

2. 使用INSERT INTO ON DUPLICATE KEY UPDATE的语法

INSERT INTO ON DUPLICATE KEY UPDATE语句的基本语法如下:

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE
column1 = value1, column2 = value2, ...;

在这个语法中,table_name是要插入数据的表名,column1, column2, ...是要插入或更新的列名,value1, value2, ...是要插入的值。当插入的数据违反了唯一约束条件时,column1 = value1, column2 = value2, ...部分会被执行,从而完成更新操作。

3. INSERT INTO ON DUPLICATE KEY UPDATE的优点

3.1 减少数据库操作次数

通过使用INSERT INTO ON DUPLICATE KEY UPDATE语句,我们可以在一次数据库操作中完成插入或更新的操作,而不需要执行额外的查询语句来判断数据是否已存在。这样可以大大减少数据库操作的次数,提高操作效率。

3.2 简化数据库操作逻辑

使用INSERT INTO ON DUPLICATE KEY UPDATE语句可以简化数据库操作的逻辑。我们只需要执行一条语句,即可实现插入或更新的操作,而不需要编写复杂的逻辑判断和多个SQL语句。

3.3 避免数据冲突

插入或更新数据时,有时候会出现数据冲突的情况。使用INSERT INTO ON DUPLICATE KEY UPDATE语句可以在数据冲突时进行更新操作,保证数据的完整性和一致性。

4. 使用示例

下面是一个使用INSERT INTO ON DUPLICATE KEY UPDATE语句的示例:

INSERT INTO students (id, name, age)
VALUES (1, 'John', 20)
ON DUPLICATE KEY UPDATE
name = 'John', age = 21;

INSERT INTO ON DUPLICATE KEY UPDATE

"INSERT INTO ON DUPLICATE KEY UPDATE" 是MySQL的一个语法,当你试图插入一条已经存在于表中作为唯一键或主键的记录时,你可以使用这个语法来更新那条记录。

解决方案1:

INSERT INTO table_name (column1, column2, column3, ...)VALUES (value1, value2, value3, ...)ON DUPLICATE KEY UPDATEcolumn1 = value1, column2 = value2, ...;

在这个解决方案中,你需要提供表名和需要插入的列及其值。如果记录已经存在,那么ON DUPLICATE KEY UPDATE后面的语句会被执行,用新的值更新那条记录。

解决方案2:

如果你想更新所有的列,你可以使用以下语法:

INSERT INTO table_name SET column1 = value1, column2 = value2, ...ON DUPLICATE KEY UPDATEcolumn1 = value1, column2 = value2, ...;

解决方案3:

如果你想在更新时忽略某些列,你可以在ON DUPLICATE KEY UPDATE后面的语句中忽略它们:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...)
ON DUPLICATE KEY UPDATE 
column1 = value1;

在这个例子中,如果记录已经存在,那么只有column1会被更新,column2和column3不会被更新。

注意:这个语法只适用于MySQL,如果你在使用其他数据库,你可能需要找到其他的解决方案。

总结

使用INSERT INTO ON DUPLICATE KEY UPDATE语句可以有效提升数据库操作效率,减少数据库操作次数,简化操作逻辑,避免数据冲突。在实际开发中,我们可以根据具体的业务需求,合理运用这个语句,提高数据库操作的效率和准确性。


http://www.ppmy.cn/news/1464051.html

相关文章

C# yolov8 TensorRT +ByteTrack Demo

C# yolov8 TensorRT ByteTrack Demo 目录 效果 说明 项目 代码 Form2.cs YoloV8.cs ByteTracker.cs 下载 参考 效果 说明 环境 NVIDIA GeForce RTX 4060 Laptop GPU cuda12.1cudnn 8.8.1TensorRT-8.6.1.6 版本和我不一致的需要重新编译TensorRtExtern.dll&…

持续总结中!2024年面试必问 20 道 Redis面试题(六)

上一篇地址:持续总结中!2024年面试必问 20 道 Redis面试题(五)-CSDN博客 十一、Redis集群的原理是什么? 集群是一种分布式系统架构,它由多个节点组成,这些节点共同工作以提供高可用性、扩展性…

009-Linux的管道和重定向

文章目录 前言 一、重定向 1.1、FD简介 1.2、FD举例 1.3、重定向简介 1.3.1、输出重定向 正确输出: 错误输出 案例1:正确输出重定向 案例2:错误输出重定向 ​编辑 案例3:正确和错误都输出重定向到相同位置 1.3.2、输…

数据结构(三)栈 队列 数组

2024年5月26日一稿(王道P78) 栈 基本概念 基本操作 顺序存储结构 基本操作 共享栈 链式存储结构 队列 基本概念 顺序存储结构 循环队列 链式存储结构 基本操作 双端队列 栈和队列的应用 括号匹配 表达式求值 递归 层次遍历 计算机系统 数组和特殊矩阵…

C语言动态内存分配

有些情况下需要开辟的空间大小在程序运行过程中才能确定下来,而常规的在栈区开辟空间是在编译时就分配好了内存,并且内存大小不能改变,因此需要引入动态内存分配,动态内存分配的内存是在堆区,需要由用户手动开辟&#…

SylixOS 版本与 RealEvo-IDE 版本对应关系说明

SylixOS 版本与 RealEvo-IDE 版本对应关系说明 SylixOS 版本IDE 版本发布日期1.4.13.1.52017/01/171.5.23.5.12017/10/121.7.13.8.32018/06/221.8.33.9.52018/10/081.9.9-103.9.102020/01/021.11.63.10.22020/05/131.11.73.10.x2020/06/121.12.93.11.02020/09/111.12.11&#…

学习笔记——动态路由协议——OSPF(OSPF区域)

四、OSPF区域 OSPF路由器在同一个区域(Area)内网络中泛红LSA(链路状态通告)。为了确保每台路由器都拥有对网络拓扑的一致认知,LSDB需要在区域内进行同步。如果OSPF域仅有一个区域,随着网络规模越来越大,LSDB越来越庞大,OSPF路由器…

【C++课程学习】:二叉树的基本函数实现

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 🍉二叉树的结构类型: 🍉1.创建二叉树函数(根据数组&am…