トランザクション
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)
}