MySQL执行Alter table xx add column报Duplicate entry错误

mysql版本是5.7.25-28-log,表的存储引擎是InnoDB。
执行如下DDL:

alter table mytable 
add column ...(省略了部分字段),
add column price int NOT NULL DEFAULT '0' COMMENT '价格';

却报了错误

ERROR 1062 (23000): Duplicate entry '9277700--1' for key 'spu_sku'
Thu Sep  3 16:56:56 2020

这张表有UNIQUE KEY `spu_sku` (`spu`,`sku`),会保证不会重复,应该不会出现Duplicate entry的错误,
而且查询的时候发现表里确实只有一条记录的spu是9277700,sku是-1。

网上查询了一下发现这个是MySQL执行online DDL会存在的问题。按照https://jira.mariadb.org/browse/MDEV-14535这个网页上说的解决方法。
执行DDL(加了ALGORITHM=COPY):

alter table mytable 
add column ...(省略了部分字段),
add column price int NOT NULL DEFAULT '0' COMMENT '价格'
ALGORITHM=COPY;

解决问题,不再报错了。


感兴趣的读者,可以参考Mysql官方文档:
https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-limitations.html

你可能感兴趣的:(mysql,mysql)