ロック概論 - RDB

最終更新日: 2026-08-25

TOP(About this memo)) > 一覧(RDB) > ロック概論

ロック概論

楽観ロックと悲観ロック

共有ロック、排他ロック

MySQLとPostgreSQLのスタンスの違い

MySQLでもPostgreSQLでも、トランザクション中のUPDATE、DELETE、およびロック付きSELECTにはロックがかかる。両者ともロックが競合したら待機する(NOWAITをつけた場合は即時エラーを返す)。

ただし、REPEATABLE READレベル以上でのアプローチが異なる。

(IMO) PostgreSQLは楽観的制御に重きを置き、MySQLは悲観的制御に重きを置いている、という整理がしっくりくる。

アドバイザリーロック(勧告的ロック)

明確な定義は見つからなかったが、(IMO)「アプリケーション側でコントロールできることに置いたロック」といった解釈をしている。

例えば、PostgreSQLで用意されている pg_advisory_lock 関数は、任意のbigintを渡してロックとして扱うことができる。

PostgreSQLは、アプリケーション独自の意味を持つロックを生成する手法を提供します。これは、その使用に関してシステムによる制限がないこと、つまり、正しい使用に関してはアプリケーションが責任を持つことから勧告的ロックと呼ばれます。