19-MySQLgo语言操作

前面我们使用mysql语言操作数据库,mysql是针对mysql数据库的一种特化的sql语言,但是在实际开发中,我们需要其它更高级的语言操作数据库,这里就讲如何利用Go语言操作MySQL数据库

一.GO-环境准备

在利用go语言开发数据库,我们首先要安装go以及它的开发环境,并进行合理的配置,在今后会具体讲环境的准备,但是这里,我们重在利用go语言的第三方库操作数据库,只简单做一下环境的检查.


image.png

image.png

image.png

image.png

image.png

image.png

1.因为Go语言官方没有提供任何数据库操作的驱动, 所以需要安装第三方的数据库驱动,才能在Go中操作数据库
https://github.com/go-sql-driver/mysql
2.安装第三方的数据库驱动
go get -u -v github.com/go-sql-driver/mysql
注意点: 想要在命令行中使用go语言的get指令, 除了需要安装go语言以外, 还需要安装git
-u: 安装最新版本, 如果本地已经安装过了, 那么就更新到最新版本
-v: 显示安装的过程
注意点: 默认情况下go get会将下载的第三方包下载到GOPATH的src路径中
By 极客江南

二.Go-打开/关闭数据库

image.png

// 1.打开数据库
/*
Open函数并不会立即简历一个数据库网络连接, 也不会对数据库连接参数的合法性做检查, 它仅仅是初始化一个sql的DB对象, 当真正需要使用到数据库的时候才会建立连接
*/
// sql.Open("mysql", "用户名:密码@tcp(IP:端口号)/数据库名称?charset=utf8")
// 返回值: 数据库对象和错误对象
db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/itzb?charset=utf8")
if err != nil {
fmt.Println("打开数据库失败", err)
return
}
// 2.关闭数据库
defer db.Close()
By 极客江南

三.Go-创建表

image.png

image.png

// 3.创建表
// 3.1编写创建表的语句
sql := "create table if not exists gotest(id int auto_increment primary key, name varchar(20))"
// 3.2执行创建表的语句
_, err = db.Exec(sql)
if err != nil{
fmt.Println("创建表失败", err)
return
}
By 极客江南

四.Go-插入数据

image.png

image.png

go中:=同时定义多个数据,会忽略已经定义的部分数据,所以这里err在上面定义过,但是没有报错

// 4.插入数据
//sql = "insert into gotest values(null, 'zq')"
//result , err := db.Exec(sql)
//if err != nil{
// fmt.Println("插入失败", err)
// return;
//}
//fmt.Println(result.LastInsertId()) // 当前插入的ID
By 极客江南

五.Go-修改数据

image.png

// 5.修改数据
//sql = "update gotest set name='www' where id=1"
//sql = "update gotest set name='qq'"
//result , err := db.Exec(sql)
//if err != nil{
// fmt.Println("插入失败", err)
// return;
//}
//fmt.Println(result.RowsAffected()) // 当前影响到的行数
By 极客江南

六.Go-删除数据

image.png

// 6.删除数据
//sql = "delete from gotest where id=2"
//_ , err = db.Exec(sql)
//if err != nil{
// fmt.Println("插入失败", err)
//}
By 极客江南

七.Go-预处理

image.png

// 7.预处理
//sql = "insert into gotest values(null, ?)"
//stmt, err := db.Prepare(sql)
//if err != nil{
// fmt.Println("预处理失败", err)
// return
//}
//arr := []string{"zs", "ls", "ww", "zl"}
//for _, value := range arr{
// //fmt.Println(index, value)
// stmt.Exec(value)
//}
By 极客江南

八.Go-单行查询

image.png

// 8.查询单行数据
// 8.1编写SQL语句
//sql = "select id, name from gotest where id=3"
//// 8.2查询一条结果
//row:= db.QueryRow(sql)
//// 8.3定义变量保存查询到的结果
//var id int
//var name string
//// 8.4从查询结果中获取对应的值
//// 注意点: Scan接收的参数必须和查询到的参数个数一致(包括顺序)
//err = row.Scan(&id, &name)
//if err != nil{
// fmt.Println("获取数据失败", err)
// return
//}
//fmt.Println("结果", id, name)
By 极客江南

九.Go-多行查询

image.png

// 9.查询多行数据
sql = "select id, name from gotest"
rows, err := db.Query(sql)
if err != nil{
fmt.Println("获取数据失败", err)
return
}
var id int
var name string
//rows.Next()
//rows.Scan(&id, &name)
//fmt.Println("结果", id, name)
//
//rows.Next()
//rows.Scan(&id, &name)
//fmt.Println("结果", id, name)
for rows.Next() {
rows.Scan(&id, &name)
fmt.Println("结果", id, name)
}
By 极客江南

你可能感兴趣的:(19-MySQLgo语言操作)