トランザクション
Go標準ライブラリのdatabase/sql
パッケージを利用して、トランザクションを制御する方法を説明します。
トランザクションの利用
トランザクションは次のメソッドを使って処理します。
DB.Begin
メソッドでトランザクション開始DB.Exec
メソッドの代わりにTx.Exec
メソッドを使ってSQL実行Tx.Commit
メソッドでコミットTx.Rollback
メソッドでロールバック
// トランザクション開始
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}
// SQL1実行
sqlIns := `INSERT INTO tasks(name, status) VALUES (?, ?);`
_, err = tx.Exec(sqlIns, "task1", "open")
// エラーの場合はロールバック
if err != nil {
tx.Rollback()
log.Fatal(err)
}
// SQL2実行
_, err = tx.Exec(sqlIns, "task2", "open")
// エラーの場合はロールバック
if err != nil {
tx.Rollback()
log.Fatal(err)
}
// SQL1、SQL2が正常に実行できたらコミット
if err := tx.Commit(); err != nil {
log.Fatal(err)
}