2012-07-17 75 views
0

我複製(複製)了一張表,並且因爲某些原因未添加主鍵。 現在我在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

您可以發佈'show create table ...'的結果嗎? – 2012-07-17 10:20:41

+0

爲什麼投下票? – 2012-07-17 10:28:22

+0

+1,這真的是問題所在。 juergen d post是否幫助過你?如果是這樣,我想我的答案是刪除 – seeker 2012-07-17 10:30:11

回答

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; 
+0

謝謝,我發佈了'show create table' – 2012-07-17 10:25:48

+0

這並沒有工作'ALTER TABLE result AUTO_INCREMENT =(從結果中選擇max(id)+1);'我知道 – 2012-07-17 10:35:57

+0

。我剛剛更新了答案。 – 2012-07-17 10:38:37

0

您可以將表導出到SQL腳本文件。比你必須使用鍵創建表。然後再運行impoRt。你應該設置自動增量屬性爲true。不知道這是否是最簡單的方法,但這並不難。

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更改列idid INT(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`;