今天线上执行Online DDL的时候发现一个奇怪的报错,觉得比较意义,遂整理如下。线上数据库版本:percona server 5.7.14

报错现场:每次执行的时候重复报错记录都不一样

mysql> ALTER TABLE `xxx` modify `bm_pay_trade_no` varchar(50) NOT NULL COMMENT 'xxxx';

ERROR 1062 (23000): Duplicate entry 'sss' for key 'uniq_xxx'

mysql> select * from xxx where xxxx='sss';

...此处只有一条记录,并没有重复值...

按照常理来说这列有唯一索引约束不应该报错的哈,更不会产生Duplicate entry。我隐约记得这个问题很熟悉,貌似之前在哪遇到过。可以看我之前文章MySQL Online DDL和MySQL在线DDL工具pt-osc。

看看官网的解释吧:https://dev.mysql.com/doc/refman/5.7/en/innodb-create-index-limitations.html

When running an online DDL operation, the thread that runs the ALTER TABLE statement applies an “online log” of DML operations that were run concurrently on the same table from other connection threads. When the DML operations are applied, it is possible to encounter a duplicate key entry error (ERROR 1062 (23000): Duplicate entry), even if the duplicate entry is only temporary and would be reverted by a later entry in the “online log”. This is similar to the idea of a foreign key constraint check in InnoDB in which constraints must hold during a transaction.

也就是说可能有其他线程的DML产生了临时的重复条目,导致的唯一性约束监测报错。理解到这里我觉得就差不多,然后想起来pt-osc的工作原理(MySQL在线DDL工具pt-osc),遂豁然开朗。

问题的解决就是用pt-osc来执行这个变更操作,问题完美得到解决。

为了方便大家交流,本人开通了微信公众号,和QQ群1(291519319)和QQ群2(659336691)。喜欢技术的一起来交流吧

mysql 唯一性约束报错_怪异的MySQL Online DDL报错Duplicate entry相关推荐

  1. mysql数据库约束详解_深入理解mysql数据库的约束

    摘要:MYSQL添加约束,删除约束添加列,修改列,删除列 添加主键约束: altertable表名addconstraint主键(形如:PK_表名)primarykey表名(主键字段); 添加外键约束 ...

  2. mysql唯一性约束冲突_如何解决逻辑删除与数据库唯一约束冲突

    前言 不知道大家有没有遇到这么一种业务场景,在业务中有个唯一约束A,当该业务进行逻辑删除后(设置标记为删除状态),再往唯一约束列插入相同的值时,此时会报Duplicate entry,但在业务上,该值 ...

  3. cmd mvn compile报错_东芝Aquilion16 CT数据通讯报错故障分析与处理

    故障现象 东芝Aquilion16 CT 机器可以预热,扫描定位像正常.使用 S&S.S&V.Helical(3 种模式)扫描时,第 1 幅或者前几幅图像正常,从第 2 幅或者以后图像 ...

  4. mysql数据库设计四大范性_数据库篇-mysql详解( 四 )之范式与数据高级骚操作

    标题.png 一 : 主键 primary key,主要的键. 一张表只能有一个字段可以使用对应的键, 用来唯一的约束该字段里面的数据, 不能重复: 这种称之为主键.一张表只能有最多一个主键 操作 增 ...

  5. mysql影响行数解析_详解MySQL的数据行和行溢出机制

    一.行 有哪些格式? 你可以像下面这样看一下你的mysql行格式设置. 其实mysql的数据行有两种格式,一种就是图中的 compact格式,还有一种是redundant格式. compact是一种紧 ...

  6. 什么是mysql的安装版本的_一:MySQL基本介绍及安装

    一:MySQL基本介绍 1 MySQL安装包版本选择,潜规则 MySQL5.6:GA 6-12个月 小版本是偶数版,奇数版一般都是测试. MySQL5.7:GA 6-12个月 小版本是偶数版,选择5. ...

  7. mysql表分区数量限制_详解MySQL分区表的局限和限制的代码实例

    本文对Mysql分区表的局限性做了一些总结,因为个人能力以及测试环境的 原因,有可能有错误的地方,还请大家看到能及时指出,当然有兴趣的朋友可以去官方网站查阅. 禁止构建 分区表达式不支持以下几种构建: ...

  8. mysql动力节点百度云_动力节点MySQL数据库视频 百度云 网盘 下载

    资源名称:动力节点MySQL数据库视频 百度云 网盘 下载 # o4 E. q% ]2 ?百度网盘下载链接:[/hide]- t4 L+ S# b2 T( }! d) n& d 密码:dff7 ...

  9. mysql分区表truncate分区数据_详解MySQL分区表

    前言: 分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表.但是对于应用程序来讲,分区的表和没有分区的表是一样的.换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理 ...

最新文章

  1. 在两幅图像之间获得正确(最小二乘意义)仿射变换参数affine points via least square method
  2. QTP测试之With秒用
  3. 配置深度学习环境的重要资料
  4. Git停止跟踪rm -r --cached与ignore区别
  5. 老板让我每天刷群,无奈只能写一个自动群发脚本,不让自己疯狂复制粘贴
  6. jquery实现点击某元素之外触发事件
  7. firefox使用掘金插件_久等了,这款知名浏览器下载插件终于上线Chrome版本!
  8. Spring-Data-JPA入门--增删改查1
  9. 2018杭州电子科技大学计算机研究生复试笔试编程题第三题
  10. 【ZeroClipboard is not defined】的解决方法
  11. TCP 协议面试灵魂 12 问 !
  12. Jenkins集群搭建
  13. 我国政务大数据政策的文本分析:推进逻辑与未来进路
  14. html中标记pre的作用是什么,html中pre和code标签
  15. Houdini保存自定义节点
  16. fpga学习——zynq图像处理中的DVP流接口封装
  17. sequence_item、sequence、sequencer、driver的关系
  18. Good Numbers 暴力/进制
  19. svg学习之svg动画
  20. 虚拟机Ubuntu安装中文输入法

热门文章

  1. Word中查找和替换功能详细介绍
  2. 从源码分析DEARGUI之add_tree_node
  3. linux每日命令(31):tar命令
  4. KDE与GNOME的起源与发展
  5. 关于captive portal
  6. IOS开发中的变量、方法、属性
  7. 公积金贷款不受影响 组合贷款有特殊
  8. SQL Server中DateTime格式转换
  9. escape sequence
  10. 如何使用Springboot开发实现一个物业管理系统