Go学习:操作MySQL数据库(1)

操作 MySQL 数据库

使用 Go 操作 MySQL 等数据库,一般有两种方式:

  • 一是利用 database/sql 接口,直接在代码里硬编码 sql 语句;
  • 二是使用 ORM,具体一点是 GORM,以对象关系映射的方式在抽象地操作数据库。
    这里先尝试第一种

连接 Mysql

安装驱动 go get github.com/go-sql-driver/mysql
导入驱动

package main
import (
    _ "github.com/go-sql-driver/mysql"
)
.
.
.

建立连接

var db *sql.DB
func main() {
    var err error
    config := mysql.Config{
        User:                 "root",
        Passwd:               "root",
        Addr:                 "127.0.0.1:3306",
        Net:                  "tcp",
        DBName:               "test",
        AllowNativePasswords: true,
    }

    // 准备数据库连接池
    db, err = sql.Open("mysql", config.FormatDSN())
    if err != nil {
        fmt.Print(err)
    }
    // 设置最大连接数
    db.SetMaxOpenConns(25)
    // 设置最大空闲连接数
    db.SetMaxIdleConns(25)
    // 设置每个链接的过期时间
    db.SetConnMaxLifetime(5 * time.Minute)
    // 尝试连接,失败会报错
    err = db.Ping()
    if err != nil {
        fmt.Print(nil)
    }
}

需要注意的是,创建DB对象成功,并不代表已经成功的连接了数据库,数据库连接只有在真正需要的时候才会被创建。因此如果,在创建DB对象后想验证数据库连接是否有效,可以调用Ping()

基本操作 curd

   //查询
    var ID int
    var name, email string
    id := 1
    query := "SELECT id,name,email FROM users WHERE id = ?"
    e := db.QueryRow(query, id).Scan(&ID, &name, &email)
    if e != nil {
        panic(e)
    }
    fmt.Println(ID)
    fmt.Println(name)
    fmt.Println(email)
    //新增
    stmt, e1 := db.Prepare("INSERT users SET name=?,email=?")
    checkErr(e1)
    res, e2 := stmt.Exec("zhang", "11@ww")
    checkErr(e2)
    fmt.Print(res)
    //修改
    stmt, err = db.Prepare("update users set name=? where id=?")
    checkErr(err)
    res, err = stmt.Exec("zhang", id)
    checkErr(err)
    fmt.Print(res)
    //删除
    stmt, err = db.Prepare("delete from users where id=?")
    checkErr(err)
    res, err = stmt.Exec(id)
    checkErr(err)
本作品采用《CC 协议》,转载必须注明作者和本文链接
Luson
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!