Go连接mysql数据库,以及简单实现增删改查

梦里梦外; 2022-12-20 11:15 367阅读 0赞

前言:在看本章之前,需要安装了Mysql,同时也要Go的环境,这里我已经默认你都配置好了。

目录

安装依赖

Go连接Mysql示例

Go语言实现Mysql增删改查

增样例代码:

删样例代码:

改样例代码:

查样例代码:


安装依赖

Go语言官方没有实现Mysql的数据库驱动,database/sql包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的数据库驱动。本文章实用的数据库驱动是Go Mysql Driver。

安装依赖code

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

Go连接Mysql示例

  1. package main
  2. import (
  3. "database/sql"
  4. "fmt"
  5. _ "github.com/go-sql-driver/mysql" //导入包但不使用,init()
  6. )
  7. //Go连接Mysql示例
  8. func main() {
  9. //数据库
  10. //用户名:密码啊@tcp(ip:端口)/数据库的名字
  11. dsn := "root:123@tcp(127.0.0.1:3306)/test"
  12. //连接数据集
  13. db, err := sql.Open("mysql", dsn) //open不会检验用户名和密码
  14. if err != nil {
  15. fmt.Printf("dsn:%s invalid,err:%v\n", dsn, err)
  16. return
  17. }
  18. err = db.Ping() //尝试连接数据库
  19. if err != nil {
  20. fmt.Printf("open %s faild,err:%v\n", dsn, err)
  21. return
  22. }
  23. fmt.Println("连接数据库成功~")
  24. }

运行后成功后会如下显示:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21lbW9yeV9xaWFueGlhbw_size_16_color_FFFFFF_t_70

出现上面的图显示的连接数据库成功,就没问题~接下来对示例代码解析一下。

import 一次性导入三个包,其中 “database/sql”是操作sql数据库的官方接口。 _ “github.com/go-sql-driver/mysql”表示导入安装的依赖,Mysql数据库驱动,,前面加一个下划线,表示导入包但是不使用,相当于init()初始化。

dsn:连接Mysql的信息,格式是用户名:密码啊@tcp(ip:端口)/数据库的名字,例如:

  1. dsn := "root:123@tcp(127.0.0.1:3306)/test"

用户:root,密码:123 ,连接Mysql 的IP地址:127.0.0.1 ,端口:3306 ,连接数据库的名字:test

Go语言实现Mysql增删改查

建表:实现增删改查,首先Mysq中得创建一个数据库,再得创建一个表。建表实例代码如下:

  1. CREATE TABLE `user`(
  2. `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  3. `name` VARCHAR(20) DEFAULT '',
  4. `age` INT(11) DEFAULT '0',
  5. PRIMARY KEY (`id`)
  6. )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

Mysql创建一个user表,里面有三个字段,id,那么,age,其中id作为主键,引擎是InnoDB。建表成功后如下

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21lbW9yeV9xaWFueGlhbw_size_16_color_FFFFFF_t_70 1

增样例代码:

  1. package main
  2. import (
  3. "database/sql"
  4. "fmt"
  5. _ "github.com/go-sql-driver/mysql" //导入包但不使用,init()
  6. )
  7. var db *sql.DB //连接池对象
  8. func initDB() (err error) {
  9. //数据库
  10. //用户名:密码啊@tcp(ip:端口)/数据库的名字
  11. dsn := "root:123@tcp(127.0.0.1:3306)/test"
  12. //连接数据集
  13. db, err = sql.Open("mysql", dsn) //open不会检验用户名和密码
  14. if err != nil {
  15. return
  16. }
  17. err = db.Ping() //尝试连接数据库
  18. if err != nil {
  19. return
  20. }
  21. fmt.Println("连接数据库成功~")
  22. //设置数据库连接池的最大连接数
  23. db.SetMaxIdleConns(10)
  24. return
  25. }
  26. func insert() {
  27. sqlStr := `insert into user(name,age) values("加油呀",28)`//sql语句
  28. ret, err := db.Exec(sqlStr)//执行sql语句
  29. if err != nil {
  30. fmt.Printf("insert failed,err:%v\n", err)
  31. return
  32. }
  33. //如果是插入数据的操作,能够拿到插入数据的id
  34. id, err := ret.LastInsertId()
  35. if err != nil {
  36. fmt.Printf("get id failed,err:%v\n", err)
  37. return
  38. }
  39. fmt.Println("id", id)
  40. }
  41. //Go连接Mysql示例
  42. func main() {
  43. err := initDB()
  44. if err != nil {
  45. fmt.Printf("init DB failed,err%v\n", err)
  46. }
  47. //插入数据
  48. insert()
  49. }

删样例代码:

  1. package main
  2. import (
  3. "database/sql"
  4. "fmt"
  5. _ "github.com/go-sql-driver/mysql" //导入包但不使用,init()
  6. )
  7. var db *sql.DB //连接池对象
  8. func initDB() (err error) {
  9. //数据库
  10. //用户名:密码啊@tcp(ip:端口)/数据库的名字
  11. dsn := "root:123@tcp(127.0.0.1:3306)/test"
  12. //连接数据集
  13. db, err = sql.Open("mysql", dsn) //open不会检验用户名和密码
  14. if err != nil {
  15. return
  16. }
  17. err = db.Ping() //尝试连接数据库
  18. if err != nil {
  19. return
  20. }
  21. fmt.Println("连接数据库成功~")
  22. //设置数据库连接池的最大连接数
  23. db.SetMaxIdleConns(10)
  24. return
  25. }
  26. func deleteRow(id int) {
  27. sqlStr := `delete from user where id=?`
  28. ret, err := db.Exec(sqlStr, id)
  29. if err != nil {
  30. fmt.Printf("delete faild,err:%v\n", err)
  31. return
  32. }
  33. n, _ := ret.RowsAffected()
  34. fmt.Printf("删除了%d行数据\n", n)
  35. }
  36. //Go连接Mysql示例
  37. func main() {
  38. err := initDB()
  39. if err != nil {
  40. fmt.Printf("init DB failed,err%v\n", err)
  41. }
  42. //删除数据
  43. deleteRow(1)
  44. }

改样例代码:

  1. package main
  2. import (
  3. "database/sql"
  4. "fmt"
  5. _ "github.com/go-sql-driver/mysql" //导入包但不使用,init()
  6. )
  7. var db *sql.DB //连接池对象
  8. func initDB() (err error) {
  9. //数据库
  10. //用户名:密码啊@tcp(ip:端口)/数据库的名字
  11. dsn := "root:123@tcp(127.0.0.1:3306)/test"
  12. //连接数据集
  13. db, err = sql.Open("mysql", dsn) //open不会检验用户名和密码
  14. if err != nil {
  15. return
  16. }
  17. err = db.Ping() //尝试连接数据库
  18. if err != nil {
  19. return
  20. }
  21. fmt.Println("连接数据库成功~")
  22. //设置数据库连接池的最大连接数
  23. db.SetMaxIdleConns(10)
  24. return
  25. }
  26. func updateRow(newAge int, id int) {
  27. sqlStr := `update user set age=? where id=?`
  28. ret, err := db.Exec(sqlStr, newAge, id)
  29. if err != nil {
  30. fmt.Printf("update failed ,err:%v\n", err)
  31. return
  32. }
  33. n, _ := ret.RowsAffected()
  34. fmt.Printf("更新了%d行数据\n", n)
  35. }
  36. //Go连接Mysql示例
  37. func main() {
  38. err := initDB()
  39. if err != nil {
  40. fmt.Printf("init DB failed,err%v\n", err)
  41. }
  42. //更新数据
  43. updateRow(20, 1)
  44. }

查样例代码:

  1. package main
  2. import (
  3. "database/sql"
  4. "fmt"
  5. _ "github.com/go-sql-driver/mysql" //导入包但不使用,init()
  6. )
  7. type user struct {
  8. id int
  9. name string
  10. age int
  11. }
  12. var db *sql.DB //连接池对象
  13. func initDB() (err error) {
  14. //数据库
  15. //用户名:密码啊@tcp(ip:端口)/数据库的名字
  16. dsn := "root:123@tcp(127.0.0.1:3306)/test"
  17. //连接数据集
  18. db, err = sql.Open("mysql", dsn) //open不会检验用户名和密码
  19. if err != nil {
  20. return
  21. }
  22. err = db.Ping() //尝试连接数据库
  23. if err != nil {
  24. return
  25. }
  26. fmt.Println("连接数据库成功~")
  27. //设置数据库连接池的最大连接数
  28. db.SetMaxIdleConns(10)
  29. return
  30. }
  31. func query(id int) {
  32. //1.查询单挑记录的sql语句 ?是参数
  33. sqlStr := "select id,name,age from user where id=?;"
  34. //2.执行
  35. rowObj := db.QueryRow(sqlStr, id) //从连接池里取一个连接出来去数据库查询单挑记录
  36. //3.拿到结果
  37. var u1 user
  38. rowObj.Scan(&u1.id, &u1.name, &u1.age)
  39. //打印结果
  40. fmt.Printf("u1:%#v\n", u1)
  41. }
  42. func queryMore(n int) {
  43. //1.sql语句
  44. sqlStr := "select id,name,age from user where id >?;"
  45. //2.执行
  46. rows, err := db.Query(sqlStr, n)
  47. if err != nil {
  48. fmt.Printf("%s query failed,err:%v\n", sqlStr, err)
  49. return
  50. }
  51. //3一定要关闭rows
  52. defer rows.Close()
  53. //4.循环取值
  54. for rows.Next() {
  55. var u1 user
  56. rows.Scan(&u1.id, &u1.name, &u1.age)
  57. fmt.Printf("u1:%#v\n", u1)
  58. }
  59. }
  60. //Go连接Mysql示例
  61. func main() {
  62. err := initDB()
  63. if err != nil {
  64. fmt.Printf("init DB failed,err%v\n", err)
  65. }
  66. //查询单行
  67. query(3)
  68. //查询多行
  69. queryMore(0)
  70. }

发表评论

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

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

相关阅读