既存のテーブルに新しい行を挿入しながら、一連の数字を生成できます。たとえば、
Row1 1
Row2 2
Row3 3
を削除するsecond Row
と、
Row1 1
Row3 3
しかし、私が手に入れたいのは、
Row1 1
Row3 2
DBのすべての行を手動で更新せずにこれを取得する方法はありますか?
既存のテーブルに新しい行を挿入しながら、一連の数字を生成できます。たとえば、
Row1 1
Row2 2
Row3 3
を削除するsecond Row
と、
Row1 1
Row3 3
しかし、私が手に入れたいのは、
Row1 1
Row3 2
DBのすべての行を手動で更新せずにこれを取得する方法はありますか?
あなたの質問に対する答えは「はい」です。最初の行を除くすべての行を更新できます。
update t
set id = id-1
where id > 1
わかりました、あなたの意図は理解しています。テーブル自体の ID を変更する理由はありません。クエリを実行すると、次のように計算できます。
select t.*, row_number() over (order by id) as seqnum
from t
これをビューに入れて、より広く一貫して利用できるようにすることもできます。
で行を削除するとnum = 2
次のようなことができます:
UPDATE `table` SET `num` = `num` - 1 WHERE `num` > 2
同様に、どこかに行を挿入すると、インクリメントnum
して新しいレコード用のスペースを作ることができます。
UPDATE `table` SET `num` = `num` + 1 WHERE `num` >= 2
(2が利用可能になりました)
レコードを移動する場合、次のようなことができます。
UPDATE `table` SET `num` = `num` - 1 WHERE `num` > 2 AND `num` < 10
2 を 10 に移動
新しいレコードを追加するには、次のことができます。
INSERT INTO `table` SET `num` = MAX(`num`) + 1