Bootstrap

使用Go 语言连接并操作 MySQL 数据库

新建项目,我这里使用的vscode:

1.新建项目初始化:

手动创建工程文件夹go安装目录->src->projectName
在这里插入图片描述
在项目下创建 main.go文件:
在vscode中点击文件->打开文件夹,选择刚刚新建的文件夹。打开后,如下图新建一个文件后缀为.go(main.go)。
在这里插入图片描述

在这里插入图片描述
打开终端,如下图,输入go mod init go_test(格式:go mod init 新建的文件名称),回车等待。点击运行按钮或ctrl+alt+n运行项目。
在这里插入图片描述

2.安装MySQL驱动

要使用Go语言连接MySQL,首先需要安装一个兼容的数据库驱动。go-sql-driver/mysql 是一个广泛使用的开源驱动,可以通过 go get 命令来安装:

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

在这里插入图片描述

3.导入驱动包

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

4. 连接数据库

package main

import (
	"database/sql"
	"fmt"

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

func main() {
	// DSN (Data Source Name) 是包含数据库连接信息的字符串
	dsn := "user:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"

	// 创建数据库连接
	db, err := sql.Open("mysql", dsn)
	if err != nil {
		panic(err.Error())
	}
	defer db.Close()

	// 检查连接是否有效
	err = db.Ping()
	if err != nil {
		panic(err.Error())
	} else {
		fmt.Println("Connected to the database!")
	}
}

参数说明:

user: 数据库用户名
password: 密码
tcp(localhost:3306): 服务器地址和端口(这里是本地主机上的默认MySQL端口)
/dbname: 要连接的数据库名称
charset=utf8mb4: 设置字符集
parseTime=True: 让驱动解析时间类型字段为time.Time类型
loc=Local: 设置时区为本地时区

测试一下:
在这里插入图片描述
写一个查询试试:

package main

import (
	"database/sql"
	"fmt"
	"log"

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

func main() {
	// DSN (Data Source Name) 是包含数据库连接信息的字符串
	dsn := "root:123456@tcp(1.1.1.1:3306)/ry-vue?charset=utf8mb4&parseTime=True&loc=Local"

	// 创建数据库连接
	db, err := sql.Open("mysql", dsn)
	if err != nil {
		panic(err.Error())
	}
	defer db.Close()

	// 检查连接是否有效
	err = db.Ping()
	if err != nil {
		panic(err.Error())
	} else {
		fmt.Println("Connected to the database!")
	}

	// 查询单个用户
	userId := 2
	getUser(db, userId)
}

// 查询单个用户
func getUser(db *sql.DB, user_id int) {
	query := "SELECT user_id ,user_name,nick_name FROM sys_user WHERE user_id = ?"
	row := db.QueryRow(query, user_id)

	var user_name string
	var nick_name string
	// 调用完了 QueryRow 方法之后,一定要记得调用 Scan 方法,否则持有的数据库连接不会被释放
	if err := row.Scan(&user_id, &user_name, &nick_name); err != nil {
		if err == sql.ErrNoRows {
			fmt.Printf("用户 ID %d 不存在\n", user_id)
		} else {
			log.Fatal(err)
		}
	} else {
		fmt.Printf("用户 ID: %d, userName: %s, nickName: %s\n", user_id, user_name, nick_name)
	}

}

在这里插入图片描述
在这里插入图片描述

;