github.com/gogf/gf@v1.16.9/.example/database/gdb/mysql/gdb_transaction_savepoint.go (about)

     1  package main
     2  
     3  import (
     4  	"github.com/gogf/gf/frame/g"
     5  )
     6  
     7  func main() {
     8  	var (
     9  		err   error
    10  		db    = g.DB()
    11  		table = "user"
    12  	)
    13  	tx, err := db.Begin()
    14  	if err != nil {
    15  		panic(err)
    16  	}
    17  	defer func() {
    18  		if err := recover(); err != nil {
    19  			_ = tx.Rollback()
    20  		}
    21  	}()
    22  	if _, err = tx.Model(table).Data(g.Map{"id": 1, "name": "john"}).Insert(); err != nil {
    23  		panic(err)
    24  	}
    25  	if err = tx.SavePoint("MyPoint"); err != nil {
    26  		panic(err)
    27  	}
    28  	if _, err = tx.Model(table).Data(g.Map{"id": 2, "name": "smith"}).Insert(); err != nil {
    29  		panic(err)
    30  	}
    31  	if _, err = tx.Model(table).Data(g.Map{"id": 3, "name": "green"}).Insert(); err != nil {
    32  		panic(err)
    33  	}
    34  	if err = tx.RollbackTo("MyPoint"); err != nil {
    35  		panic(err)
    36  	}
    37  	if err = tx.Commit(); err != nil {
    38  		panic(err)
    39  	}
    40  }