记录两次插入数据库

时间:2017-12-11 09:53:07

标签: database postgresql go

我的Go代码如下:

package main

import (  
  "database/sql"
  "log"

  _ "github.com/lib/pq"

)


const (
    insertLoginSQL   = `insert into Logins(id, name,password) values($1, $2, $3)`
)

func main() {  

     db, err := sql.Open("postgres", "user=postgres password=admin dbname=Quality sslmode=disable")

    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    if err := Insert(db); err != nil {
        log.Println("error with double insert", err)
    }

}

func Insert(db *sql.DB) error {
    tx, err := db.Begin()
    if err != nil {
        return err
    }

        stmt, err := tx.Prepare(insertLoginSQL)
        if err != nil {
            return err
        }
        defer stmt.Close()

        if _, err := stmt.Exec(10, "user","pwd"); err != nil {
            tx.Rollback()
            return err
        }

    return tx.Commit()
}

当我运行上面的代码时,记录在数据库中插入两次。有人能告诉我为什么插入重复记录?这段代码有什么问题吗?

1 个答案:

答案 0 :(得分:2)

可能提交两次。第一次执行某些先前的操作,例如stmt.exec,第二次执行tx.Commit()时。