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
的多对一关系.
现在,我需要改变 struct ,在表中引入单独的主键,同时保留现有的关系和数据.为此,我执行了以下查询:
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"
有人能指出这个问题吗?我想问题在于现有的关系,但我不想丢失现有的关系或数据,它有几千行.有没有办法做到这一点而不丢失数据?
EDIT:
我有8000多行,所以无法手动更改.有没有办法将rowid
分配给一个新的主键?