go言語ベーストランザクションgo言語ベーストランザクション:transaction
3449 ワード
原子性、一貫性、隔離性、持続性
手動でトランザクションを開く:db.Begin()-->Tx
sql操作のセット
tx.Exec(),tx.Prepare()...
手動コミット、ロールバック
tx.Commit(),tx.Rollback()
手動でトランザクションを開く:db.Begin()-->Tx
sql操作のセット
tx.Exec(),tx.Prepare()...
手動コミット、ロールバック
tx.Commit(),tx.Rollback()
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
/*
:
4 :ACID
:
:
:
:
*/
//rose-->jack,2000
db, _ := sql.Open("mysql", "root:hanru1314@tcp(127.0.0.1:3306)/my1802?charset=utf8")
//
tx, _ := db.Begin()
// sql
var aff1, aff2 int64 = 0, 0
result1, _ := tx.Exec("UPDATE account SET money=3000 WHERE id=?", 1)
result2, _ := tx.Exec("UPDATE account SET money2=2000 WHERE id=?", 2)
//fmt.Println(result2)
if result1 != nil {
aff1, _ = result1.RowsAffected()
}
if result2 != nil {
aff2, _ = result2.RowsAffected();
}
fmt.Println(aff1)
fmt.Println(aff2)
if aff1 == 1 && aff2 == 1 {
//
tx.Commit()
fmt.Println(" 。。")
} else {
//
tx.Rollback()
fmt.Println(" 。。。 。。")
}
}