デフォルトでは、MySQL は自動コミットモードで稼動します。この場合、テーブルを更新(変更)するステートメントを実行すると、MySQL によって直ちにその更新がディスクに格納されます。
トランザクションセーフテーブル(InnoDB
や
BDB
)を使用している場合は、次のコマンドを使用して
MySQL
を非自動コミットモードに設定することができます。
SET AUTOCOMMIT=0
AUTOCOMMIT
変数をゼロに設定して自動コミットモードを無効にした後は、COMMIT
を使用して変更内容をディスクに格納するか、または、トランザクションの開始以来行った変更を無視する場合は
ROLLBACK
を使用する必要があります。
ひと続きのステートメントのみに対して自動コミットモードを無効にするときには、START
TRANSACTION
ステートメントを使用できます。
:
START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summmary=@A WHERE type=1; COMMIT;
トランザクションを開始するときには、START
TRANSACTION
の代わりに BEGIN
と BEGIN WORK
も使用できます。
START TRANSACTION
は MySQL 4.0.11
で追加されました。これは SQL-99
の構文であり、トランザクションを随時開始するときにはこの構文が推奨されます。BEGIN
は MySQL 3.23.17 以降で、BEGIN WORK
は
MySQL 3.23.19 以降で使用できます。
注意: 使用しているテーブルがトランザクションセーフテーブルでない場合は、自動コミットモードのステータスにかかわらず、すべての変更が直ちに格納されます。
非トランザクションテーブルを更新した後に
ROLLBACK
ステートメントを発行すると、エラー(ER_WARNING_NOT_COMPLETE_ROLLBACK
)が警告として出力されます。トランザクションセーフテーブルはいずれもリストアされますが、非トランザクションセーフテーブルは変更されません。
START TRANSACTION
または SET
AUTOCOMMIT=0
を使用している場合は、以前の更新ログの変わりにMySQL
バイナリログをバックアップ用に使用してください。トランザクションは
COMMIT
と同時にひとまとまりでバイナリログに格納されるため、ロールバックされたトランザクションが格納されることはありません。
See 項4.10.4. 「バイナリログ」。
トランザクションの分離レベルを変更するには、SET
TRANSACTION ISOLATION LEVEL
を使用します。 See
項6.7.6. 「SET TRANSACTION
構文」。
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.