あなたが示したことはうまくいくはずです。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);
私はそれをテストしましたが、それは私のデータベースでも機能します。