go如何使用SQLX操作MySQL数据库?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: sqlx是Go语言中一款流行的第三方数据库操作包,它扩展了Go标准库`database/sql`的功能,极大地简化了数据库操作流程并提供了丰富的数据库交互方法。

前言

sqlx 是 Go 语言中一个流行的操作数据库的第三方包,它提供了对 Go 标准库 database/sql 的扩展,简化了操作数据库的步骤,并且拥有很大的数据库交互方法,本文使用mysql

sqlx使用

(1)下载sqlx包

使用以下命令下载sqlx

arduino

代码解读

复制代码

 go get github.com/jmoiron/sqlx
 

安装数据库驱动依赖

go

代码解读

复制代码

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

(2)引入驱动

arduino

代码解读

复制代码

_ "github.com/go-sql-driver/mysql"

(3)连接数据库说明

其连接数据库使用

ini

代码解读

复制代码

user:password@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True

其中user为数据库用户,password为数据库密码

(4)连接数据库代操作

go

代码解读

复制代码


package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
)


var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("连接数据库异常:", err)
		return
	}
	db = mysqlDb
}

(5)插入数据

创建数据库表位student

sql

代码解读

复制代码


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `mobile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `sex` int(11) NULL DEFAULT NULL,
  `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1690290594064429066 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

插入数据代码为:

go

代码解读

复制代码

package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
)

var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("连接数据库异常:", err)
		return
	}
	db = mysqlDb
	r, err1 := db.Exec("insert into user(mobile, password, sex, user_name)values(?, ?, ?, ?)", "aaa", "123456", 1, "aaa")
	if err1 != nil {
		fmt.Println("数据插入异常, ", err1)
		return
	}
	id, err2 := r.LastInsertId()
	if err2 != nil {
		fmt.Println("获取id异常:, ", err2)
		return
	}

	fmt.Println("id为:", id)
}


(6)查询数据

go

代码解读

复制代码

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
)

type User struct {
	Id       int64          `db:"id"`
	Name     string         `db:"user_name"`
	Sex      int            `db:"sex"`
	Mobile   string         `db:"mobile"`
	Password sql.NullString `db:"password"`
}

var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("连接数据库异常:", err)
		return
	}
	db = mysqlDb
	var user []User
	err1 := db.Select(&user, "select id, user_name, sex, mobile, password from user where id=?", 1690290594064429065)
	if err1 != nil {
		fmt.Println("查询异常, ", err1)
		return
	}

	fmt.Println("查询数据为:", user)
}

之所以password使用类型sql.NullString,是因为如果列为null的话,会报错,所以其会返回

遍历false去判断

(7)更新数据

go

代码解读

复制代码

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
)

type User struct {
	Id       int64          `db:"id"`
	Name     string         `db:"user_name"`
	Sex      int            `db:"sex"`
	Mobile   string         `db:"mobile"`
	Password sql.NullString `db:"password"`
}

var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("连接数据库异常:", err)
		return
	}
	db = mysqlDb
	res, err := db.Exec("update user set user_name=? where id=?", "hello11", 1690290594064429065)
	if err != nil {
		fmt.Println("更新失败:", err)
		return
	}
	row, err1 := res.RowsAffected()
	if err1 != nil {
		fmt.Println("获取失败, ", err1)
		return
	}
	fmt.Println("更新成功行数:", row)
}

(8)删除数据

go

代码解读

复制代码

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
)

type User struct {
	Id       int64          `db:"id"`
	Name     string         `db:"user_name"`
	Sex      int            `db:"sex"`
	Mobile   string         `db:"mobile"`
	Password sql.NullString `db:"password"`
}

var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("连接数据库异常:", err)
		return
	}
	db = mysqlDb
	res, err := db.Exec("delete from user where id=?", 1690290594064429065)
	if err != nil {
		fmt.Println("删除失败, ", err)
		return
	}

	row, err := res.RowsAffected()
	if err != nil {
		fmt.Println("删除行数为:", err)
		return
	}

	fmt.Println("删除行数为: ", row)
}

总结

go有很多优秀的操作数据库组件,都能提高开发效率,至于在开发中怎么选择组件,看个人开发效率和习惯


转载来源:https://juejin.cn/post/7302245728482263074

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 关系型数据库 MySQL
GO操作Mysql数据库
GO操作Mysql数据库
88 1
|
关系型数据库 MySQL Go
Go 语言入门很简单:Go 语言中操作 MySQL 数据库(上)
在上一篇文章中,我们成功连接了 MySQL 数据库,并成功打印出 MySQL 的版本号,本篇文章就来介绍如何使用 Go 语言操作数据库。
|
SQL 关系型数据库 MySQL
Go 语言入门很简单:Go 语言中操作 MySQL 数据库(下)
在上一篇文章中,我们成功连接了 MySQL 数据库,并成功打印出 MySQL 的版本号,本篇文章就来介绍如何使用 Go 语言操作数据库。
|
SQL Go 数据库
Go实战--go语言操作sqlite数据库(The way to go)
Go实战--go语言操作sqlite数据库(The way to go) 生命不止,继续 go go go !!! 继续与大家分享,go语言的实战,今天介绍的是如何操作sqlite数据库。
2659 0
|
7月前
|
SQL 关系型数据库 MySQL
【go笔记】使用sqlx操作MySQL
【go笔记】使用sqlx操作MySQL
|
SQL 存储 关系型数据库
Go 语言入门很简单:如何在 Go 语言中使用 MySQL
MySQL 是一个基于结构化查询语言(SQL)的开源关系数据库管理系统。它是一种关系数据库,可将数据组织到一个或多个表中,其中数据相互关联。MySQL 是行业领先的开源数据库管理系统。它是一个多用户、多线程的数据库管理系统。
|
NoSQL Go Redis
【Go开发】go-redis快速入门
【Go开发】go-redis快速入门
146 0
|
Java 程序员 编译器
Go 语法要求和注意事项 | 学习笔记
快速学习 Go 语法要求和注意事项
Go 语法要求和注意事项 | 学习笔记
|
10月前
|
NoSQL Shell Go
在go中简单使用go-redis库
在go中简单使用go-redis库
|
10月前
|
存储 NoSQL 安全
go 连接mongodb执行查询的代码
在Go语言中,你可以使用官方的MongoDB驱动程序 `"go.mongodb.org/mongo-driver/mongo"` 来连接MongoDB并执行查询。以下是一个简单的示例代码,演示如何连接MongoDB并执行查询: 首先,确保你已经安装了MongoDB驱动程序: ```bash go get go.mongodb.org/mongo-driver/mongo ``` 然后,可以使用以下示例代码: ```go package main import ( "context" "fmt" "log" "time" "go.mongodb.org/mongo-driv
148 0