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

行ロックを実行する方法は?

    これがMSSQLサーバーであると仮定すると、おそらくUPDLOCKが必要になります。 、おそらくROWLOCKと組み合わせる (表のヒント )。理論を説明するまともな記事を見つけるのに苦労していますが、ここに簡単な例があります:

    SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1 
    

    このステートメントは、更新ロック を配置します。 トランザクションの期間中、行に表示されます(したがって、トランザクションがいつ終了するかを知っておくことが重要です)。更新ロックは排他ロックと互換性がない ため (レコードを更新するために必要)、これにより、トランザクションが終了するまで、誰もこのレコードを更新できなくなります。

    このレコードを変更しようとする他のプロセスは、トランザクションが完了するまでブロックされますが、トランザクションが終了すると、要求された書き込み操作は続行されます(タイムアウトするか、デッドロックプロセスとして強制終了されない限り)。これを防ぎたい場合は、互換性のないロックが検出された場合に中止するか、変更された場合にレコードをスキップするために、他のプロセスで追加のヒントを使用する必要があります。

    また、ユーザー入力を待っている間は、このメソッドを使用してレコードをロックしないでください 。これが意図している場合は、代わりに何らかの「変更中」列をテーブルに追加する必要があります。

    SQLサーバーのロックメカニズムは、実際にはデータの整合性を維持し、デッドロックを防止するためにのみ使用できます。トランザクションは通常、できるだけ短く維持する必要があります。 また、ユーザー入力を待っている間は維持しないでください。



    1. php oci8 extがロードされていません動的ライブラリをロードできません

    2. HTMLメールに画像を埋め込む

    3. node.js/MySQL:データベースに挿入しようとすると、一部の文字列エンコーディング(Emoji)がエラーをスローします

    4. 純粋なmysqlでこれを解決できますか? (列の''で区切られた値に参加します)