文章目录
-
- 一、MySQL数据库连接
-
- [1.1 下载依赖](#1.1 下载依赖)
- [1.2 初始化连接](#1.2 初始化连接)
- [1.3 连接池配置](#1.3 连接池配置)
- 二、MySQL的CRUD操作
-
- [2.1 建库建表](#2.1 建库建表)
- [2.2 插入数据](#2.2 插入数据)
- [2.3 查询数据](#2.3 查询数据)
- [2.4 更新数据](#2.4 更新数据)
- [2.5 删除数据](#2.5 删除数据)
- 三、完整代码案例
一、MySQL数据库连接
Go语言操作MySQL是开发中常见的任务,通过Go语言的标准库database/sql
和第三方MySQL驱动(如go-sql-driver/mysql
),可以方便地实现数据库的连接、查询、插入、更新和删除等操作。
1.1 下载依赖
在Go语言中操作MySQL,首先需要安装MySQL驱动。常用的驱动是go-sql-driver/mysql
,可以通过以下命令安装:
bash
go get -u github.com/go-sql-driver/mysql
1.2 初始化连接
使用database/sql
包和MySQL驱动初始化数据库连接。以下是一个简单的连接示例:
go
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 数据库连接字符串
dsn := "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal("Failed to open database:", err)
}
defer db.Close()
// 测试连接是否成功
err = db.Ping()
if err != nil {
log.Fatal("Failed to connect to database:", err)
}
fmt.Println("Successfully connected to MySQL database!")
}
1.3 连接池配置
为了提高性能,可以配置数据库连接池:
go
db.SetMaxOpenConns(10) // 设置最大打开的连接数
db.SetMaxIdleConns(5) // 设置最大空闲连接数
二、MySQL的CRUD操作
2.1 建库建表
在操作数据之前,首先需要创建数据库和表。以下是建表SQL语句示例:
sql
CREATE DATABASE IF NOT EXISTS testdb;
USE testdb;
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2.2 插入数据
使用Exec
方法插入数据:
go
func insertUser(db *sql.DB, name string, age int) error {
query := "INSERT INTO users (name, age) VALUES (?, ?)"
_, err := db.Exec(query, name, age)
if err != nil {
return err
}
fmt.Println("User inserted successfully!")
return nil
}
调用示例:
go
err := insertUser(db, "Alice", 25)
if err != nil {
log.Fatal("Failed to insert user:", err)
}
2.3 查询数据
使用Query
方法查询数据:
go
func queryUsers(db *sql.DB) error {
query := "SELECT id, name, age FROM users"
rows, err := db.Query(query)
if err != nil {
return err
}
defer rows.Close()
fmt.Println("Users:")
for rows.Next() {
var id int
var name string
var age int
if err := rows.Scan(&id, &name, &age); err != nil {
return err
}
fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age)
}
return nil
}
调用示例:
go
err := queryUsers(db)
if err != nil {
log.Fatal("Failed to query users:", err)
}
2.4 更新数据
使用Exec
方法更新数据:
go
func updateUser(db *sql.DB, id int, newName string, newAge int) error {
query := "UPDATE users SET name = ?, age = ? WHERE id = ?"
_, err := db.Exec(query, newName, newAge, id)
if err != nil {
return err
}
fmt.Println("User updated successfully!")
return nil
}
调用示例:
go
err := updateUser(db, 1, "Bob", 30)
if err != nil {
log.Fatal("Failed to update user:", err)
}
2.5 删除数据
使用Exec
方法删除数据:
go
func deleteUser(db *sql.DB, id int) error {
query := "DELETE FROM users WHERE id = ?"
_, err := db.Exec(query, id)
if err != nil {
return err
}
fmt.Println("User deleted successfully!")
return nil
}
调用示例:
go
err := deleteUser(db, 1)
if err != nil {
log.Fatal("Failed to delete user:", err)
}
三、完整代码案例
以下是一个完整的Go语言操作MySQL的示例代码,包含连接、插入、查询、更新和删除操作:
go
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
dsn := "username:password@tcp(127.0.0.1:3306)/testdb?charset=utf8mb4&parseTime=True&loc=Local"
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal("Failed to open database:", err)
}
defer db.Close()
err = db.Ping()
if err != nil {
log.Fatal("Failed to connect to database:", err)
}
fmt.Println("Successfully connected to MySQL database!")
// 插入数据
err = insertUser(db, "Alice", 25)
if err != nil {
log.Fatal("Failed to insert user:", err)
}
// 查询数据
err = queryUsers(db)
if err != nil {
log.Fatal("Failed to query users:", err)
}
// 更新数据
err = updateUser(db, 1, "Bob", 30)
if err != nil {
log.Fatal("Failed to update user:", err)
}
// 查询更新后的数据
err = queryUsers(db)
if err != nil {
log.Fatal("Failed to query users:", err)
}
// 删除数据
err = deleteUser(db, 1)
if err != nil {
log.Fatal("Failed to delete user:", err)
}
// 查询删除后的数据
err = queryUsers(db)
if err != nil {
log.Fatal("Failed to query users:", err)
}
}
func insertUser(db *sql.DB, name string, age int) error {
query := "INSERT INTO users (name, age) VALUES (?, ?)"
_, err := db.Exec(query, name, age)
if err != nil {
return err
}
fmt.Println("User inserted successfully!")
return nil
}
func queryUsers(db *sql.DB) error {
query := "SELECT id, name, age FROM users"
rows, err := db.Query(query)
if err != nil {
return err
}
defer rows.Close()
fmt.Println("Users:")
for rows.Next() {
var id int
var name string
var age int
if err := rows.Scan(&id, &name, &age); err != nil {
return err
}
fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age)
}
return nil
}
func updateUser(db *sql.DB, id int, newName string, newAge int) error {
query := "UPDATE users SET name = ?, age = ? WHERE id = ?"
_, err := db.Exec(query, newName, newAge, id)
if err != nil {
return err
}
fmt.Println("User updated successfully!")
return nil
}
func deleteUser(db *sql.DB, id int) error {
query := "DELETE FROM users WHERE id = ?"
_, err := db.Exec(query, id)
if err != nil {
return err
}
fmt.Println("User deleted successfully!")
return nil
}
总结 :Go语言通过database/sql
包和MySQL驱动,提供了强大的数据库操作能力。本文详细介绍了MySQL的连接、插入、查询、更新和删除操作,并提供了完整的代码示例。