golang 操作mysql(增删查改)

叁歲伎倆 2022-05-30 04:10 390阅读 0赞

相关文档:

  • package sql 文档
  • go-database-sql 文档

假设test数据库中的user表中存在已下数据

  1. mysql> select * from user; +----+--------+------+
  2. | id | name | age | +----+--------+------+
  3. | 1 | tab | 18 |
  4. | 2 | tanggu | 27 |
  5. | 4 | python | 27 | +----+--------+------+
  6. 3 rows in set (0.00 sec)

golang mysql驱动安装

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

现我们通过golangdatabase/sql库操作表数据

  1. package main
  2. import (
  3. "fmt"
  4. "database/sql"
  5. "log"
  6. _ "github.com/go-sql-driver/mysql"
  7. )
  8. // 获取表数据
  9. func Get(db *sql.DB) {
  10. rows, err := db.Query("select * from user;")
  11. if err != nil {
  12. log.Fatal(err)
  13. }
  14. defer rows.Close()
  15. cloumns, err := rows.Columns()
  16. if err != nil {
  17. log.Fatal(err)
  18. }
  19. // for rows.Next() {
  20. // err := rows.Scan(&cloumns[0], &cloumns[1], &cloumns[2])
  21. // if err != nil {
  22. // log.Fatal(err)
  23. // }
  24. // fmt.Println(cloumns[0], cloumns[1], cloumns[2])
  25. // }
  26. values := make([]sql.RawBytes, len(cloumns))
  27. scanArgs := make([]interface{}, len(values))
  28. for i := range values {
  29. scanArgs[i] = &values[i]
  30. }
  31. for rows.Next() {
  32. err = rows.Scan(scanArgs...)
  33. if err != nil {
  34. log.Fatal(err)
  35. }
  36. var value string
  37. for i, col := range values {
  38. if col == nil {
  39. value = "NULL"
  40. } else {
  41. value = string(col)
  42. }
  43. fmt.Println(cloumns[i], ": ", value)
  44. }
  45. fmt.Println("------------------")
  46. }
  47. if err = rows.Err(); err != nil {
  48. log.Fatal(err)
  49. }
  50. }
  51. // 插入数据
  52. func Insert(db *sql.DB) {
  53. stmt, err := db.Prepare("INSERT INTO user(name, age) VALUES(?, ?);")
  54. if err != nil {
  55. log.Fatal(err)
  56. }
  57. res, err := stmt.Exec("python", 19)
  58. if err != nil {
  59. log.Fatal(err)
  60. }
  61. lastId, err := res.LastInsertId()
  62. if err != nil {
  63. log.Fatal(err)
  64. }
  65. rowCnt, err := res.RowsAffected()
  66. if err != nil {
  67. log.Fatal(err)
  68. }
  69. fmt.Printf("ID=%d, affected=%d\n", lastId, rowCnt)
  70. }
  71. // 删除数据
  72. func Delete(db *sql.DB) {
  73. stmt, err := db.Prepare("DELETE FROM user WHERE name='python'")
  74. if err != nil {
  75. log.Fatal(err)
  76. }
  77. res, err := stmt.Exec()
  78. lastId, err := res.LastInsertId()
  79. if err != nil {
  80. log.Fatal(err)
  81. }
  82. rowCnt, err := res.RowsAffected()
  83. if err != nil {
  84. log.Fatal(err)
  85. }
  86. fmt.Printf("ID=%d, affected=%d\n", lastId, rowCnt)
  87. }
  88. // 更新数据
  89. func Update(db *sql.DB) {
  90. stmt, err := db.Prepare("UPDATE user SET age=27 WHERE name='python'")
  91. if err != nil {
  92. log.Fatal(err)
  93. }
  94. res, err := stmt.Exec()
  95. lastId, err := res.LastInsertId()
  96. if err != nil {
  97. log.Fatal(err)
  98. }
  99. rowCnt, err := res.RowsAffected()
  100. if err != nil {
  101. log.Fatal(err)
  102. }
  103. fmt.Printf("ID=%d, affected=%d\n", lastId, rowCnt)
  104. }
  105. func main() {
  106. // username: root; password: 123456; database: test
  107. db, err := sql.Open("mysql", "root:123456@/test")
  108. if err != nil {
  109. log.Fatal(err)
  110. }
  111. defer db.Close()
  112. // Insert(db)
  113. // Update(db)
  114. // Delete(db)
  115. Get(db)
  116. }

发表评论

表情:
评论列表 (有 0 条评论,390人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL 增删

    MySQL 增删改查 虽然经常对数据库进行操作,但有时候一些sql语句还是会忘记,因此总结一下,方便记忆。 一 对库操作 1 创建数据库 > create dat