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