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

postgresで特定の行をロックする

    選択した特定の行でテーブルをロックする場合は、LOCK FIRSTする必要があります FOR UPDATE / FOR SHAREを使用します ステートメント。たとえば、最初の行をロックする必要がある場合は、次のようにします。

    BEGIN;
    
    LOCK TABLE person IN ROW EXCLUSIVE MODE;
    
    -- BLOCK 1
    
    SELECT * FROM person WHERE name = 'John' and money = 1 FOR UPDATE;
    
    -- BLOCK 2
    
    UPDATE person set name = 'John 2' WHERE name = 'John' and money = 1;
    
    END;
    

    BLOCK1SELECTの前 データベースに「ねえ、私はこのテーブルで何かをするので、そうするときは、このテーブルをこのモードでロックする」と言っているだけです。任意の行を選択/更新/削除できます。

    しかし、BLOCK2では FOR UPDATEを使用する場合 その行を特定のモードの他のトランザクションにロックします(doc<を読んでください。 / a> 詳細については)。そのトランザクションが終了するまでロックされます。

    例が必要な場合は、テストを実行して、別のSELECT ... FOR UPDATEを実行してみてください。 BLOCK2で 最初のトランザクションを終了する前に。最初のトランザクションが終了するのを待っており、その直後に選択します。

    私はサブシーケンスを制御する関数でそれを使用しています、そしてそれは素晴らしいです。楽しんでいただければ幸いです。



    1. 'COUNT'/'GROUPBY'MySQLクエリの空の結果を取得する

    2. CSVまたはXMLをMySQLにインポートする

    3. Perldbiprepareが間違った引用符を入れています

    4. JDBC接続のタイムゾーン領域を設定し、SqlExceptionタイムゾーン領域が見つからないようにするにはどうすればよいですか?