go言語ベーストランザクションgo言語ベーストランザクション:transaction

3449 ワード

原子性、一貫性、隔離性、持続性
手動でトランザクションを開く: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("    。。。  。。")
   }

}