3

MySQL DB に変換している古い MS Access DB があります。データベースを作成するために bullzip を使用しましたが、設計が悪いため、古い MS Access データベースにはほとんどのテーブルに対して一意の主キーがありませんでした。

だから私はidフィールドを作成しましたが、明らかに各エントリは空です.1、2、3、4などで埋めるために使用できる簡単なステートメントがあるのだろうか...

編集: 質問が適切に伝わっていないと思います。自動インクリメントについてはすべて知っています。それは問題ではありません。

保持する必要があり、フィールドとして定義された一意の ID を持たない Access データベースから取得したレコードでいっぱいのテーブルがあります。言い換えれば、名、姓などのフィールドがありますが、フィールド「id」はありません。これは完全に狂っているように見えますが、どうやらこのデータベースはよく使用されており、1 つを除いてどのテーブルにも一意の ID はありませんでした。変!

とにかく、テーブルに id 用のフィールドを作成しました (そしてもちろん自動インクリメントに設定しました) が、明らかに既存のすべてのレコードには現在 id が設定されていません。そのため、レコードごとに 1 つ作成する必要があります。

mysql ステートメントを使用して、これらすべてのレコードを一意の番号で埋める方法はありますか?

乾杯

4

6 に答える 6

8

新しい id 列を既存のテーブルに追加して AUTO_INCREMENT PRIMARY KEY にすると、増分値が自動的に入力されます。

mysql> ALTER TABLE TheTable ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY;
mysql> SELECT id FROM TheTable;
-- outputs values 1, 2, 3, etc.

id 列を作成したが、それを AUTO_INCREMENT PRIMARY KEY として宣言しなかった場合は、次のように列に入力できます。

mysql> SET @id := 0;
mysql> UPDATE TheTable SET id = (@id := @id+1);
于 2012-12-24T18:47:56.783 に答える
2

定義済みの AUTO_INCREMENT フィールドを使用し、新しいレコードを挿入するときに値を NULL に設定して、適切なインクリメンタを自動的に作成します。それとは別に、(プロシージャを使用しない限り)値の増分セットを作成する方法はありません

于 2012-12-24T18:05:07.293 に答える
0

一意の識別子が必要な場合は、この関数を使用できますuuid()。整数よりも少し多くのスペースを占有しますが、必要な処理を実行します。

ただし、自動インクリメント列を追加してテーブルに再入力する必要があるという他の回答に同意します。これは、更新が行われている場合でも、より適切な量のストレージを使用して、IDを長期間にわたって一意に保つための最も簡単な方法です。

于 2012-12-24T18:33:22.357 に答える
0

MySQL の auto_increment 機能を使用します。MySQL は、id 列に一意の番号を生成します。

auto_increment 機能の説明については、http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html を参照してください

于 2012-12-24T18:07:32.787 に答える
0

使用するAUTO_INCREMENT

CREATE TABLE insect
    (
     id INT UNSIGNED NOT NULL AUTO_INCREMENT,
     PRIMARY KEY (id),
    name VARCHAR(30) NOT NULL,
    date DATE NOT NULL,
    origin VARCHAR(30) NOT NULL
    );

アップデート

新しいテーブルを作成しないと難しい作業だと思います。これを使用することをお勧めします

SET @rank=0;
SELECT @rank:=@rank+1 AS rank, itemID FROM orders;

rank一意の ID 値を持つ、名前の付いた仮想列が作成されます。

于 2012-12-24T18:09:25.503 に答える
0

私は MySQL に精通していませんが、他の DBMS で同じ問題に直面したことがあります。AutoIncrement タイプの機能があったときに対処した方法を次に示しますが、DBMS にはそれを自動的にさかのぼって適用する方法がありませんでした。

  1. ID フィールドを追加するテーブルの名前を変更します。したがって、Table1 の名前を Table1_Old に変更します。
  2. データが含まれていないことを除いて、Table1_Old のコピーである新しい Table1 を作成します。
  3. ID/AutoIncrement 列を Table1 に追加します
  4. ここで、すべてのデータを Table1_Old から Table1 にコピーします。スキップするか、ID 列に NULL を指定します。(これは通常、単一の INSERT..SELECT.. コマンドです)
  5. Table1_Old を削除します。

実際の詳細とコマンドは DBMS ごとに異なりますが、通常、これらの手順を実行する方法を見つけることができました。

于 2012-12-24T18:45:18.150 に答える