2011-10-30 6 views
6

IDを意味する自動インクリメント列を使用してデータベースをセットアップしました。問題は、phpMyAdminでテーブルを作成するときに自動インクリメントをチェックアウトするのを忘れていたことです。ですから、私が持っているものは、次のようなものです:MySQL:自動インクリメントの設定を忘れた

ID | column one | column two 
------------------------------------ 
0 | some value | some value 
0 | other value | something else 
0 | example val. | something 
0 | my example | something 

基本的に私の "自動インクリメント"カラムは、全面に0を表示します。以前のすべての行と今後すべての行に対して自動増分を表示するには、この表をどのように変更できますか?

+1

テーブルのスキーマはありますか? –

答えて

8

テーブルが空だった場合は、単に行うことができます:

ALTER TABLE mytable MODIFY COLUMN id bigint not null primary key auto_increment 

を、私はそれの行で何が起こるかわかりません。正しい定義で新しいテーブルを作成し、idカラムを超えてデータをコピーし、古い(間違った)テーブルを削除し、新しいテーブルを古い名前に移動することが最善の方法です。

-- Either: 
CREATE TABLE newtable LIKE mytable; 
ALTER TABLE newtable MODIFY COLUMN id bigint not null primary key auto_increment; 
-- or: 
CREATE TABLE newtable (
    id bigint not null primary key auto_increment, 
    column1 type1, 
    column2 type2, 
    ... 
); 

INSERT INTO newtable 
    (column1, column2, ...) 
    SELECT column1, column2, column3, ... 
    FROM mytable; 
-- Make SURE that insert worked BEFORE you drop the old table 
-- and lose data if it didn't. 
DROP TABLE mytable; 
ALTER TABLE newtable RENAME TO mytable; 

私は、phpMyAdminがこれをよりグラフィカルに行うことができると確信しています。

+0

はい、これは動作します。列を 'PRIMARY KEY'と' auto_increment'に変更してください。 –

+1

レコードがたくさんある場合は+1良い解決策 –

6

最初に(そうしないと、重複した主キーを取得します)あなたの記録を更新:

UPDATE `tablename` SET id = 1 WHERE "column one" = 'some value'; 
UPDATE `tablename` SET id = 2 WHERE "column one" = 'other value'; 
UPDATE `tablename` SET id = 3 WHERE "column one" = 'example val.'; 
UPDATE `tablename` SET id = 4 WHERE "column one" = 'my example'; 

は、その後、主キー/ AUTO_INCREMENT追加:

ALTER TABLE tablename MODIFY COLUMN id int(11) NOT NULL primary key auto_increment; 

をその後、次のAUTO_INCREMENT設定:

ALTER TABLE tablename AUTO_INCREMENT = 5; 
+0

2つ以上の行がある場合は、すべてのレコードを更新するのが非常に遅く、労働集約的になります。 – Kevin

+0

私は同意しますが、この例では4つのレコードがあります。ユーザーがたくさんのレコードを持っていると私はあなたに投票しました –

4

ID列を削除して再作成することができます。自動インクリメントを有効にするために覚えていれば、IDは再割り当てされます;

関連する問題