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

間違ったを修正します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;
于 2012-07-17T10:23:23.060 に答える
0

テーブルをSQLスクリプトファイルにエクスポートできます。キーを使用してテーブルを作成する必要があります。そして、impoRtを再度実行します。自動インクリメントプロパティをtrueに設定する必要があります。これが最も簡単な方法かどうかはわかりませんが、そうするのはそれほど難しくありません。

于 2012-07-17T10:26:45.850 に答える
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;

この新しいテーブルにインデックスと自動インクリメントを追加しますresult_copy。ALTERTABLECHANGECOLUMN 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 に答える