使用 Go MySQL Driver
本文档介绍如何使用 Go 语言的 MySQL 驱动程序对 TDSQL Boundless 进行数据库操作,包括连接数据库、创建表、插入数据、更新数据和删除数据等基本操作。
安装驱动
在使用 Go MySQL Driver 之前,需要先安装驱动:
go get -u github.com/go-sql-driver/mysql
基本操作示例
连接数据库
package mainimport ("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/gormgo get -u gorm.io/driver/mysql
连接 TDSQL Boundless
连接字符串格式
dsn := "user:password@tcp(host:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
示例连接代码
package mainimport ("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.ModelName stringEmail 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 Userdb.First(&user, 1) // 通过主键查询db.First(&user, "name = ?", "张三") // 通过条件查询// 查询多个用户var users []Userdb.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字段