[+/-]
SET ... TRANSACTION ISOLATION LEVEL ...
SELECT ... FOR
UPDATE
および SELECT ... LOCK IN SHARE
MODE
InnoDB
で各種 SQL
ステートメントによって設定されるロックInnoDB
での読み取り一貫性の例
InnoDB
トランザクションモデルの目標は、マルチバージョニングのデータベースの優れた特性を、従来の
2 相ロックと組み合わせることでした。 InnoDB
は、行レベルでロックを行い、デフォルトではクエリを
Oracle
式の非ロックの一貫性読み取りとして実行します。
InnoDB
のロックテーブルはスペース効率の高い方法で格納されるため、ロックエスカレーションは不要です。一般には、複数のユーザがデータベースのあらゆるレコードまたはレコードのランダムなサブセットをロックすることができ、InnoDB
でメモリ不足が発生することもありません。
InnoDB
では、すべてのユーザ活動がトランザクションの内部で発生します。MySQL
でオートコミットモードが使用されている場合は、各
SQL ステートメントが 1
つのトランザクションとなります。 MySQL
は常にオートコミットモードをオンにして新たな接続を開始します。
SET AUTOCOMMIT = 0
でオートコミットモードがオフになると、ユーザが常にトランザクションを開いていると見なされます。このユーザが
SQL の COMMIT
または
ROLLBACK
ステートメントを実行すると、現在のトランザクションが終了し、新しいトランザクションが開始されます。どちらのステートメントも、現在のトランザクションで設定されたすべての
InnoDB
ロックを解除します。COMMIT
を実行すると、現在のトランザクションで加えられた変更が確定し、他のユーザが認識できる状態になります。一方、ROLLBACK
ステートメントを実行すると、現在のトランザクションによって加えられたすべての変更が取り消されます。
接続に AUTOCOMMIT = 1
が設定されている場合でも、ユーザはトランザクションを実行できます。その場合、START
TRANSACTION
または BEGIN
でトランザクションを開始し、COMMIT
または ROLLBACK
でトランザクションを終了します。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.