美文网首页Go语言Go程序员
Golang连接mysql数据库

Golang连接mysql数据库

作者: 转音视频的老王 | 来源:发表于2018-02-12 19:51 被阅读86次

mysql的安装以及配置

mysql的安装以及配置,网上的教程很多,这里就不用多说了,值得注意的是:安装好了,一定要先启动mysql服务,创建相应的数据库和表

mysql数据库go驱动安装

golang连接数据库用户的驱动是:go-sql-driver

  • 安装方式:打开命令行,执行go命令:
go get -u github.com/go-sql-driver/mysql

mysql数据库连接

  • 构建连接, 格式是:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
  • 打开数据库,前者是驱动名,所以要导入: _ "github.com/go-sql-driver/mysql"
  • 设置数据库最大连接数和设置上数据库最大闲置连接数
  • 验证连接:使用Ping()函数
    代码参考如下:
//数据库配置
const (
    userName = "root"
    password = "123456"
    ip = "127.0.0.1"
    port = "3306"
    dbName = "loginserver"
)
//Db数据库连接池
var DB *sql.DB

//注意方法名大写,就是public
func InitDB()  {
    //构建连接:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
    path := strings.Join([]string{userName, ":", password, "@tcp(",ip, ":", port, ")/", dbName, "?charset=utf8"}, "")

    //打开数据库,前者是驱动名,所以要导入: _ "github.com/go-sql-driver/mysql"
    DB, _ = sql.Open("mysql", path)
    //设置数据库最大连接数
    DB.SetConnMaxLifetime(100)
    //设置上数据库最大闲置连接数
    DB.SetMaxIdleConns(10)
    //验证连接
    if err := DB.Ping(); err != nil{
        fmt.Println("opon database fail")
        return
    }
    fmt.Println("connnect success")
}

mysql数据库的增删查改

数据库的insert, delete以及update的步骤内容大致一致,差别就是sql语句的变化

insert

步骤:

  • 开启事务: tx, err := DB.Begin()
  • 准备sql语句:stmt, err := tx.Prepare("INSERT INTO nk_user (name, password) VALUES (?, ?)")
  • 执行sql语句:res, err := stmt.Exec(user.UserName, user.Password)
  • 提交事务: tx.Commit()
  • 获得上一个插入自增的id: res.LastInsertId()

参考代码如下:

func InsertUser(user bean.User) (bool){
    //开启事务
    tx, err := DB.Begin()
    if err != nil{
        fmt.Println("tx fail")
        return false
    }
    //准备sql语句
    stmt, err := tx.Prepare("INSERT INTO nk_user (`name`, `password`) VALUES (?, ?)")
    if err != nil{
        fmt.Println("Prepare fail")
        return false
    }
    //将参数传递到sql语句中并且执行
    res, err := stmt.Exec(user.UserName, user.Password)
    if err != nil{
        fmt.Println("Exec fail")
        return false
    }
    //将事务提交
    tx.Commit()
    //获得上一个插入自增的id
    fmt.Println(res.LastInsertId())
    return true
}

delete

步骤:

  • 开启事务: tx, err := DB.Begin()
  • 准备sql语句:stmt, err := tx.Prepare("DELETE FROM nk_user WHERE id = ?")
  • 执行sql语句:res, err := stmt.Exec(user.Id)
  • 提交事务: tx.Commit()

参考代码如下:

func DeleteUser(user bean.User) (bool) {
    //开启事务
    tx, err := DB.Begin()
    if err != nil{
        fmt.Println("tx fail")
    }
    //准备sql语句
    stmt, err := tx.Prepare("DELETE FROM nk_user WHERE id = ?")
    if err != nil{
        fmt.Println("Prepare fail")
        return false
    }
    //设置参数以及执行sql语句
    res, err := stmt.Exec(user.Id)
    if err != nil{
        fmt.Println("Exec fail")
        return false
    }
    //提交事务
    tx.Commit()
    //获得上一个insert的id
    fmt.Println(res.LastInsertId())
    return true
}

update

步骤:

  • 开启事务: tx, err := DB.Begin()
  • 准备sql语句:stmt, err := tx.Prepare("UPDATE nk_user SET name = ?, password = ? WHERE id = ?")
  • 执行sql语句:res, err := stmt.Exec(user.UserName, user.Password, user.Id)
  • 提交事务: tx.Commit()

参考代码如下:

func UpdateUser(user bean.User) (bool) {
    //开启事务
    tx, err := DB.Begin()
    if err != nil{
        fmt.Println("tx fail")
    }
    //准备sql语句
    stmt, err := tx.Prepare("UPDATE nk_user SET name = ?, password = ? WHERE id = ?")
    if err != nil{
        fmt.Println("Prepare fail")
        return false
    }
    //设置参数以及执行sql语句
    res, err := stmt.Exec(user.UserName, user.Password, user.Id)
    if err != nil{
        fmt.Println("Exec fail")
        return false
    }
    //提交事务
    tx.Commit()
    fmt.Println(res.LastInsertId())
    return true
}

query

  • 查询单行数据: 编写sql语句,利用QueryRow函数查询,并且利用Scan将查询结果赋值到对应的对象中
func SelectUserById(id int) (bean.User) {
    var user bean.User
    err := DB.QueryRow("SELECT * FROM nk_user WHERE id = ?", id).Scan(&user.Id, &user.UserName, &user.Password)
    if err != nil{
        fmt.Println("查询出错了")
    }
    return user
}
  • 查询多行数据:
    • 编写sql语句,执行Query函数
    • 利用Next()读取每一行返回的结果,并且利用Scan赋值到相应的对象中
      参考代码如下:
func SelectAllUser() ([]bean.User) {
    //执行查询语句
    rows, err := DB.Query("SELECT * from nk_user")
    if err != nil{
        fmt.Println("查询出错了")    
    }
    var users []bean.User
    //循环读取结果
    for rows.Next(){
        var user bean.User
        //将每一行的结果都赋值到一个user对象中
        err := rows.Scan(&user.Id, &user.UserName, &user.Password)
        if err != nil {
            fmt.Println("rows fail")
        }
        //将user追加到users的这个数组中
        users = append(users, user)
    }
    return users
}

注意事项

  • 注意将包括账户名和密码等数据库的配置改成自己的数据库配置
  • 每个人的表结构不一样,sql语句也不一样,注意修改

相关文章

  • golang对mysql的基本操作

    golang 操作mysql 导入数据库驱动 mysql连接配置 建立连接 数据模型 数据表结构 查询单行 注意:...

  • MySQL基本操作

    golang调用MySQL数据库:使用MySQL数据库 go语言中文网 Golang Mysql笔记(...

  • golang连接mysql

    ``` /* * @Descripttion: golang 连接mysql demo * @version: *...

  • SQL

    golang连接mysql 1、mysql数据驱动:github.com/go-sql-driver/mysql ...

  • PHP与MySQL

    mysql_connect 建立数据库连接 mysql_close 关闭数据库连接 mysql_select_db...

  • servlet连接mysql数据库和oracle数据库

    连接mysql数据库 连接oracle数据库

  • Golang连接mysql数据库

    mysql的安装以及配置 mysql的安装以及配置,网上的教程很多,这里就不用多说了,值得注意的是:安装好了,一定...

  • MySQL 常用命令大全

    一、 mysql:连接数据库 mysql 命令用户连接数据库。mysql 命令格式:mysql -h 主机地址-u...

  • mysql基本操作

    连接本地mysql数据库 连接远程数据库:

  • php与mysql

    1、连接mysql 2、数据库扩展 mysql扩展进行数据库连接的方法: $link = mysql_connec...

网友评论

    本文标题:Golang连接mysql数据库

    本文链接:https://www.haomeiwen.com/subject/tzrdtftx.html