Go进阶---Go操作Mysql数据库

安装依赖包

使用Go来操作mysql主要用到两个包

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

第一个包是Go自带的数据库包。但是只有第一个是不够的,数据库有很多种,虽然大同小异,但是还是有区别。这次我们需要使用的是Mysql,所以需要能够驱动Myqsl一个包。
第二个包就是用来Mysql的驱动包,这个包没有在Go的标准库里面,所以需要下载。
可以通过以下指令进行安装:

go get -u github.com/go-sql-driver/mysql

如果以上指令下载不了,可以直接去github.com/go-sql-driver/mysql下载,记得解压安装在(GoPath/src/vendor, 确保和上面的包目录一样,如果不一样记得修改)目录下。

然后需要使用匿名导入,关于匿名包我会在另外一篇博客中更新。


操作数据库

定义一个全局变量db来表示数据库。然后我们分两步进行:

初始化数据库(连接数据库)
// 定义一个全局对象db
var db *sql.DB

// 定义一个初始化数据库的函数,也就是连接数据库
func initDB() (err error) {
	// DSN:Data Source Name
	//dsn := "user:password@tcp(127.0.0.1:3306)/dbname" // 一般语句
	dsn := "root:123456@tcp(127.0.0.1:3306)/runoob"  // 这是我电脑上的数据库,请根据实际情况自行修改
	// 不会校验账号密码是否正确
	// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db
	db, err = sql.Open("mysql", dsn)
	if err != nil {
		return err
	}
	// 尝试与数据库建立连接(校验dsn是否正确)
	err = db.Ping()
	if err != nil {
		return err
	}
	return nil
}

操作数据库:

func main() {
	err := initDB() // 调用输出化数据库的函数
	if err != nil {
		fmt.Printf("init db failed,err:%v\n", err)
		return
	}
	// 将runoob1_tb1 这个表中的数据全部读出来
	rows, err := db.Query("SELECT * FROM runoob_tb1")

	// 也可以使用条件选择
	//id := 2
	//rows, err := db.Query("SELECT * FROM runoob_tb1 WHERE id=?", id) //

	//
	if err != nil {
		log.Fatalln(err)
	}
	defer rows.Close()

	for rows.Next() {
		// 取多少个变量就定义多少个变量
		var id int
		var author string
		var title string
		var date string
		if err := rows.Scan(&id, &title, &author, &date); err != nil {
			log.Fatalln(err)
		}
		fmt.Println(id, title, author, date)
	}
	if err := rows.Err(); err != nil {
		log.Fatalln(err)
	}
}

运行结果

D:\编程语言和环境\Go\src\studygo\day07\mysql\demo1>go run main.go
1 学习PHP 菜鸡教程 2020-02-13
2 学习MYSQL 菜鸟教程 2020-02-13
3 学习JAVA RUNOOB.COM 2020-02-13
5 学习C++ RUNOOB.COM 2020-02-13
7 学习go kyda 2020-02-16

看下控制台的结果:
在这里插入图片描述
很好一样,说明我们操作成功了。其他的一些操作其实大同小异。只需在上面程序上稍作修改即可。

本文主要参考:https://www.liwenzhou.com/posts/Go/go_mysql/

如果觉得我写的还可以的话在这里插入图片描述关注我公众号:

发布了67 篇原创文章 · 获赞 77 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/weixin_37720172/article/details/104339885