事务介绍

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

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

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

  1. package main
  2. import (
  3. "database/sql"
  4. "fmt"
  5. _ "github.com/godror/godror"
  6. )
  7. var db *sql.DB
  8. const (
  9. host = "192.168.1.11"
  10. port = 1521
  11. user = "system"
  12. sqlpassword = "manager"
  13. dbname = "peixun"
  14. )
  15. func initsql(){
  16. osqlInfo := fmt.Sprintf("%s/%s@%s:%d/%s", user, sqlpassword, host, port, dbname)
  17. DB, err := sql.Open("godror", osqlInfo)
  18. if err != nil {
  19. panic(err)
  20. }
  21. err = DB.Ping()
  22. if err != nil {
  23. panic(err)
  24. }
  25. db = DB
  26. fmt.Println("链接成功")
  27. }
  28. func main(){
  29. initsql()
  30. defer db.Close()
  31. tx,err := db.Begin()
  32. if err!=nil{
  33. panic(err)
  34. }
  35. _, err = tx.Exec("insert into table_text(aaa,bbb,ccc,dddd) value(:x1,:x2,:x3,:x4)","aaa", "bbb","ccc",0)
  36. if err != nil {
  37. tx.Rollback()
  38. panic(err)
  39. }
  40. tx.Commit()
  41. }