第29期 MySQL 1075 Incorrect table definition; there can be only one auto column

在MySQL中执行修改表结构的sql语句时,

ALTER TABLE `mytable` 
ADD COLUMN `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键id' FIRST;

报错1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key。

通过show create table mytable;查看创建表的sql语句时。表的定义如下:

CREATE TABLE `mytable` (
  `rec_id` varchar(50) NOT NULL COMMENT '唯一记录id',
  `form_category_id` int(10) DEFAULT NULL COMMENT '表单分类id',
  `item_value` varchar(255) DEFAULT NULL COMMENT '字段项值',
  `org_id` int(10) DEFAULT NULL COMMENT '提单人直属的机构id',
  `submit_month` varchar(50) DEFAULT NULL COMMENT '提单时间(yyyy-MM)',
  `form_count` int(10) DEFAULT NULL COMMENT '工单数量',
  `delete_flg` tinyint(3) unsigned DEFAULT '1' COMMENT '软删除状态(1:有效,0:删除)',
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  UNIQUE KEY `index_rec_id` (`rec_id`),
  KEY `idx_submit_month` (`submit_month`) USING BTREE,
  KEY `idx_form_category_id_org_id_submit_month` (`form_category_id`,`org_id`,`submit_month`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工单审批类型统计表';

原因是新增的列id 是 自增字段未设置为主键或唯一索引。

因此只能再次修改sql语句。

MySQL的报错1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key,通常出现在尝试创建或修改数据库表时。

这个错误表明你在一个表中定义了多个自增(AUTO_INCREMENT)字段,或者定义了一个自增字段但没有将其设置为主键(PRIMARY KEY)或唯一索引(UNIQUE)。


首先,我们要了解什么是自增字段。在MySQL中,自增字段是一种特殊的字段,它会在每次插入新记录时自动增加其值。这通常用于生成唯一的ID,如用户ID、订单ID等。


现在,让我们来看看为什么会出现这个错误,并提供解决方案。

错误原因:

1、多个自增字段:一个表中只能有一个自增字段。如果你尝试定义多个自增字段,就会触发这个错误。

2、自增字段未设置为主键或唯一索引:虽然MySQL允许自增字段不是主键,但如果你定义了一个自增字段,最好将其设置为主键或唯一索引。这有助于确保数据的唯一性和完整性。

解决方案:

方案一:移除多余的自增字段

如果你在一个表中定义了多个自增字段,你需要移除多余的自增字段。

以下是一个示例,展示了如何修改表结构以移除多余的自增字段:

ALTER TABLE your_table_name
DROP COLUMN extra_auto_increment_column;

请将your_table_name替换为你的表名,将extra_auto_increment_column替换为要移除的自增字段名。

方案二:将自增字段设置为主键或唯一索引

如果你已经有一个自增字段,但没有将其设置为主键或唯一索引,你可以通过以下方式将其设置为主键:

ALTER TABLE your_table_name
MODIFY COLUMN auto_increment_column INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (auto_increment_column);

同样,请将your_table_name替换为你的表名,将auto_increment_column替换为自增字段名。

总结

在创建或修改MySQL表时,请确保遵循以下规则:

1、一个表中只能有一个自增字段。

2、自增字段应该被设置为主键或唯一索引。

通过遵循这些规则,你应该能够避免MySQL报错1075,并成功创建或修改你的表结构。

希望这个解决方案能帮助你解决问题!如果你还有其他关于MySQL或其他技术话题的问题,欢迎随时提问酋长彭谈数据库。


请使用浏览器的分享功能分享到微信等