Skip to content

Instantly share code, notes, and snippets.

@sooch
Last active July 4, 2022 06:53
Show Gist options
  • Save sooch/7ebff40a888cc88c7bec3b9b620d3c81 to your computer and use it in GitHub Desktop.
Save sooch/7ebff40a888cc88c7bec3b9b620d3c81 to your computer and use it in GitHub Desktop.
Laravelの悲観的ロックについて

共有ロック

クエリビルダは、SELECT文で「悲観的ロック」を行うための機能をいくつか持っています。SELECT文を実行する間「共有ロック」をかけたい場合は、sharedLockメソッドをクエリに指定して下さい。共有ロックはトランザクションがコミットされるまで、SELECTしている行が更新されることを防ぎます。

DB::table('users')
  ->where('votes', '>', 100)
  ->sharedLock()
  ->get();

専有ロック

もしくはlockForUpdateメソッドが使えます。占有ロックをかけることで、レコードを更新したりSELECTするために他の共有ロックが行われるのを防ぎます。

DB::table('users')
  ->where('votes', '>', 100)
  ->lockForUpdate()
  ->get();

NOTE:

ロックが掛かっている行に対する他からの操作

- 共有ロック 専有ロック
照会
更新
共有ロック
専有ロック

参考URL

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment