这是我参与「第五届青训营」伴学笔记创作活动的第9天
内容梗概
本文主要梳理了以下内容:
- 啊啊
- 俺是
- 是
1 准备工作
在开始基于Go语言的MySQL代码基础实战前,首先要确保已下载并安装好 MySQL至本地,并设置好系统环境变量。一切设置好之后即可通过系统控制窗口(cmd)和VS Code对MySQL的本地数据库进行相关操作。
1.1 开启MySQL本地连接
注意,在安装过程中包含了数据库用户和密码的设置。安装完成后在cmd输入:
mysql -uroot -p
1.2 显示数据库列表
show databases; //显示可用数据库的列表(注意SQL命令后有“;”)
1.3 创建一个数据库
1.4 下载好第三方包
终端输入:
go get -u github.com/go-sql-driver/mysql
依赖安装完成后,如图:
以上完成了基于Go语言的MySQL编程的准备工作。
2 "database/sql"代码基础入门
2.1 数据库连接
主要包含sql.Open()和db.Ping()方法。前者仅检验输入格式的正确性,后者还会校验用户名密码等是否匹配(真的连接)。
示例代码:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql" //init()
)
// Go连接MySQL示例
func main() {
//dsn:data source name
dsn := "username:password@tcp(127.0.0.1:3306)/databasename"//修改好用户名、密码、数据库名、网络地址
db, err := sql.Open("mysql", dsn) //Open不会判断用户名和密码是否正确,只看格式正确性
if err != nil { //若dsn格式不正确,则报错
fmt.Printf("dsn:%s invalid,\nerr:%v\n", dsn, err)
return
}
err = db.Ping() //尝试连接数据库
if err != nil {
fmt.Printf("open %s failed,\nerr:%v\n", dsn, err)
return
} else {
fmt.Println("连接数据库成功!")
defer db.Close()
}
}
我们期望将对数据库的各种操作都抽象(简化)成一个个可调用的函数,那么对于数据库的初始化连接过程,可以改写成initDB()函数:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql" //init()
)
var db *sql.DB //定义全局DB(一个数据库连接池对象)
func initDB() (err error) {
dsn := "username:password@tcp(127.0.0.1:3306)/databasename"
//***注意***:db用的是上面的全局变量,【去冒号,不要重复定义】
db, err = sql.Open("mysql", dsn)
if err != nil {
return //默认返回err
}
err = db.Ping() //尝试连接数据库
if err != nil {
return
}
return
}
func main() {
err := initDB()
if err != nil {
fmt.Printf("init DB failed,\nerr:%v\n", err)
} else {
fmt.Println("连接数据库成功!")
}
}
2.2 MySQL基本功能的Go函数实现
2.2.1 CRUD 增查改删
CRUD主要被用在描述软件系统中数据库或者持久层的基本操作功能:增加(Create)、读取(Read)、更新(Update)和删除(Delete),即“增查改删”。
2.2.1.1 MySQL基本操作
在MySQL创建一个数据库:
create database sql_test;
进入该数据库:
use sql_test;
对应MySQL执行以下命令,创建一张用于测试的数据表(空表):
CREATE TABLE `user` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) DEFAULT '',
`age` INT(11) DEFAULT '0',
PRIMARY KEY(`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
增加:
使用insert关键字插入数据。
插入一条数据:
insert into user(name,age) values("周杰伦",44);
insert into user(name,age) values("王力宏",8888);
insert into user(name,age) values("待删",777);
查询:
使用select关键字查询。
select * from user;
修改:
使用update、set、where关键字,完成定位和修改数据。
update user
set age=8888
where id=2;
删除:
使用delete、where关键字,定位和删除目标数据。
delete from user
where id=3;
2.2.1.2 Go函数实现
为了方便查询,我们事先定义好一个结构体来存储user表的数据。
//Go语句
type user struct {
id int
age int
name string
}