sql >> データベース >  >> RDS >> PostgreSQL

Postgres、更新、およびロックの順序

    ORDER BYはありません UPDATEで コマンド。
    しかし、SELECTにはあります 。 行レベルのロック> FOR UPDATE 条項 サブクエリ内:

    UPDATE foo f
    SET    a = 1
    FROM (
       SELECT b FROM foo
       WHERE  b IN (1,2,3,4)
       ORDER BY b
       FOR   UPDATE
       ) upd
    WHERE f.b = upd.b;

    もちろん、b UNIQUEである必要があります または、ORDER BYに式を追加する必要があります 明確にするための条項。

    そして、すべてに同じ順序を適用する必要があります UPDATEDELETE およびSELECT .. FOR UPDATE テーブルのステートメント。

    関連、詳細:



    1. PHPは各ユーザーにメールを送信します

    2. UPDATEクエリがLIMITで機能していません

    3. 列の最大値を持つ行をフェッチします

    4. MySQL静的ハッシュインデックス