我在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
分配给新的主键?