我在MySQL版本如下表5.5.24MySQL的1062 - 重复录入“0”键“PRIMARY”
DROP TABLE IF EXISTS `momento_distribution`;
CREATE TABLE IF NOT EXISTS `momento_distribution`
(
`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 (`momento_id`, `momento_idmember`),
KEY `momento_distribution_FI_2` (`momento_idmember`),
KEY `accepted` (`accepted`, `ext_member`)
)
ENGINE=InnoDB
DEFAULT CHARSET=latin1;
它有大量的数据与其他两个表多到一个关系与ondelete=restrict
和onupdate=restrict
。
现在,我需要改变结构并在表中引入单独的主键,同时仍然保留现有的关系和数据。对于这一点,我执行以下查询:
ALTER TABLE `momento_distribution` ADD `id` INT(11) NOT NULL FIRST;
ALTER TABLE `momento_distribution` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id`);
不幸的是,我的第二个查询失败,出现以下错误:
1062 - Duplicate entry '0' for key 'PRIMARY'
是否有人可以指出的问题?我猜这个问题是现有的关系,但我不想丢失现有的关系或数据,有几千行。有没有办法做到这一点,而不会丢失数据?
编辑: 通过查看数据,我得到新创建的列中的值为'0'。可能由于重复记录(在新的主键中),这不允许更改主键
我有超过8000行,所以我无法手动更改它。有没有办法将rowid
分配给新的主键?
谢谢@Youthpark,我正在尝试这些查询,并在接下来的10分钟内取回最大值。感谢帮助。我对这个问题感到非常沮丧。 –
如有任何问题,请附上所有表格的结构及错误代码。 – 2012-08-30 04:34:59
终于完成了。自从昨天起我被困在那里。非常感谢。 –