0

テーブルの新しい列に増分値を追加しようとしています。これはテーブルのサンプル構造です

---------------------
Name - class - id
---------------------
abbc - 2     - null
efg  - 4     - null
ggh  - 6     - null
---------------------

テーブル内のすべてのレコードに対して一意の ID を生成するクエリを作成したい

set @i=0;
update table1 set id =(@i:=@i+1);
4

4 に答える 4

3

あなたが示したことはうまくいくはずです。id 列に割り当てられた値を取得する必要があります。

私はあなたの声明をテストしました。データベースで動作することを確認しました。私が実行したテストケースは次のとおりです。

CREATE TABLE table1 (`name` VARCHAR(4), class TINYINT, id INT);
INSERT INTO table1 (`name`,class) VALUES ('abbc',2),('efg',4),('ggh',6);
SET @i=0;
UPDATE table1 SET id =(@i:=@i+1);
SELECT * FROM table1;

MySQL ユーザー変数はデータベース セッションに固有であることに注意してください。SET が 1 つのセッションで実行され、UPDATE が別のセッションで実行されている場合、表示されている動作が説明されます。(ステートメントを実行したクライアントについては言及していませんでした。ほとんどのクライアントは同じ接続を再利用し、ステートメントごとに接続を変更しません。可能性としてそれを捨てているだけです。)

UPDATE ステートメントの実行時に@i変数が実際に初期化されるようにするには、UPDATE ステートメントで次のようにして初期化を行うことができます。

UPDATE table1 t
 CROSS
  JOIN (SELECT @i := 0) s
   SET t.id =(@i:=@i+1);

私はそれをテストしましたが、それは私のデータベースでも機能します。

于 2014-02-24T05:40:07.383 に答える
1

このクエリを試してみてください:

set @i=0;
update table1 set id =(select @i:=@i+1);

SQL フィドル

于 2014-02-24T05:20:40.230 に答える
0
SET @a = 0;  
UPDATE table_name SET id = @a:=@a+1;
于 2014-02-24T05:24:50.663 に答える
-1

代わりに、それぞれの列に AUTOINCREMENT パラメータを使用してください。このパラメーターは、それぞれの列に一意の自動インクリメント値を設定します。

于 2014-02-24T05:16:23.250 に答える