基础小白必备:Go语言中如何连接 MySQL

在现代应用中,数据库操作是必不可少的一部分,而 Go 语言凭借其高效性和并发处理能力,成为了越来越多开发者的选择。

在本教程中,我们将学习如何使用 Go 语言与 MySQL 数据库进行基本的 CRUD(创建、读取、更新、删除)操作。我们将使用 database/sql 标准库以及 github.com/go-sql-driver/mysql 驱动来实现这些功能。

准备工作

环境要求

  • 创建一个名为 test_db 的数据库。
  • 创建一个 users 表,表结构如下:
CREATE DATABASE test_db;

USE test_db;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INT NOT NULL
);

安装 MySQL 驱动

使用以下命令安装 MySQL 驱动:

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

示例代码

下面是一个完整的 Go 程序,展示如何进行基本的 CRUD 操作:

package main

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

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

func main() {
    // 数据库连接字符串
    dsn := "user:password@tcp(127.0.0.1:3306)/test_db"
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        log.Fatal(err)
    }
    // 防止 db 为 nil,因此需要先判断 err 之后才能调用 Close 方法去释放 db
    defer db.Close()

    // 测试连接
    if err := db.Ping(); err != nil {
        log.Fatal(err)
    }
    fmt.Println("成功连接到 MySQL 数据库!")

    // 创建用户
    id := createUser(db, "Alice", 25)
    fmt.Printf("新创建的用户 ID: %d\n", id)

    // 查询所有用户
    getUsers(db)

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

    // 更新用户
    affectedRows := updateUser(db, 1, "Alice Smith", 26)
    fmt.Printf("受影响的行数: %d\n", affectedRows)

    // 删除用户
    affectedRows = deleteUser(db, 1)
    fmt.Printf("受影响的行数: %d\n", affectedRows)
}

创建(Insert)

// 创建用户,返回新创建用户的 ID
func createUser(db *sql.DB, name string, age int) int {
    query := "INSERT INTO users (name, age) VALUES (?, ?)"
    result, err := db.Exec(query, name, age)
    if err != nil {
        log.Fatal(err)
    }
    // 获取最后插入的 ID
    lastInsertId, err := result.LastInsertId()
    if err != nil {
        log.Fatal(err)
    }
    return int(lastInsertId)
}

查询(Select)

// 查询所有用户
func getUsers(db *sql.DB) {
    query := "SELECT id, name, age FROM users"
    rows, err := db.Query(query)
    if err != nil {
        log.Fatal(err)
    }
    // 一定要记得关闭资源
    defer rows.Close()

    fmt.Println("所有用户:")
    for rows.Next() {
        var id int
        var name string
        var age int
        if err := rows.Scan(&id, &name, &age); err != nil {
            log.Fatal(err)
        }
        fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age)
    }
}

// 查询单个用户
func getUser(db *sql.DB, id int) {
    query := "SELECT id, name, age FROM users WHERE id = ?"
    row := db.QueryRow(query, id)

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

更新(Update)

// 更新用户,返回受影响的行数
func updateUser(db *sql.DB, id int, name string, age int) int {
    query := "UPDATE users SET name = ?, age = ? WHERE id = ?"
    result, err := db.Exec(query, name, age, id)
    if err != nil {
        log.Fatal(err)
    }
    // 获取受影响的行数
    affectedRows, err := result.RowsAffected()
    if err != nil {
        log.Fatal(err)
    }
    return int(affectedRows)
}

删除(Delete)

// 删除用户,返回受影响的行数
func deleteUser(db *sql.DB, id int) int {
    query := "DELETE FROM users WHERE id = ?"
    result, err := db.Exec(query, id)
    if err != nil {
        log.Fatal(err)
    }
    // 获取受影响的行数
    affectedRows, err := result.RowsAffected()
    if err != nil {
        log.Fatal(err)
    }
    return int(affectedRows)
}

代码解析

1. 数据库连接

我们使用 sql.Open 方法连接到 MySQL 数据库,连接字符串格式为 user:password@tcp(host:port)/dbname。在连接后,我们调用 db.Ping() 测试数据库连接是否成功。

2. 创建用户

createUser 函数通过 INSERT 语句向 users 表中添加新用户,并返回新创建用户的 ID。

3. 查询用户

  • getUsers 函数查询所有用户并打印每个用户的 ID、姓名和年龄。
  • getUser 函数通过用户 ID 查询单个用户,并处理用户不存在的情况。

4. 更新用户

updateUser 函数用于更新用户信息,并返回受影响的行数,以确认操作是否成功。

5. 删除用户

deleteUser 函数用于删除指定 ID 的用户,并同样返回受影响的行数。

总结

在本文中,我们展示了如何使用 Go 语言与 MySQL 数据库进行基本的 CRUD 操作。通过本教程,您可以创建、查询、更新和删除用户数据,这为您在开发基于数据库的应用程序时打下了基础。

作为程序员,持续学习和充电非常重要,作为开发者,我们需要保持好奇心和学习热情,不断探索新的技术,只有这样,我们才能在这个快速发展的时代中立于不败之地。低代码也是一个值得我们深入探索的领域,让我们拭目以待,它将给前端世界带来怎样的变革,推荐一个低代码工具。

应用地址: https://www.jnpfsoft.com

开发语言:Java/.net

这是一个基于Flowable引擎(支持java、.NET),已支持MySQL、SqlServer、Oracle、PostgreSQL、DM(达梦)、 KingbaseES(人大金仓)6个数据库,支持私有化部署,前后端封装了上千个常用类,方便扩展,框架集成了表单、报表、图表、大屏等各种常用的 Demo 方便直接使用。

至少包含表单建模、流程设计、报表可视化、代码生成器、系统管理、前端 UI 等组件,这种情况下我们避免了重复造轮子,已内置大量的成熟组件,选择合适的组件进行集成或二次开发复杂功能,即可自主开发一个属于自己的应用系统。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值