Go整合Mysql

整合Mysql

  1. 安装
    https://zhidao.baidu.com/question/1693767839900294708.html
    如果 go get失败的话,手动下载,按照路径放在 gopath下面的src路径下面,然后install就可以了

  2. db的操作分为四种:

  • db.Exec (直接执行)
  • db.Prepare (预执行)
  • db.QueryRow (查询一条数据)
  • db.Query (查询多条数据)
  1. 事务
  • 在操作数据库之前执行,db.Begin()例:tx, err := db.Begin()
  • 保存到数据库:err := tx.Commit()
  • 回滚:err := tx.Rollback()
  • 注意设置事务以后操作数据库就不是db了,而是tx
  1. 使用
    参考chainZhang的,非常详细
    https://www.jianshu.com/p/e9709747f5a7
//设置数据库连接参数
var (
    dbhost = "127.0.0.1:3306"
    dbusername = "root"
    dbpassword = "123456"
    dbname = "go"
)

//获取数据库连接对象
func GetDB() *sql.DB{
    db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8", dbusername, dbpassword, dbhost, dbname))
    if err!=nil{
        return nil
    }
    return db
}

//查询多条数据
func GetAll(){
    db := GetDB()
    defer db.Close()
    rows, err := db.Query("select username, departname, created from userinfo")
    if err != nil{
        fmt.Println("get all error: ", err.Error())
        return
    }
    for rows.Next(){
        var username, departname, created string
        if err := rows.Scan(&username, &departname, &created); err == nil{
            fmt.Println("username: ", username, "departname: ", departname, "created: ", created)
        }
    }
}

//查询一条数据
    var username, departname, created string
    err := db.QueryRow("select username, departname, created from userinfo where uid=?",id).Scan(&username, &departname, &created)

}

//直接新增
_, err := db.Exec("insert into userinfo(username,departname,created) values(?,?,?)", username, departname, time.Now())

//修改
    stmt, err := db.Prepare("update userinfo set username=? where uid=?")
    _, err = stmt.Exec(name, id)

//删除
    stmt, err := db.Prepare("delete from userinfo where uid=?")
    _, err = stmt.Exec(id)

//事务的使用
func Trans(){
    db := GetDB()
    defer db.Close();

    tx, err := db.Begin()
    if err != nil{
        fmt.Println("db.Begin error: ", err.Error())
        return
    }
    isCommit := true
    defer func(){
        if isCommit{
            tx.Commit()
            fmt.Println("commit")
        }else{
            tx.Rollback()
            fmt.Println("Rollback")
        }
    }()
    _, err = tx.Exec("insert into userinfo(username,departname,created) values(?,?,?)","username","departname",time.Now())
    if err != nil{
        isCommit = false
    }
    _, err = tx.Exec("insert into userinfo(username,departname,created) values(?,?,?)","username","departname",time.Now())
    if err != nil{
        isCommit = false
    }
    _, err = tx.Exec("insert into userinfo(username,departname,created) values(?,?,?)","username","departname",time.Now())
    if err != nil{
        isCommit = false
    }
}

你可能感兴趣的:(Go整合Mysql)