Laravelデータベースのクエリー・ロックに関する知識点


Mysqlロックのタイプ
1共有ロック
  • クエリーデータはブロックされ、誰も占有していないときに
  • に戻ります.
  • 更新データはブロックされ、誰も占有していないときに
  • に戻る.
    DB::table('users')->where('id', 100)->lockForUpdate()->first();

    2悲観ロック
  • クエリーデータ通常クエリーは
  • を返します.
  • 更新データは、前のロック更新の実行が完了するのを待ってから
  • 更新をブロックする.
    DB::table('users')->where('id', 100)->sharedLock()->first();

    もし私が直接ロックを使用してトランザクションを使用しないと正常な論理ができますか?
  • 正しい
  • DB::transaction(function() {
      $user = DB::table('users')->where('id', 100)->lockForUpdate()->first();
      $user->nick_name = "  ";
      $user->save();
    });
  • エラー
  • $user = DB::table('users')->where('id', 100)->lockForUpdate()->first();
    $user->nick_name = "  ";
    $user->save();
  • 理由ロックは、
  • を有効にするには、トランザクションで実行する必要があります.