我在MySQL 5.5.24中有下表
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-键“ PRIMARY”的条目“ 0”重复
有人可以指出这个问题吗?我想问题是现有的关系,但是我不想丢失具有数千行的现有关系或数据。有什么方法可以做到这一点而又不会丢失数据吗?
编辑: 通过查看数据,我得到了新创建的列中具有值‘0’。由于重复的记录(在新的主键中),这可能不允许更改主键。
我有8,000多行,因此无法手动更改。有什么方法可以分配rowid给新的主键吗?