Go语言操作MySql数据库

       go-sql-driver/mysql库是Go语言官方推荐的MySQL驱动库,可以很方便地实现对MySQL数据库的连接和操作。本文记录以下使用go-sql-driver/mysql数据库驱动来操作mysql数据库。

目录

1.安装驱动程序

2.导入驱动包

3.操作数据库

3.1 获取mysql版本

3.2 创建表

3.3 表中插入数据

3.4 表中删除数据

3.5 修改表中数据

3.6 查询表中数据

3.7 删除表

4.综合演示


1.安装驱动程序

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

2.导入驱动包

_ "github.com/go-sql-driver/mysql"
说明:当导入带有空白标识符前缀 _ 的包时,将调用包的 init 函数。该函数注册驱动程序

3.操作数据库

3.1 获取mysql版本

func showMysqlVersion() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")db.Ping()defer db.Close()if err != nil {fmt.Println("数据库连接失败!")log.Fatalln(err)}var version stringerr2 := db.QueryRow("SELECT VERSION()").Scan(&version)if err2 != nil {log.Fatal(err2)}fmt.Println(version)
}

3.2 创建表

func createTable() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB")db.Ping()defer db.Close()if err != nil {fmt.Println("connect DB error !")log.Fatalln(err)}_, err2 := db.Exec("CREATE TABLE user(id INT NOT NULL , name VARCHAR(20), PRIMARY KEY(ID));")if err2 != nil {log.Fatal(err2)}fmt.Println("successfully create table")
}


3.3 表中插入数据

func insertItem() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")db.Ping()defer db.Close()if err != nil {fmt.Println("connect DB error !")log.Fatalln(err)}_, err2 := db.Query("INSERT INTO user VALUES(1, 'zhangsan')")if err2 != nil {log.Fatal(err2)}fmt.Println("successfully insert item")
}


3.4 表中删除数据

func deleteItem() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")db.Ping()defer db.Close()if err != nil {fmt.Println("connect DB error !")log.Fatalln(err)}sql := "DELETE FROM user WHERE id = 1"res, err2 := db.Exec(sql)if err2 != nil {panic(err2.Error())}affectedRows, err := res.RowsAffected()if err != nil {log.Fatal(err)}fmt.Printf("delete item success, statement affected %d rows\n", affectedRows)
}

3.5 修改表中数据

func alterItem() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")db.Ping()defer db.Close()if err != nil {fmt.Println("connect DB error !")log.Fatalln(err)}sql := "update user set name = ? WHERE id = ?"res, err2 := db.Exec(sql, "lisi", 1)if err2 != nil {panic(err2.Error())}affectedRows, err := res.RowsAffected()if err != nil {log.Fatal(err)}fmt.Printf("alter item success, statement affected %d rows\n", affectedRows)
}

3.6 查询表中数据

func queryItem() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")db.Ping()defer db.Close()if err != nil {fmt.Println("connect DB error !")log.Fatalln(err)}var mid int = 1result, err2 := db.Query("SELECT * FROM user WHERE id = ?", mid)if err2 != nil {log.Fatal(err2)}for result.Next() {var id intvar name stringerr = result.Scan(&id, &name)if err != nil {log.Fatal(err)}fmt.Printf("id: %d, name: %s\n", id, name)}
}

3.7 删除表

func dropTable() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB")db.Ping()defer db.Close()if err != nil {fmt.Println("connect DB error !")log.Fatalln(err)}_, err2 := db.Exec("DROP TABLE user;")if err2 != nil {log.Fatal(err2)}fmt.Println("successfully drop table")
}


4.综合演示


完整代码如下:

package mainimport ("database/sql""fmt""log"_ "github.com/go-sql-driver/mysql"
)func showMysqlVersion() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")db.Ping()defer db.Close()if err != nil {fmt.Println("数据库连接失败!")log.Fatalln(err)}var version stringerr2 := db.QueryRow("SELECT VERSION()").Scan(&version)if err2 != nil {log.Fatal(err2)}fmt.Println(version)
}func createTable() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB")db.Ping()defer db.Close()if err != nil {fmt.Println("connect DB error !")log.Fatalln(err)}_, err2 := db.Exec("CREATE TABLE user(id INT NOT NULL , name VARCHAR(20), PRIMARY KEY(ID));")if err2 != nil {log.Fatal(err2)}fmt.Println("successfully create table")
}func insertItem() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")db.Ping()defer db.Close()if err != nil {fmt.Println("connect DB error !")log.Fatalln(err)}_, err2 := db.Query("INSERT INTO user VALUES(1, 'zhangsan')")if err2 != nil {log.Fatal(err2)}fmt.Println("successfully insert item")
}func deleteItem() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")db.Ping()defer db.Close()if err != nil {fmt.Println("connect DB error !")log.Fatalln(err)}sql := "DELETE FROM user WHERE id = 1"res, err2 := db.Exec(sql)if err2 != nil {panic(err2.Error())}affectedRows, err := res.RowsAffected()if err != nil {log.Fatal(err)}fmt.Printf("delete item success, statement affected %d rows\n", affectedRows)
}func alterItem() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")db.Ping()defer db.Close()if err != nil {fmt.Println("connect DB error !")log.Fatalln(err)}sql := "update user set name = ? WHERE id = ?"res, err2 := db.Exec(sql, "lisi", 1)if err2 != nil {panic(err2.Error())}affectedRows, err := res.RowsAffected()if err != nil {log.Fatal(err)}fmt.Printf("alter item success, statement affected %d rows\n", affectedRows)
}func queryItem() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")db.Ping()defer db.Close()if err != nil {fmt.Println("connect DB error !")log.Fatalln(err)}var mid int = 1result, err2 := db.Query("SELECT * FROM user WHERE id = ?", mid)if err2 != nil {log.Fatal(err2)}for result.Next() {var id intvar name stringerr = result.Scan(&id, &name)if err != nil {log.Fatal(err)}fmt.Printf("id: %d, name: %s\n", id, name)}
}func dropTable() {db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB")db.Ping()defer db.Close()if err != nil {fmt.Println("connect DB error !")log.Fatalln(err)}_, err2 := db.Exec("DROP TABLE user;")if err2 != nil {log.Fatal(err2)}fmt.Println("successfully drop table")
}func main() {showMysqlVersion()createTable()insertItem()queryItem()alterItem()queryItem()deleteItem()dropTable()
}

运行效果:
go mod init mysql-test.go 
go build mysql-test.go 
./mysql-test 

 代码结构:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/9494.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中介者模式的学习与使用

1、中介者模式的学习 中介者模式是一种行为型设计模式,它通过引入一个中介者对象来解耦一组对象之间的交互。中介者模式促进了对象之间的松耦合,使得它们可以独立地进行通信,而不需要直接相互引用。   在中介者模式中,有以下几个…

rabbitMq怎么查看队列消息-Tracing日志

Trace 是Rabbitmq用于记录每一次发送的消息,方便使用Rabbitmq的开发者调试、排错。 1、启动Tracing插件 在RabbitMQ中默认是关闭的,需手动开启。此处rabbitMQ是使用docker部署的 ## 进入rabbitMq中 docker exec -it rabbitmq1 bash ## 启动日志插件 rabb…

设计模式篇---建造者模式

文章目录 概念结构实例总结 概念 建造者模式的定义:将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示。 这么看起来有点难以理解,翻译一下就是 用户无需关注创建复杂对象的过程,只需要指定创建的对象即…

多元回归预测 | Matlab基于粒子群算法优化深度置信网络(PSO-DBN)的数据回归预测,matlab代码回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab基于基于粒子群算法优化深度置信网络(PSO-DBN)的数据回归预测,matlab代码回归预测,多变量输入模型,多变量输入模型 评价

计算机网络_ 1.3 网络核心(数据交换_电路交换_多路复用)

计算机网络_数据交换_电路交换_多路复用 多路复用频分多路复用FDM时分多路复用TDM波分多路复用WDM码分多路复用CDM 多路复用 多路复用(Multiplexing),简称复用,是通信技术的基本概念。 链路/网络资源(如带宽&#x…

浅谈数据中心机房动环监控系统可视化设计与研究

安科瑞电气股份有限公司 上海嘉定 201801 摘要:为了维护好数据中心机房动力环境,及时发现隐患和排除故障,降低管理成本控制能耗,提高运维效率,保障数据中心安全、高效、环保、稳定的运行,针对目前机房管理…

云原生(第四篇)-k8s yaml文件

Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式:主要用于 api 接口之间消息的传递 YAML 格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读 YAML 语法格式: ●大小写敏…

mysql redis区别

一、.redis和mysql的区别总结 (1)类型上 从类型上来说,mysql是关系型数据库,redis是缓存数据库 (2)作用上 mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢 redis用于存储使…

RabbitMQ的基本概念和七种队列模式

I. RabbitMQ的基本概念 1. 生产者/消费者 生产者(Producer) 消息的创建者。 负责创建和推送数据到消息服务器。 消费者(Consumer) 消息的接收方。 负责接收消息和处理数据。 2. 消息队列(Queue) 消息队列是RabbitMQ的内部对象,用于存储生产者的消息直到发送给消…

[SSM]MyBatis常用技巧和参数处理

目录 八、MyBatis小技巧 8.1#{}和${} 8.2别名机制:typeAliases 8.3mappers ​编辑 8.4IDEA配置文件模板 8.5插入数据时获取自动生成的主键 九、MyBatis参数处理 9.1单个简单参数类型 9.2Map参数 9.3实体类参数 9.4多参数 9.5Param注解(命名…

封装一个类似微信通讯录带有字母检索功能的vue组件

这里我们直接使用scrollIntoView方法 该方法将调用它的元素滚动到浏览器窗口的可见区域 语法 element.scrollIntoView(); // 等同于element.scrollIntoView(true) element.scrollIntoView(alignToTop); //布尔参数 element.scro…