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