Go 语言 操作MySQL数据库增删改查示例

Go阿木 发布于 29 天前 3 次阅读


Go 语言操作 MySQL 数据库增删改查示例

Go 语言,也称为 Golang,是由 Google 开发的一种静态类型、编译型、并发型编程语言。由于其简洁的语法、高效的性能和强大的并发处理能力,Go 语言在近年来受到了广泛的关注和喜爱。在数据处理方面,Go 语言同样表现出色,特别是与关系型数据库如 MySQL 的交互。本文将围绕 Go 语言操作 MySQL 数据库的增删改查(CRUD)操作,通过示例代码展示如何实现这些基本数据库操作。

环境准备

在开始之前,请确保以下环境已正确配置:

1. Go 语言环境:下载并安装 Go 语言,配置好环境变量。

2. MySQL 数据库:安装 MySQL 数据库,并创建一个用于演示的数据库和表。

3. MySQL 驱动:下载并安装 MySQL 驱动,如 `go-sql-driver/mysql`。

数据库表结构

以下是一个简单的用户信息表结构,用于演示 CRUD 操作:

sql

CREATE TABLE `users` (


`id` int(11) NOT NULL AUTO_INCREMENT,


`username` varchar(50) NOT NULL,


`email` varchar(100) NOT NULL,


`password` varchar(50) NOT NULL,


PRIMARY KEY (`id`)


) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


安装 MySQL 驱动

在 Go 项目中,首先需要安装 MySQL 驱动。打开终端,执行以下命令:

bash

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


连接 MySQL 数据库

在 Go 代码中,首先需要导入 `database/sql` 包和 `github.com/go-sql-driver/mysql` 包,然后创建一个数据库连接。

go

package main

import (


"database/sql"


"fmt"


"log"

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


)

func main() {


// 数据库连接字符串


dsn := "username:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"


db, err := sql.Open("mysql", dsn)


if err != nil {


log.Fatal(err)


}


defer db.Close()

// 测试连接


err = db.Ping()


if err != nil {


log.Fatal(err)


}

fmt.Println("Connected to MySQL database!")


}


增(Create)

以下是一个插入新用户记录的示例:

go

func createUser(db sql.DB, username, email, password string) error {


stmt, err := db.Prepare("INSERT INTO users(username, email, password) VALUES (?, ?, ?)")


if err != nil {


return err


}


defer stmt.Close()

_, err = stmt.Exec(username, email, password)


return err


}

func main() {


// 连接数据库


db, err := sql.Open("mysql", "username:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local")


if err != nil {


log.Fatal(err)


}


defer db.Close()

// 插入新用户


err = createUser(db, "john_doe", "john@example.com", "password123")


if err != nil {


log.Fatal(err)


}

fmt.Println("User created successfully!")


}


删(Delete)

以下是一个删除用户记录的示例:

go

func deleteUser(db sql.DB, id int) error {


stmt, err := db.Prepare("DELETE FROM users WHERE id = ?")


if err != nil {


return err


}


defer stmt.Close()

_, err = stmt.Exec(id)


return err


}

func main() {


// 连接数据库


db, err := sql.Open("mysql", "username:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local")


if err != nil {


log.Fatal(err)


}


defer db.Close()

// 删除用户


err = deleteUser(db, 1)


if err != nil {


log.Fatal(err)


}

fmt.Println("User deleted successfully!")


}


改(Update)

以下是一个更新用户记录的示例:

go

func updateUser(db sql.DB, id int, username, email, password string) error {


stmt, err := db.Prepare("UPDATE users SET username = ?, email = ?, password = ? WHERE id = ?")


if err != nil {


return err


}


defer stmt.Close()

_, err = stmt.Exec(username, email, password, id)


return err


}

func main() {


// 连接数据库


db, err := sql.Open("mysql", "username:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local")


if err != nil {


log.Fatal(err)


}


defer db.Close()

// 更新用户


err = updateUser(db, 1, "john_doe_updated", "john_updated@example.com", "password123_updated")


if err != nil {


log.Fatal(err)


}

fmt.Println("User updated successfully!")


}


查(Read)

以下是一个查询用户记录的示例:

go

func getUser(db sql.DB, id int) (sql.Rows, error) {


stmt, err := db.Prepare("SELECT FROM users WHERE id = ?")


if err != nil {


return nil, err


}


defer stmt.Close()

rows, err := stmt.Query(id)


if err != nil {


return nil, err


}

return rows, nil


}

func main() {


// 连接数据库


db, err := sql.Open("mysql", "username:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local")


if err != nil {


log.Fatal(err)


}


defer db.Close()

// 查询用户


rows, err := getUser(db, 1)


if err != nil {


log.Fatal(err)


}


defer rows.Close()

var user struct {


ID int


Username string


Email string


Password string


}

for rows.Next() {


if err := rows.Scan(&user.ID, &user.Username, &user.Email, &user.Password); err != nil {


log.Fatal(err)


}

fmt.Printf("User ID: %d, Username: %s, Email: %s, Password: %s", user.ID, user.Username, user.Email, user.Password)


}

if err := rows.Err(); err != nil {


log.Fatal(err)


}


}


总结

本文通过示例代码展示了如何使用 Go 语言操作 MySQL 数据库的增删改查操作。在实际应用中,您可能需要根据具体需求调整代码,例如处理错误、优化性能等。希望本文能帮助您更好地理解 Go 语言与 MySQL 数据库的交互。