トランザクション

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)
}