工作中,DBA在准备一些自动化平台或者脚本时,需要我们掌握一些常用开发语言操作MySQL。
这一节内容,就来聊一下Go语言操作MySQL。
1 MySQL环境准备
可跳转到之前写的文章:MySQL 8.0 安装脚本
2 创建测试用户和测试表
在MySQL里面,创建测试用户和测试表:
CREATE USER 'go_rw'@'%' IDENTIFIED BY 'Ud7q_dac8';
GRANT insert,delete,select,update ON martin.* TO 'go_rw'@'%';
use martin
CREATE TABLE user_info (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
age INT
);
3 Go基础准备
可跳转:一文入门Go语言。
4 编写Go操作MySQL的代码
package main
import (
//用于数据库操作的标准库,可以用来创建数据库连接,执行SQL语句等
"database/sql"
//格式化输出的标准库
"fmt"
//MySQL数据库的驱动程序
_ "github.com/go-sql-driver/mysql"
)
//定义表数据的结构体,当查询数据时,把结果临时存放在结构体里,最终输出
type UserInfo struct {
ID int
Name string
Age int
}
//主函数
func main() {
//创建一个数据库连接对象
db, err := sql.Open("mysql", "go_rw:Ud7q_dac8@tcp(192.168.152.70:3306)/martin")
//如果有错误,就输出
if err != nil {
panic(err.Error())
}
//延迟执行关闭数据库连接
defer db.Close()
// 插入数据
// 预编译SQL
insertSQL, err := db.Prepare("INSERT INTO user_info(name, age) VALUES(?, ?)")
if err != nil {
panic(err.Error())
}
//执行延迟关闭
defer insertSQL.Close()
//执行行插入操作
_, err = insertSQL.Exec("John Doe", 25)
if err != nil {
panic(err.Error())
}
fmt.Println("Inserted data successfully.")
// 查询数据
//查询用db.Query,将结果存放在rows变量中
rows, err := db.Query("SELECT id, name, age FROM user_info")
if err != nil {
panic(err.Error())
}
defer rows.Close()
//定义一个users的变量,数据类型是结构体UserInfo,用来存放所有MySQL的查询结果。
var users []UserInfo
// 循环遍历每一行数据
for rows.Next() {
//定义一个user的变量,用来在每个循环中存放每一行数据
var user UserInfo
//通过rows.Scan将每一行的字段值赋给user这个变量
err := rows.Scan(&user.ID, &user.Name, &user.Age)
if err != nil {
panic(err.Error())
}
users = append(users, user)
}
fmt.Println("Result:")
//循环展示切片users中的数据,也就是每一行的数据
for _, user := range users {
fmt.Printf("ID: %d, Name: %s, Age: %d\n", user.ID, user.Name, user.Age)
}
// 更新数据
// 通过db.Prepare预编译一个更新语句
updateSQL, err := db.Prepare("UPDATE user_info SET name=?, age=? WHERE id=?")
if err != nil {
panic(err.Error())
}
defer updateSQL.Close()
//执行更新操作
_, err = updateSQL.Exec("Jane Smith", 30, 1)
if err != nil {
panic(err.Error())
}
fmt.Println("Updated data successfully.")
// 删除数据
//预编译删除语句
deleteSQL, err := db.Prepare("DELETE FROM user_info WHERE id=?")
if err != nil {
panic(err.Error())
}
defer deleteSQL.Close()
//执行删除操作
_, err = deleteSQL.Exec(1)
if err != nil {
panic(err.Error())
}
fmt.Println("Deleted data successfully.")
}
5 安装依赖包
go get github.com/go-sql-driver/mysql
6 进行测试
可以注释其他几种操作,只保留一种,比如测试insert,就把select、update、delete部分暂时注释一下。
好的,今天的内容就到这里。
另外,我之前多次跟朋友推荐过《MySQL实战45讲》,最近又刷了1遍,真的忍不住再安利下,感觉不是一般的好。
看评论区有人说这个资料值得被所有开发同学看到,我只想说:我附议!再加上值得被所有DBA看到,看的我酣畅淋漓,有一种灵魂共振的快感。
可以试看,感兴趣的可以看看:
近期公众号热文: