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

### 回答1: MySQL alter table add column 是用来在 MySQL 数据库中的表中添加新列的命令。通过这个命令,可以在已有的表中增加新的列,以满足数据存储和查询的需求。在使用这个命令时,需要指定要添加的列的名称、数据类型、长度等信息,以及可选的约束条件。添加新列后,可以使用 insert、update、select 等命令来操作新的列。 ### 回答2: MySQL中的ALTER TABLE命令可以用来修改表的定义,比如增加,修改或删除列。ALTER TABLE命令的语法如下: ALTER TABLE table_name ADD COLUMN column_name column_definition [FIRST | AFTER column_name]; 其中,table_name为需要修改的表的名称,column_name就是待添加的列名,而column_definition则是这个新列的定义,它可以指定列的数据类型、默认值、是否允许为NULL等。 如果你想要在表的首列添加一列,可以用FIRST关键字。如果你想要添加到某一列之后,可以使用AFTER关键字,后面紧跟上需要添加列的前一列名称。 下面是一些具体的例子: 1. 增加一列'type',数据类型为TINYINT,不允许为NULL,默认值为0。 ALTER TABLE users ADD COLUMN type TINYINT NOT NULL DEFAULT 0; 2. 增加一列'email',数据类型为VARCHAR(255),允许为NULL,添加到'username'列之后。 ALTER TABLE users ADD COLUMN email VARCHAR(255) NULL AFTER username; 除了增加列,ALTER TABLE命令还可以用来修改、删除列、重命名表等等,它是MySQL中非常重要的命令之一。但是,需要注意的是,在修改表结构时,一定要谨慎处理,避免造成数据丢失或者其他问题。如需进行复杂的操作,可以先备份原始数据,以防不测发生。 ### 回答3: 在MySQL中,我们可以使用ALTER TABLE语句来修改现有的表结构。其中,添加一列是最基本的修改之一,我们可以使用 ALTER TABLE表名 ADD COLUMN语句来完成。下面,我们来详细了解一下mysql alter table add column 的用法及注意事项。 使用ALTER TABLE添加列的语法如下: ``` ALTER TABLE 表名 ADD COLUMN 列名 数据类型; ``` 其中,表名表示我们需要添加列的表的名称;列名表示我们需要添加的列的名称;数据类型表示我们需要添加的列的数据类型。 例如,我们想要在user表中添加一个age列,数据类型为整数,那么我们可以使用以下语句: ``` ALTER TABLE user ADD COLUMN age int; ``` 在执行该语句前,我们需要注意以下几点: 1. ALTER TABLE只能在已存在的表上进行修改,如果需要创建新的表,应该使用CREATE TABLE语句。 2. 在添加列的时候,需要指定列的名称和数据类型。如果需要设置该列的其他属性(例如默认值、非空等),可以在ADD COLUMN语句后面添加相应的属性设置。 3. 如果添加的列需要添加到指定的位置,可以使用AFTER子句指定。例如,我们想要在user表的name列后添加一个age列,可以使用以下语句: ``` ALTER TABLE user ADD COLUMN age int AFTER name; ``` 4. 在添加列的过程中,如果需要修改已有列的数据类型或其他属性,应该使用CHANGE COLUMN语句。如果需要删除已有列,应使用DROP COLUMN语句。 总之,在MySQL中使用ALTER TABLE添加列是一个非常基本的操作,掌握基本的语法和注意事项对于数据表的修改和维护都非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值