MySQL的on duplicate key update 使用说明与总结

chatgpt/2023/9/27 15:45:36

https://blog.csdn.net/weixin_44786530/article/details/123069755

    <insert id="insertBatch" parameterType="java.util.List">insert into tb_water_source_station(ownership, station_name,`date`,current_capacity,max_capacity,current_level,max_level,`position`,position_value,state,create_time,update_time)values<foreach collection="entities" item="entity" separator=",">(#{entity.ownership}, #{entity.stationName}, #{entity.date},#{entity.currentCapacity},#{entity.maxCapacity},#{entity.currentLevel},#{entity.maxLevel},#{entity.position},#{entity.positionValue},#{entity.state},#{entity.createTime},#{entity.updateTime})</foreach>ON DUPLICATE KEY UPDATEmax_level = IF( values(max_level), values(max_level),max_level),max_capacity = IF( values(max_capacity), values(max_capacity), max_capacity),current_capacity = IF( values(current_capacity), values(current_capacity), current_capacity),current_level = IF( values(current_level), values(current_level), current_level),update_time=values(update_time)</insert>

max_capacity = IF( values(max_capacity), values(max_capacity), max_capacity)
这一段代码是用于在插入数据时处理可能出现的冲突,特别是针对重复键冲突的情况。
让我们分解这段代码的含义:
max_capacity =: 这是指定要更新的列名,即max_capacity列。
IF( values(max_capacity), values(max_capacity), max_capacity): 这是一个条件表达式,它有三个参数:
values(max_capacity): 这表示从VALUES子句中获取到的新值,即在插入时所提供的max_capacity的值。
values(max_capacity): 如果第一个参数不为null(即有提供新值),那么这将是条件为真时的返回值,也就是将使用新值来更新max_capacity列。
max_capacity: 如果第一个参数为null(即没有提供新值),那么这将是条件为假时的返回值,也就是将保持原有的max_capacity值。
综合起来,这段代码的作用是:如果在插入数据时出现了max_capacity列的重复键冲突(即插入的记录已经存在),那么将根据新值更新max_capacity列;如果没有冲突,则保持原有的max_capacity值不变。

max_capacity = IF( max_capacity, max_capacity, values(max_capacity))
这段代码的含义和之前解释的一样,也是用于处理重复键冲突的情况。
max_capacity =: 这是指定要更新的列名,即max_capacity列。
IF( max_capacity, max_capacity, values(max_capacity)): 这是一个条件表达式,它有三个参数:
max_capacity: 这表示从数据库中已存在的记录中获取到的max_capacity的值。
max_capacity: 如果第一个参数为真(即已存在的max_capacity值不为null),那么这将是条件为真时的返回值,也就是将保持原有的max_capacity值不变。
values(max_capacity): 如果第一个参数为假(即已存在的max_capacity值为null),那么这将是条件为假时的返回值,也就是将使用新值来更新max_capacity列,该新值来自于VALUES子句中插入时所提供的max_capacity的值。
因此,无论是之前的代码还是修改后的代码,它们都是为了处理插入数据时可能出现的重复键冲突情况,并根据需要更新相应的列。您可以根据个人偏好选择其中一种写法,它们在逻辑上是等效的。

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

25.5 matlab里面的10中优化方法介绍——牛顿法(matlab程序)

1.简述 1 牛顿法简介 牛顿迭代法&#xff08;Newton’s method&#xff09;又称为牛顿-拉夫逊&#xff08;拉弗森&#xff09;方法&#xff08;Newton-Raphson method&#xff09;&#xff0c;它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。 多数方程不存…

快应用编译前如何统一替换字符串

假设你有一个需求&#xff0c;要把代码里的ad-button替换为div&#xff0c;因为是mi看ad-button不爽。 这还不简单么&#xff0c;webpack有那么多成熟的plugins和loaders&#xff0c;本身我对webpack也只是略知一二&#xff0c;随便一搜网上的解决方案&#xff0c; string-re…

UNITY随记(八) SHADER实现立方体CUBE显示边框,描边

Shader "Vitens/CubeOutline"{Properties{_Color("Color", color) (1,1,1,1)_Width("Width", range(0,0.5)) 0.1}SubShader{Tags { "Queue""Transparent" }Pass {//如果要显示背面的线框&#xff0c;取消下面两个注释即可…

图解TCP 三次握手和四次挥手的高频面试题(2023最新版)

大家好&#xff0c;最近重新整理了一版 TCP 三次握手和四次挥手的面试题&#xff08;2023最新版&#xff09;。 ----- 任 TCP 虐我千百遍&#xff0c;我仍待 TCP 如初恋。 巨巨巨巨长的提纲&#xff0c;发车&#xff01;发车&#xff01; img TCP 基本认识 TCP 头格式有哪些…

json-server详解

零、文章目录 json-server详解 1、简介 Json-server 是一个零代码快速搭建本地 RESTful API 的工具。它使用 JSON 文件作为数据源&#xff0c;并提供了一组简单的路由和端点&#xff0c;可以模拟后端服务器的行为。github地址&#xff1a;https://github.com/typicode/json-…

uniapp项目的pdf文件下载与打开查看

最近写的uniapp项目需要新增一个pdf下载和打开查看功能&#xff0c;摸索了半天终于写了出来&#xff0c;现分享出来供有需要的同行参考&#xff0c;欢迎指正 async function DownloadSignature() {//请求后端接口&#xff0c;返回值为一个url地址let resawait req.flow.flowDo…

关于golang锁的一点东西

本文基于go 1.19.3 最近打算再稍微深入地看下golang的源码&#xff0c;先从简单的部分入手。正巧前段时间读了操作系统同步机制的一点东西&#xff0c;那么golang这里就从锁开始好了。 在这部分内容中&#xff0c;可能不会涉及到太多的细节的讲解。更多的内容会聚焦在我感兴趣…

通过IDEA发送QQ邮箱信息

先创建一个普通的Maven项目&#xff0c;我就不演示啦&#xff0c;个人博客已经写过~[创建一个maven项目]。 项目创建成功后&#xff0c;引人Maven依赖&#xff0c;如下: <dependencies><dependency><groupId>org.apache.commons</groupId><artifact…
推荐文章