2011-07-26 6 views
3

明白な回答でほぼ同じような質問がたくさんありますが、私はこの質問がまだここにはないと確信しています。MySQLはauto_incrementなしで値をインクリメントして新しい列を設定します

既存のテーブルに自動インクリメントIDカラムを追加してプライマリキーとして設定する必要があります。私は既存のデータを失うことはできません。

テーブル構造を変更することはできますが、新しい列に切り捨てられたデータについてはエラーが発生します。データを見ると、新しい自動インクリメント列の値はすべてnullです(したがって一意ではありません)。

プライマリキーの一意性を保証するためにこれらの値をバックフィルする方法はありますか?

***私は、一時的なテーブルに既存のデータをダンプし、より単純な解決方法があれば再挿入することを避けたいと思います。

現在のスクリプト:

alter table the_table add new_field int first; 
alter table the_table drop primary key, add primary key (new_field); 
alter table the_table change new_field new_field int unsigned not null auto_increment; 

私は、主キーではありません自動インクリメント列を持つことができないように私はこの順序でスクリプトを実行します。

(MySQLの5.3)

答えて

9

ただ、主キーことなく、自動インクリメントフィールドを追加

ALTER TABLE `the_table` ADD `new_field` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; 
+0

「SQLエラー(1068):複数の主キーが定義されました」 – tomfumb

+0

@tomfumb私はあなたに作成ステートメントを渡しました。キー。 –

+0

AHA完璧!多くの感謝 – tomfumb

0

を行く1に主キーと自動インクリメントとして設定、列を作成してみてください:

ALTER TABLE `the_table` ADD `new_field` INT NOT NULL AUTO_INCREMENT 
+1

MySQLは、主キーではないauto_incrementカラムを許可しません – tomfumb

関連する問題