9.2 トランザクションを扱うには

リレーショナルデータベースを使ってアプリケーションを開発する上で、トランザクション制御は切っても切り離せないトピックです。 INSERTUPDATEDELETE といったDMLを使ってテーブルのレコードを操作する場合、トランザクションを使ってレコードを操作することになります。トランザクションは成功したか失敗したかのどちらかのみで終了します。データベースのオートコミットの設定にもよりますが、トランザクションの反映には明示的に Commit するか Rollback するか、いずれかの操作が必要になります 1

本項ではGoのアプリケーションにおけるトランザクション制御の方法を紹介します。 database/sql パッケージを用いて説明しますが、ORMなどの便利ライブラリを用いて開発する場合にも応用できます。たとえば sqlx も内部的には標準ライブラリの Begin() を使っていますし、 GormBeginTx() を使っており、突き詰めれば database/sql にたどり着きます。直接的ないし間接的に *sql.Tx を取得するAPIがライブラリに用意されています。

トランザクションを扱うためのAPIは大きく4つあります。

表9-1: トランザクションを扱うAPI

API名

説明

BeginTx()

トランザクションを開始するときに使う

ExecContext()

INSERT などのテーブルのレコードを操作するときに使う

Rollback()

トランザクションをロールバックするときに使う

Commit()

トランザクションをコミットするときに使う

トランザクションを開始するには ...