ALTER TABLE 报1062 - Duplicate entry错误

mysql版本:5.7.28

表结构

CREATE TABLE `t2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `col1` int(11) DEFAULT NULL, `col2` bigint(20) DEFAULT NULL, `col3` text, `col4` varchar(30) DEFAULT NULL, `col5` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `un_index` (`col1`) ) ENGINE=InnoDB AUTO_INCREMENT=11057632 DEFAULT CHARSET=utf8mb4;

在添加字段的时候报错1062

sql>ALTER TABLE t2 ADD COLUMN col6 INT ( 11 );

1062 - Duplicate entry '2068603194' for key 'un_index', Time: 37.923000s

问题原因:表数据较多在执行alter table期间有其他会话执行了造成duplicate entry的语句使online ddl在执行完结构变更回放缓存的时候报错。

Oline DDL的原理简单一点理解就是将DML操作缓存起来,等到DDL执行完成后重新应用缓存中的DML语句,如果在Oline DDL执行过程中,DML操作产生了Duplicate entry错误,并不会直接影响DDL操作,而是在DDL执行完成最终应用DML时报错,导致DDL执行失败。官方认为该问题是一种限制,并不是Bug,所以目前为止还没有得到解决。

经过测试只有在唯一键冲突的时候(insert,update)才会影响到DDL,主键冲突没有影响。

另外在执行insert into ... on duplicate key...或者replace into语句的时候只要是更新了唯一键的字段也会影响online DDL的运行。

 


__EOF__

本文作者王2
本文链接https://www.cnblogs.com/wangb2/p/14252609.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   王2  阅读(2638)  评论(1编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2020-01-08 crontab里的特殊符号%导致命令不能执行
点击右上角即可分享
微信分享提示