golang中事务的使用

事务介绍

上面两篇主要是介绍了怎么使用相关库连接数据库和最基础的数据增删改查。
但是在实际开发过程中多数情况下,业务不会这么的单一,一般都是涉及到很多数据的修改,而这些修改又必须保持一致性(要么全部成功,要么全部失败。),这个时候就引入了事务的概念。

通过事务,保证数据一致性

事务的操作,一个begin必须有对应的commit或者rollback。以保证事务的完整
func (db *DB) Begin() (*Tx, error)
func (tx *Tx) Commit() error Commit递交事务。
func (tx *Tx) Rollback() error Rollback放弃并回滚事务。
使用完成之后必须要回收stmt和 *DB

基础的使用代码如下

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/godror/godror"
)
var db *sql.DB
const (
	host = "192.168.1.11"
	port = 1521
	user = "system"
	sqlpassword = "manager"
	dbname = "peixun"
)
func initsql(){
	osqlInfo := fmt.Sprintf("%s/%s@%s:%d/%s", user, sqlpassword, host, port, dbname)
	DB, err := sql.Open("godror", osqlInfo)
	if err != nil {
		panic(err)
	}
	err = DB.Ping()
	if err != nil {
		panic(err)
	}
	db = DB
	fmt.Println("链接成功")
}      
func main(){
	initsql() 
	defer db.Close()
	tx,err := db.Begin()
	if err!=nil{
		panic(err)
	}
	_, err = tx.Exec("insert into table_text(aaa,bbb,ccc,dddd) value(:x1,:x2,:x3,:x4)","aaa", "bbb","ccc",0)
	if err != nil {
		tx.Rollback()
		panic(err)
	}
	tx.Commit()
}

上面是最基础的使用方式,较为复杂的使用后面我会添加。