Go连接MySQL数据库 - Go语言中文社区

Go连接MySQL数据库


1. 安装驱动

因为Go语言没有提供任何官方数据库驱动,所以需要安装第三方函数库。
windows:安装git软件,终端执行命令:

go get github.com/go-sql-driver/mysql
这一命令会从代码中获取驱动的具体代码,并将这些代码放置到包库中,当需要用到驱动的时候,编译器会把驱动代码与用户编写的代码一同编译。

Mac直接执行。

2. 数据库设置远程连接

进入MySQL数据库,使用数据库mysql:

use mysql;

执行命令:

select host,user,authentication_string,plugin from user;

root 用户的 host默认显示的 localhost,说明只支持本地访问,不允许远程访问。显示%说明支持远程访问。

如果显示localhost,执行命令:

update user set host='%' where user='root';

执行刷新命令:

flush privileges;

3. 连接数据库

  1. 打开GoLand,在src目录下创建demo.go文件, 导入数据库驱动
import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

注意:程序在操作数据库的时候只需要用到database/sql,而不需要直接使用数据库驱动,所以程序在导入数据库驱动的时候将这个包的名字设置成下划线。
  1. 通过sql.open()连接数据库

sql.open(驱动名,数据源dsn)(*DB,err)

数据源语法:"用户名:密码@[连接方式](主机名:端口号)/数据库名"

注意:open()在执行时不会真正的与数据库进行连接,只是设置连接数据库需要的参数
ping()方法才是连接数据库
  1. 执行SQL语句
    创建测试表:
mysql> create table stu(
    -> id int primary key,
    -> name varchar(10)
    -> );
Query OK, 0 rows affected (0.02 sec)

操作数据:

package main

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
    "fmt"
)

func main(){
    //"用户名:密码@[连接方式](主机名:端口号)/数据库名"
    db,_:=sql.Open("mysql","root:root@(127.0.0.1:3306)/testdatabases") // 设置连接数据库的参数
    defer db.Close()    //关闭数据库
    err:=db.Ping()      //连接数据库
    if err!=nil{
        fmt.Println("数据库连接失败")
        return
    }

    //操作一:执行数据操作语句
    /*
    sql:="insert into stu values (2,'berry')"
    result,_:=db.Exec(sql)      //执行SQL语句
    n,_:=result.RowsAffected(); //获取受影响的记录数
    fmt.Println("受影响的记录数是",n)
    */

    //操作二:执行预处理
    /*
    stu:=[2][2] string{{"3","ketty"},{"4","rose"}}
    stmt,_:=db.Prepare("insert into stu values (?,?)")      //获取预处理语句对象
    for _,s:=range stu{
        stmt.Exec(s[0],s[1])            //调用预处理语句
    }
    */

    //操作三:单行查询
    /*
    var id,name string
    rows:=db.QueryRow("select * from stu where id=4")   //获取一行数据
    rows.Scan(&id,&name)        //将rows中的数据存到id,name中
    fmt.Println(id,"--",name)
    */

    //操作四:多行查询
    rows,_:=db.Query("select * from stu")       //获取所有数据
    var id,name string
    for rows.Next(){        //循环显示所有的数据
        rows.Scan(&id,&name)
        fmt.Println(id,"--",name)
    }
}
版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/7e745fefb8af
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-01-12 11:45:11
  • 阅读 ( 1245 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢