1

我已经复制(复制)了一个表,并且由于某种原因没有添加主键。现在我最近添加了很多新记录,id字段中的值为 0。之前的所有记录都有唯一的 ID(从 1 到 302979)。

如何解决这个问题?

#1062 - Duplicate entry '0' for key 'PRIMARY'

AUTO_INCREMENT也没有添加。

CREATE TABLE `result` (
  `id` int(11) NOT NULL DEFAULT '0',
  `status` varchar(50) NOT NULL,
  `status_date` datetime NOT NULL,
  `member_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
4

3 回答 3

4

尝试

update result
inner join (select @row := (select max(id) from result)) r
set id = (@row := @row + 1)
where id = 0

纠正错误ids.

然后添加auto_increment到您的表中

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

然后使用

ALTER TABLE result AUTO_INCREMENT = 1234;

在其中替换1234为要开始增量值的数字。例如,它可以是最高的 id + 1。你可以得到那个号码

select max(id)+1 from result;
于 2012-07-17T10:23:23.060 回答
0

创建表的空副本:

CREATE TABLE `result_copy` (
  `id` int(11) NOT NULL DEFAULT '0',
  `status` varchar(50) NOT NULL,
  `status_date` datetime NOT NULL,
  `member_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

向这个新表添加索引和自动增量: ALTER TABLE result_copyCHANGE COLUMN id idINT(11) NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY ( id) ;

插入数据:(必要时更改顺序)

INSERT INTO `result_copy`(status, status_date, member_id)
SELECT status, status_date, member_id FROM `result`
ORDER BY `id` ASC, `status_date` ASC

检查中的数据result_copy。如果一切正常,删除原始表并重命名新表:

DROP TABLE `result`;
RENAME TABLE `result_copy` TO `result`;
于 2012-07-17T10:43:33.057 回答
0

您可以将表导出到 SQL 脚本文件。比你必须用键创建表。然后再次运行 import。您应该将自动增量属性设置为 true。不确定这是否是最简单的方法,但做到这一点并不难。

于 2012-07-17T10:26:45.850 回答