【Go入门篇】第六章:Go语言进阶,连接MySQL操作数据库

在现代应用程序开发中,数据库是至关重要的组成部分。Go 语言提供了 database/sql 标准库以及多个数据库驱动库(如 MySQLPostgreSQLSQLite 等),使开发者可以高效地执行 增删改查(CRUD)操作

本章将介绍:

  • Go 连接数据库的方式
  • 使用 database/sql 进行 MySQL 操作
  • 使用 GORM 进行 ORM 访问
  • SQLite 数据库的使用

1. 连接数据库

Go 语言使用 database/sql 包来操作数据库,并需要配合第三方数据库驱动。

1.1 安装 MySQL 驱动

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

1.2 连接 MySQL

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql" // 导入 MySQL 驱动
)

func main() {
    dsn := "user:password@tcp(127.0.0.1:3306)/testdb"
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        panic(err)
    }
    defer db.Close()

    // 测试数据库连接
    err = db.Ping()
    if err != nil {
        panic(err)
    }

    fmt.Println("Successfully connected to MySQL!")
}

🚀 关键点

  • sql.Open("mysql", dsn) 初始化数据库连接
  • defer db.Close() 确保程序退出时关闭连接
  • db.Ping() 测试数据库连接是否可用

2. 执行 SQL 语句

2.1 创建表

_, err := db.Exec(`CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    age INT
)`)
if err != nil {
    panic(err)
}
fmt.Println("Table created successfully!")

2.2 插入数据

_, err := db.Exec("INSERT INTO users (name, age) VALUES (?, ?)", "Alice", 25)
if err != nil {
    panic(err)
}
fmt.Println("User inserted successfully!")

2.3 查询数据

rows, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
    panic(err)
}
defer rows.Close()

for rows.Next() {
    var id int
    var name string
    var age int
    rows.Scan(&id, &name, &age)
    fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age)
}

2.4 更新数据

_, err := db.Exec("UPDATE users SET age = ? WHERE name = ?", 30, "Alice")
if err != nil {
    panic(err)
}
fmt.Println("User updated successfully!")

2.5 删除数据

_, err := db.Exec("DELETE FROM users WHERE name = ?", "Alice")
if err != nil {
    panic(err)
}
fmt.Println("User deleted successfully!")

3. 使用 GORM 进行 ORM 操作

GORM 是 Go 语言的一个流行 ORM(对象关系映射)库,使数据库操作更加简单。

3.1 安装 GORM 和 MySQL 驱动

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

3.2 连接数据库

package main

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

type User struct {
    ID   uint   `gorm:"primaryKey"`
    Name string
    Age  int
}

func main() {
    dsn := "user:password@tcp(127.0.0.1:3306)/testdb?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic(err)
    }

    fmt.Println("Connected to MySQL using GORM!")

    // 自动迁移表
    db.AutoMigrate(&User{})
}

3.3 插入数据

db.Create(&User{Name: "Bob", Age: 28})

3.4 查询数据

var user User
db.First(&user, 1) // 根据 ID 查询
fmt.Println(user)

3.5 更新数据

db.Model(&user).Update("Age", 35)

3.6 删除数据

db.Delete(&user)

🚀 GORM 特性

  • db.AutoMigrate(&User{}) 自动迁移表结构
  • db.Create(&user) 插入数据
  • db.First(&user, id) 查询数据
  • db.Model(&user).Update("Age", 35) 更新数据
  • db.Delete(&user) 删除数据

4. SQLite 数据库

SQLite 是一个轻量级数据库,无需额外的数据库服务器,非常适合小型应用。

4.1 安装 SQLite 驱动

go get -u modernc.org/sqlite

4.2 连接 SQLite

import (
    _ "modernc.org/sqlite"
)
db, err := sql.Open("sqlite", "test.db")

其他 SQL 操作与 MySQL 类似。


5. 小结

技术作用
database/sql原生 SQL 查询
gormORM 数据库操作
SQLite轻量级嵌入式数据库

本章介绍了 MySQL 连接、CRUD 操作、GORM ORM 及 SQLite

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小黑的日志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值