Go

最近更新时间:2026-02-11 14:13:01

我的收藏

使用 Go MySQL Driver

本文档介绍如何使用 Go 语言的 MySQL 驱动程序对 TDSQL Boundless 进行数据库操作,包括连接数据库、创建表、插入数据、更新数据和删除数据等基本操作。

安装驱动

在使用 Go MySQL Driver 之前,需要先安装驱动:
go get -u github.com/go-sql-driver/mysql

基本操作示例

连接数据库

package main

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

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

func main() {
// 连接数据库
db, err := sql.Open("mysql", "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
log.Fatal(err)
}
defer db.Close()

// 测试连接
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to MySQL database!")
}

连接池配置

db.SetMaxOpenConns(25) // 最大连接数
db.SetMaxIdleConns(5) // 最大空闲连接数
db.SetConnMaxLifetime(5 * time.Minute) // 连接最大存活时间

创建表


query := `
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)`
_, err := db.Exec(query)
if err != nil {
log.Fatal(err)
}


插入数据

query := "INSERT INTO users (username, email) VALUES (?, ?)"


result, err := db.Exec(query, "john_doe", "john@example.com")
if err != nil {
log.Fatal(err)
}


id, err := result.LastInsertId()
if err != nil {
log.Fatal(err)
}

更新数据

query := "UPDATE users SET email = ? WHERE username = ?"


result, err := db.Exec(query, "new_email@example.com", "john_doe")
if err != nil {
log.Fatal(err)
}


rowsAffected, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}

删除数据

query := "DELETE FROM users WHERE username = ?"


result, err := db.Exec(query, "john_doe")
if err != nil {
log.Fatal(err)
}


rowsAffected, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}

使用 GORM 框架

GORM 是一个流行的 Go 语言 ORM 库,支持多种数据库,包括 TDSQL Boundless。本指南将介绍如何使用 GORM 连接腾讯云数据库 TDSQL Boundless,并执行基本的 CRUD 操作。

安装依赖

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

连接 TDSQL Boundless

连接字符串格式

dsn := "user:password@tcp(host:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local"

示例连接代码

package main

import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)

func main() {
dsn := "root:yourpassword@tcp(127.0.0.1:3306)/yourdb?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}

// 使用db对象进行数据库操作...
}

定义模型与创建表

定义模型结构体

type User struct {
gorm.Model
Name string
Email string `gorm:"unique"`
Age int
}

自动迁移创建表

// 自动迁移模式
err = db.AutoMigrate(&User{})
if err != nil {
panic("failed to migrate database")
}

CRUD 操作示例

创建记录

// 创建单个用户
user := User{Name: "张三", Email: "zhangsan@example.com", Age: 25}
result := db.Create(&user)
if result.Error != nil {
panic(result.Error)
}

// 批量创建
users := []User{
{Name: "李四", Email: "lisi@example.com", Age: 30},
{Name: "王五", Email: "wangwu@example.com", Age: 28},
}
db.Create(&users)

查询记录

// 查询单个用户
var user User
db.First(&user, 1) // 通过主键查询
db.First(&user, "name = ?", "张三") // 通过条件查询

// 查询多个用户
var users []User
db.Find(&users) // 查询所有用户
db.Where("age > ?", 25).Find(&users) // 条件查询

更新记录

// 更新单个字段
db.Model(&user).Update("name", "张三新名字")

// 更新多个字段
db.Model(&user).Updates(User{Name: "张三新名字", Age: 26})

// 条件更新
db.Model(&User{}).Where("age < ?", 30).Update("age", gorm.Expr("age + ?", 1))

删除记录

// 删除单个记录
db.Delete(&user)

// 条件删除
db.Where("name = ?", "李四").Delete(&User{})

// 软删除(如果模型包含gorm.Model)
db.Delete(&user) // 只会设置deleted_at字段