web-dev-qa-db-ja.com

テーブルが存在した後に新しいID(自動インクリメント)を追加する際の問題

38.000レコードのテーブルがありますが、IDのような自動インクリメント列はありません。
これでID列を追加する必要があり、問題が発生するのではないかと思います。

16
Bobo

あなたはそれを問題なく追加することができますテーブルが他のものと関係がない場合

古い主キーを削除し、それに応じてテーブルをアップロードする必要があります(おそらく、古い主キーに一意のインデックスを追加します)。

そのように進みます:

  • データベースのダンプを作成する

  • そのような主キーを削除します

ALTER TABLE XXX DROP PRIMARY KEY
  • そのような新しい列を追加します
ALTER TABLE XXX add column Id INT NOT NULL AUTO_INCREMENT FIRST, ADD primary KEY Id(Id)

テーブルが表示され、AutoIncが更新されます。

34
A.Baudouin

これにより、自動インクリメントIDがMySQLテーブルに追加されます。

ALTER TABLE  `your_table_name` ADD  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

テーブルのデータ量によっては、完了するまでに数分かかる場合があります。

21
GoingDrupal

これは、MySQL Workbenchで試したソリューションです。

ALTER TABLE `tableName` CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT  ;

これが正しい方法かどうかはわかりませんが、Java EEアプリケーションではまだ問題に気づいていませんでした。

7
yurislav

私は非常に大きなデータを扱い、NULL列で満たされたid列がありました。次のSQLを実行して数値を入力することにしました...次に、id列を主キーに設定しました。

set @row = 0;
UPDATE philadelphia.msg_geo_sal SET id = @row := @row + 1;
1
Selah

「トラブルはありませんか?」

レコードを挿入するだけで問題が発生する可能性があります。しかしながら...

一般に、新しいフィールドの追加は、自動インクリメント列であるかどうかに関係なく、通常はかなり安全です。すべての依存関係がわからない場合に問題を引き起こす可能性が最も高いのは、列の変更または削除です。

ただし、念のため、まずコピー(テスト)バージョンで試してから、テストバージョンに対してアプリを最初に実行します。いずれにしても、テスト環境を使用することをお勧めします。

あなたが心配しているどんな種類のトラブルについてより具体的にできますか?

0
David

自動増加フィールドにする前に、主キーとして追加する必要があるかもしれません

この例を見ることができます

ALTER TABLE `category`
ADD PRIMARY KEY (`cat_id`);
ALTER TABLE `category`
MODIFY `cat_id` int(11) NOT NULL AUTO_INCREMENT;
0
Phuc