记录mysql ON DUPLICATE KEY UPDATE 时的小坑以及其底层处理逻辑

这篇具有很好参考价值的文章主要介绍了记录mysql ON DUPLICATE KEY UPDATE 时的小坑以及其底层处理逻辑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

table字段有**(id,column1,column2,column3)**
id为主键
column1column2有复合唯一约束

	<insert id="xxx">
        INSERT INTO table (column1,column2,column3)
        VALUES
        <foreach collection="collection" item="i" separator=",">
            (#{i.column1}, #{i.column2}, #{i.column3})
        </foreach>
        AS new
        ON DUPLICATE KEY UPDATE
        column1 = new.column1, column2 = new.column3, column3= new.column3
    </insert>

这里插入一个已经存在的数据(只是column1column2一样,column3不一样)
报错:
Field ‘id’ doesn’t have a default value
按理说column1column2一样应该走更新操作,但是这里走的插入操作,参考了许多文章才知道原因,这里需要弄清楚使用ON DUPLICATE KEY UPDATEmysql的处理逻辑。

MySQL中的 INSERT INTO … ON DUPLICATE KEY UPDATE 语句的执行逻辑是:

  1. 首先尝试执行插入操作
  2. 如果遇到主键/唯一键冲突,则执行更新操作
  3. 如果没有冲突,则插入成功

因为必须先执行了插入操作,然后我又没设置id值,所以报错了。

解决办法
我这里直接将id设置为了自增,这样就正常了。

总结
使用ON DUPLICATE KEY UPDATE时一定要注意表中的必填值,执行逻辑最先是插入操作,很容易报错。文章来源地址https://www.toymoban.com/news/detail-703097.html

到了这里,关于记录mysql ON DUPLICATE KEY UPDATE 时的小坑以及其底层处理逻辑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL的insert-on-duplicate语句详解

    注意:ON DUPLICATE KEY UPDATE只是 MySQL的特有语法,并不是SQL标准语法! INSERT INTO … ON DUPLICATE KEY UPDATE 是 MySQL 中一种用于插入数据并处理重复键冲突的语法。 这个语法适用于在 insert的时候,如果insert的数据会引起唯一索引(包括主键索引)的冲突,即唯一值重复了,则不会执行

    2024年04月13日
    浏览(42)
  • MySql命令报错:Duplicate entry ‘10‘ for key ‘PRIMARY‘解决方案

    经常遇到这个问题,今天我把这个问题记录下来,以后如果有其他人遇到相同的问题,不至于困惑。我自己也作为一种学习中的出错记录,错题本,提醒自己。 在操作数据库的时候,经常会出现Duplicate entry ‘10’ for key \\\'PRIMARY’这样的报错,这是什么意思呢? 我去翻译了一下

    2024年02月11日
    浏览(42)
  • mysql报错 之 报错:Duplicate entry 字段 for key ‘表名.idx_字段’

    Mysql 进行insert 操作,报错:Duplicate entry 字段 for key ‘表名.idx_字段’ 原因解析:idx 是做的索引键,是具有唯一性 当 mysql中报错 Duplicate entry 字段 for key ‘表名.idx_字段’ 就是代表字段不对,索引字段重复 主键重复 唯一键重复 修改重复的字段,重新进行insert

    2024年04月26日
    浏览(35)
  • Mysql出现问题:ERROR 1062 (23000): Duplicate entry ‘‘ for key ‘PRIMARY‘解决方案

    回城传送–》《数据库问题解决方案》 ❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆,51CTO专家博主🏆 ❤️技术活,该赏 ❤️点赞 👍 收藏 ⭐再看,养成习

    2024年02月02日
    浏览(61)
  • 解决java.lang.IllegalStateException: Duplicate key异常

    项目重启后突然报这个异常 看日志应该是在初始化字典,源代码 这里的操作是把词典list转换成map,然后key冲突。 但我比对了一下数据,没有找到重复的dictValue,报这个错有点莫名其妙。 最后的解决办法参考了其他网友,得以顺利解决,最后上修改后的代码 Collectors.toMap 增

    2024年02月15日
    浏览(48)
  • 已解决java.lang.IllegalStateException: Duplicate key

    已解决java.lang.IllegalStateException: Duplicate key java.lang.IllegalStateException: Duplicate key java.lang.IllegalStateException: Duplicate key 是由于在使用 Map 或 Set 时,试图将一个已经存在的键值或元素添加到集合中而引发的异常。 下滑查看解决方法 要解决这个问题,可以采取以下步骤: 确保你使用

    2024年02月07日
    浏览(52)
  • 报错Duplicate entry ‘值‘ for key ‘字段名‘的解决解决方法

    遇到这种问题, 是你的数据库表那个字段设置了唯一索引。所以这个字段新增的数据不能重复。具体可以打开表,然后点击表设置,具体教程可以看下文章最后 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry \\\'测试\\\' for key \\\'teacher.uk_name\\\'     at

    2023年04月13日
    浏览(57)
  • Duplicate entry ‘XXX‘ for key ‘XXX.PRIMARY‘解决方案。

    今天在插入数据时,出现一个错误 网上查看说是主键冲突了,但是查看数据库并没有,把所有数据清空,或者把表删了之后,在重新建也还是报同样的错。 … … … 最后的结果方案: 方案一:设置主键自增,适合主键为int类型(我的主键是varchar) 方案二:把insert into 表名

    2024年02月01日
    浏览(53)
  • Unity 爬坑日记(遇到小坑就记录一下)

    原因: 数据请求提交过程中,UnityWebRequest 不时出现数据没有释放的情况,偶尔会一部分数据 内存溢出情况: 解决方法: UnityWebRequest 前加上 using 原因: 许可证问题。 解决方法: unity hub登出。 原因:项目设置中项目名称包含空格。  解决方法:将空格删掉。 A re-import of

    2024年02月12日
    浏览(42)
  • ValueError: cannot reindex on an axis with duplicate labels 解决办法

    可能是在建立数据库索引时候,运行了好几遍代码,导致每次运行时候都会再建立一个索引,index中出现重复值 输出: 若有返回”True“,则表明有重复索引 查看重复行 输出: 可以看到有许多相似的值 接着

    2024年02月14日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包