问题的起因,假设有一张表,里面保存了交易订单,每张订单有唯一的ID,有最后更新时间,还有数据,详情如下:

针对这张表会做追加及更新的操作,具体来说就是如果订单不存在就INSERT一条新的,如果已存在就UPDATE。由于入库前无法得知相应记录是否已存在,通常的做法无法以下几种:

1、先SELECT一下,再决定INSERT还是UPDATE;

2、直接UPDATE,如果受影响行数是0,再INSERT;

3、直接INSERT,如果发生主键冲突,再UPDATE;

这几种方法都有缺陷,对MySQL来说其实最好的是直接利用INSERT...ON DUPLICATE KEY UPDATE...语句,具体到上面的test表,执行语句如下 :

可以很好的插入或更新数据,一条语句就搞定,至此一直工作得很好。

后来因为查询方式变更,要求将UID和Time两个字段做联合主键,此时表结构如下:

但是问题来了:一但Time字段被更新,即使是相同的UID,也被数据库认为是不同的主键,因此不会产生主键冲突,上面的语句就失效了,数据库里出现了很多UID相同的数据。

开始寻找解决办法,其实也简单,按MySQL文档里的说明,ON DUPLICATE KEY UPDATE语句判断是否冲突是依靠主键或唯一索引,因此为UID建立唯一索引就可以了。先建索引:

再测试一下插入:

mysql 复合主键更新_MySQL复合主键下ON DUPLICATE KEY UPDATE语句失效问题相关推荐

  1. mysql批量更新,批量插入之replace语句/insert into... on duplicate key update语句

    mysql批量更新/插入数据有以下方法,使用这些方法批量插入数据/更新数据的时候就不用在代码层次增加判断数据是否已存在的逻辑了. 1:replace语句 2: insert into... on du ...

  2. MYSQL中ON DUPLICATE KEY UPDATE对数据进行insertOrUpdate操作

    本文来自:高爽|Coder,原文地址:[url]http://blog.csdn.net/ghsau/article/details/23557915[/url],转载请注明. 向数据库插入记录时,有 ...

  3. mysql insert into on_MySQL之INSERT INTO ON DUPLICATE KEY UPDATE用法详解 | 夕辞

    MySQL数据库使用中如果主键或唯一键冲突,会报错,因此我们会用到insert into on duplicate key update语法,但是该语法具体怎么用以及返回什么值,今天就来讨论下. 首先 ...

  4. mysql 中 replace into 与 insert into on duplicate key update 的使用和不同点

    replace into和insert into on duplicate key update都是为了解决我们平时的一个问题 就是如果数据库中存在了该条记录,就更新记录中的数据,没有,则添加记录. ...

  5. MySQL中 ON DUPLICATE KEY UPDATE语法的使用

    MySQL ON DUPLICATE KEY UPDATE 为Mysql特有语法 ON DUPLICATE KEY UPDATE 用法与说明 Mysql中INSERT ... ON DUPLICATE ...

  6. ON DUPLICATE KEY UPDATE 附带更新条件

    ON DUPLICATE KEY UPDATE 1.根据表索引唯一性,如果在insert时冲突则改为update:实际场景使用中update时可能会需要一定的条件限制,但ON DUPLICATE KE ...

  7. mysql支持UUID做外键_多表外键下将普通的id主键更新为uuid主键

    多表外键下将普通的id主键更新为uuid主键 2019-05-20 02:45:37 来源: 晴天小雨 0 摘要:在多表外键影响和保证数据不删除的前提下,借助Flask-sqlalchemy插件及SQ ...

  8. MySQL使用on duplicate key update时导致主键不连续自增

    在做数据统计的时候,我们经常会用到mysql的on duplicate key update语法来自动更新数据,比如 最近项目上需要实现这么一个功能:统计每个人每个软件的使用时长,客户端发过来消息,如 ...

  9. mysql duplicate id_mysql 使用ON DUPLICATE KEY UPDATE 时导致的自增主键id无限增大问题

    mysql 版本:5.7 python版本:3.7 问题描述:mysql表A中数据有几十条,设置了一个自增 1 的id作为主键,在程序运行一段时间后发现表中最后一条数据的id已经是几百万了 表中所有数 ...

最新文章

  1. 好程序员HTML5大前端分享常用开发工具大集合
  2. 【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 完整流程演示 | 查找临时内存地址 | 查找真实指针地址 )
  3. 【Java面试题】正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
  4. java-网络编程篇
  5. python做股票系统_GitHub - hetingqin/stock: stock,股票系统。使用python进行开发。
  6. JQuery中.css()与.addClass()设置样式的区别
  7. Android 侧滑多层view显示
  8. Maven 每次update之后自动修改jdk问题
  9. 小程序分享如何自定义封面?
  10. ‘nvidia-smi‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  11. 带有分页的列表的跳转后,返回时怎么实现保留分页的页数等信息
  12. opencv中的图像拼接
  13. Qt配置OpenCV教程,无需复杂的编译过程,(详细版)
  14. 吃什么食物对眼睛最好
  15. 生存分析绘图——Kaplan-Meier生存曲线
  16. 机场部队都在用的无人机干扰设备----- TFN MR09
  17. 服务器复制文件出现io错误,win7系统复制文件时发生IO错误的解决方法
  18. IO流-常用的IO流总结
  19. ossbrowser
  20. 发射功率 dBm 计算

热门文章

  1. 什么是android
  2. 小提琴协奏曲《梁祝》原本是没有歌词的,后经著名词人阎肃填的词,才有了《梁祝》这首歌。...
  3. 《程序员2007增刊——实战Web2.0》精彩预览之“指导篇”
  4. 垃圾回收相关知识(垃圾回收算法及垃圾收集器)
  5. 精品基于Uniapp+SSM实现的记账app家庭账单财务
  6. WorkNC应用技巧分享—尖角清根时获得完美刀路
  7. Mina中的Pickles SNARK
  8. 本页面是由KSWEB生成的web包
  9. Nginx代理https接口
  10. 【业务数据分析】——Excel的基础操作(一)