首页 >数据库 >mysql教程 >为什么我会收到 MySQL 错误 1062:新主键的条目重复?

为什么我会收到 MySQL 错误 1062:新主键的条目重复?

Linda Hamilton
Linda Hamilton原创
2024-12-27 13:53:09182浏览

Why Am I Getting MySQL Error 1062: Duplicate Entry for a New Primary Key?

MySQL 错误 1062:新主键的重复条目

当更改 MySQL 表以更改其主键时,可能会遇到错误代码 1062:“重复条目'0' for key 'PRIMARY'” 当新指定的主键列包含重复项时,会发生这种情况

原因:

出现此问题的原因是现有表数据在转换为主键的列中可能存在重复值。 PRIMARY KEY 约束确保列中的所有值都是唯一的。添加 PRIMARY KEY 约束时,MySQL 会检查重复项,如果存在则失败。

解决方案:

要避免数据丢失并解决错误,请按照以下步骤操作:

1。为新主键列添加自动增量:

确保新主键列具有 AUTO_INCRMENT 属性:

CREATE TABLE `momento_distribution`
(
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `momento_id` INT(11) NOT NULL,
    `momento_idmember` INT(11) NOT NULL,
    `created_at` DATETIME DEFAULT NULL,
    `updated_at` DATETIME DEFAULT NULL,
    `unread` TINYINT(1) DEFAULT '1',
    `accepted` VARCHAR(10) NOT NULL DEFAULT 'pending',
    `ext_member` VARCHAR(255) DEFAULT NULL,
    PRIMARY KEY (`id`, `momento_idmember`),
    KEY `momento_distribution_FI_2` (`momento_idmember`),
    KEY `accepted` (`accepted`, `ext_member`)
)
ENGINE=InnoDB
DEFAULT CHARSET=latin1;

通过分配 AUTO_INCRMENT 属性,MySQL 将自动生成新主键列的唯一值,避免潜在的重复。

2.更改现有列:

如果您已经创建了没有 AUTO_INCRMENT 属性的新主键列,则可以使用以下查询对其进行修改:

ALTER TABLE `momento_distribution`
CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT,
DROP PRIMARY KEY,
ADD PRIMARY KEY (`id`);

此查询将更改现有的 id 列以具有 AUTO_INCRMENT 属性,删除旧的主键约束,并在修改后的 id 上添加新的主键约束专栏。

以上是为什么我会收到 MySQL 错误 1062:新主键的条目重复?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn