Go语言操作MySQL数据库,有哪些高效且实用的方法与技巧?
- 前端开发
- 2026-01-14
- 6
在Go语言中操作MySQL数据库,通常我们会使用一些第三方库,如gosqldriver/mysql,以下是一个详细的操作MySQL数据库的方法:
安装MySQL驱动
你需要安装gosqldriver/mysql,可以通过以下命令进行安装:
连接MySQL数据库
以下是一个连接MySQL数据库的示例代码:
package main import ( "database/sql" "fmt" "log" _ "github.com/gosqldriver/mysql" ) func main() { // 连接字符串格式:用户名:密码@tcp(主机:端口)/数据库名?charset=utf8mb4 dsn := "root:password@tcp(127.0.0.1:3306)/testdb?charset=utf8mb4" 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 successfully") }
执行SQL语句
以下是一些执行SQL语句的示例:

1 查询
rows, err := db.Query("SELECT * FROM users") if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var user User if err := rows.Scan(&user.ID, &user.Name, &user.Age); err != nil { log.Fatal(err) } fmt.Printf("User: %s, Age: %dn", user.Name, user.Age) }
2 插入
stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES(?, ?)") if err != nil { log.Fatal(err) } defer stmt.Close() _, err = stmt.Exec("Alice", 25) if err != nil { log.Fatal(err) }
3 更新
_, err = db.Exec("UPDATE users SET age = ? WHERE name = ?", 26, "Alice") if err != nil { log.Fatal(err) }
4 删除
_, err = db.Exec("DELETE FROM users WHERE name = ?", "Alice") if err != nil { log.Fatal(err) }
事务处理
以下是一个事务处理的示例:
tx, err := db.Begin() if err != nil { log.Fatal(err) } _, err = tx.Exec("INSERT INTO users(name, age) VALUES(?, ?)", "Bob", 30) if err != nil { tx.Rollback() log.Fatal(err) } _, err = tx.Exec("UPDATE users SET age = ? WHERE name = ?", 31, "Bob") if err != nil { tx.Rollback() log.Fatal(err) } err = tx.Commit() if err != nil { log.Fatal(err) }
FAQs
Q1:如何处理MySQL数据库连接池?

A1:gosqldriver/mysql默认支持连接池,你可以通过SetMaxOpenConns和SetMaxIdleConns方法来配置连接池。
Q2:如何处理SQL载入攻破?
A2:使用预处理语句(Prepare和Exec)可以有效地防止SQL载入攻破。
国内文献权威来源
- 《Go语言编程》 作者:程杰、张亮
- 《MySQL必知必会》 作者:Ben Forta
