• go语言初学03 连接mysql


    使用 Go 语言连接 MySQL 数据库通常涉及几步简单的配置和编程。以下是详细的步骤,帮助你从安装依赖到进行基本的数据库操作。

    1. 安装 MySQL 数据库驱动

    首先,你需要安装 MySQL 数据库驱动。推荐使用 go-sql-driver/mysql,这是一个流行且被广泛使用的 MySQL 驱动。

    安装驱动:

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

    2. 创建并配置数据库

    确保你已经在 MySQL 中创建了数据库,并且有一个可以用来连接的账户。

    1. CREATE DATABASE mydb;
    2. CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
    3. GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
    4. FLUSH PRIVILEGES;

    3. 在 Go 项目中连接到 MySQL

    编写一个简单的 Go 程序来连接 MySQL 数据库,并进行基本的数据库操作(如创建表、插入数据、查询数据)。

    main.go:

    1. package main
    2. import (
    3. "database/sql"
    4. "fmt"
    5. _ "github.com/go-sql-driver/mysql"
    6. )
    7. func main() {
    8. // 数据库连接字符串
    9. dataSourceName := "myuser:mypassword@tcp(127.0.0.1:3306)/mydb"
    10. // 打开数据库连接
    11. db, err := sql.Open("mysql", dataSourceName)
    12. if err != nil {
    13. fmt.Println("Error connecting to database:", err)
    14. return
    15. }
    16. defer db.Close()
    17. // 测试连接
    18. err = db.Ping()
    19. if err != nil {
    20. fmt.Println("Error pinging to database:", err)
    21. return
    22. }
    23. fmt.Println("Connected to MySQL database!")
    24. // 创建表
    25. createTable := `
    26. CREATE TABLE IF NOT EXISTS users (
    27. id INT AUTO_INCREMENT,
    28. name VARCHAR(50) NOT NULL,
    29. age INT NOT NULL,
    30. PRIMARY KEY (id)
    31. );`
    32. _, err = db.Exec(createTable)
    33. if err != nil {
    34. fmt.Println("Error creating table:", err)
    35. return
    36. }
    37. fmt.Println("Table created or already exists.")
    38. // 插入数据
    39. insertUser := "INSERT INTO users (name, age) VALUES (?, ?);"
    40. result, err := db.Exec(insertUser, "John Doe", 30)
    41. if err != nil {
    42. fmt.Println("Error inserting data:", err)
    43. return
    44. }
    45. userId, err := result.LastInsertId()
    46. if err != nil {
    47. fmt.Println("Error getting last insert ID:", err)
    48. return
    49. }
    50. fmt.Printf("User inserted with ID: %d\n", userId)
    51. // 查询数据
    52. query := "SELECT id, name, age FROM users;"
    53. rows, err := db.Query(query)
    54. if err != nil {
    55. fmt.Println("Error querying data:", err)
    56. return
    57. }
    58. defer rows.Close()
    59. fmt.Println("Users:")
    60. for rows.Next() {
    61. var id int
    62. var name string
    63. var age int
    64. err := rows.Scan(&id, &name, &age)
    65. if err != nil {
    66. fmt.Println("Error scanning row:", err)
    67. return
    68. }
    69. fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age)
    70. }
    71. if err = rows.Err(); err != nil {
    72. fmt.Println("Error in row iteration:", err)
    73. }
    74. }

    4. 运行程序

    保存文件并运行程序:

    go run main.go

    解释代码

    • 导入包

      • "database/sql" 包用于数据库交互。
      • _ "github.com/go-sql-driver/mysql" 实际包含了 MySQL 驱动,_ 表示只导入包但不直接使用其内容。
    • 数据库连接字符串

      • myuser:mypassword@tcp(127.0.0.1:3306)/mydb 包含用户名、密码、主机地址、端口和数据库名称。
    • 打开数据库连接

      • 使用 sql.Open 打开与数据库的连接,返回一个 *sql.DB 类型的数据库句柄。
    • 测试连接

      • 使用 db.Ping 测试与数据库的连接。
    • 创建表

      • 使用 db.Exec 执行 SQL 语句来创建表。
    • 插入数据

      • 使用 db.Exec 执行插入数据的 SQL 语句,并获取插入数据的 ID。
    • 查询数据

      • 使用 db.Query 查询数据,并使用 rows.Next 迭代查询结果,使用 rows.Scan 将结果扫描到变量中。

    进阶操作

    • 预处理语句:可以使用 db.Prepare 预处理 SQL 语句,提高效率。
    • 事务处理:可以使用 db.Begin 开始事务,提高数据一致性。
    • 连接池配置:可以设置 *sql.DB 的连接池参数,例如 db.SetMaxOpenConnsdb.SetMaxIdleConnsdb.SetConnMaxLifetime

    如果你有更多的需求或者遇到任何问题,请随时告诉我!

  • 相关阅读:
    SSM框架速成——mybatis速成总结
    Python基本数据类型简介(一)——数字类型简介
    Docker安装redis
    Android使用ProtoBuf 适配 gradle7.5 gradle8.0
    预训练模型之ELMO -《Deep contextualized word representations》论文笔记 + 高频面试题
    软件测试-朋友圈的点赞功能怎么测?
    分段函数线性化
    解决js加减乘除精度丢失问题
    通过docker快速部署RabbitMq
    基于SSM的流浪动物领养信息系统设计与实现
  • 原文地址:https://blog.csdn.net/a309450028a/article/details/139316932