忘了添加主键

时间:2012-07-17 10:18:36

标签: mysql database primary-key

我复制(复制)了一个表,由于某些原因没有添加主键。 现在我在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

3 个答案:

答案 0 :(得分:4)

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

纠正错误的id

然后将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;

答案 1 :(得分:0)

您可以将表导出到SQL脚本文件。比你必须用密钥创建表。然后再次运行impoRt。您应该将auto increment属性设置为true。不确定这是否是最简单的方法,但这并不是那么难。

答案 2 :(得分: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_copy CHANGE COLUMN id id INT(11)NOT NULL AUTO_INCREMENT,添加主键(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`;