Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自学go,也摆脱不了CRUD的日子

自学go,也摆脱不了CRUD的日子

原创
作者头像
叫我阿柒啊
修改于 2024-01-09 11:02:59
修改于 2024-01-09 11:02:59
4130
举报

前言

对于外部数据库的依赖,是每种高级编程语言绕不开的话题。像Java的JDBC、Python的pymysql,都为连接数据提供了良好的解决方案。初学go,当然也要去了解一下go是如何对MySQL的连接进行封装的。

数据表

在上一篇JDBC和ORM的文章中,建了一个people表。本着不浪费就浪费的原则,这里还是用这张表来做数据库的CURD操作。

people表里面一共三个字段:name、age、phone,共三条数据。如果是新搭建的数据库,记得要开启远程连接。

CRUD

同样,和Java、Python一样,想要连接数据库需要安装依赖(驱动)。go需要安装github.com/go-sql-driver/mysql模块。

代码语言:shell
AI代码解释
复制
go get github.com/go-sql-driver/mysql

这个就相当于JBDC中MySQL的Driver驱动。然后就开始进行CRUD操作。这里先看JDBC的流程图。

C(新增)

create,指向数据库中添加新的数据记录。在关系型数据库中,通过SQL的INSERT来实现。

代码语言:go
AI代码解释
复制
package main

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

func main() {
	// 设置数据库连接信息
	dsn := "root:password@tcp(175.27.xxx.xxx:3306)/test"

	// 连接数据库
	db, err := sql.Open("mysql", dsn)
	if err != nil {
		fmt.Println(err)
	}
	defer db.Close()

	// 检查数据库连接是否正常
	err = db.Ping()
	if err != nil {
		fmt.Println(err)
	}
    
 // 插入数据
 stmt, err := db.Prepare("INSERT INTO people(name, age, phone) VALUES(?, ?, ?)")
	if err != nil {
		fmt.Println(err)
	}
	defer stmt.Close()

	// 执行插入操作
	result, err := stmt.Exec("Jerry", 25, "12345678900")
	if err != nil {
		fmt.Println(err)
	}

	// 输出插入结果
	lastInsertID, err := result.LastInsertId()
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println("插入成功,新记录的ID为:", lastInsertID)
	
}

这个流程和JDBC如出一辙:

  1. 定义连接MySQL的连接串格式
  2. 通过sql.Open加载MySQL驱动,并创建一个连接(connection)
  3. 然后获取执行sql的对象(statement)来执行插入操作

运行程序,结果如下:

在people表中新增了一条Jerry的记录。

R(读取)

Read,指从数据库中检索数据记录。这是通过SQL的SELECT语句来实现的。可以从整个表中获取数据,也可以根据特定的条件来筛选数据。加载驱动、获取连接操作和Insert如出一辙,这里只需要替换成Select操作即可。

代码语言:go
AI代码解释
复制
 // 执行查询命令
	rows, err := db.Query("SELECT name, age, phone FROM people")
	if err != nil {
		fmt.Println(err)
	}
	defer rows.Close()

	// 遍历查询结果
	var (
		name string
		age  int
		phone string
	)
    
	for rows.Next() {
		err := rows.Scan(&name, &age, &phone)
		if err != nil {
			fmt.Println(err)
		}
		fmt.Println(name, age, phone)
	}

执行程序,全量查询整个表。

U(更新)

Update,指更新数据库中现有的数据记录。这是通过SQL的UPDATE语句来实现的。更新通常需要条件来定位需要更新的记录,否则就会更新全表数据。

代码语言:go
AI代码解释
复制
stmt, err := db.Prepare("UPDATE people SET age=? WHERE name=?")
	if err != nil {
		fmt.Println(err)
	}
	defer stmt.Close()

	// 更新操作
	_, err = stmt.Exec(100, "Tom")
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println("数据更新成功")

执行程序,可以看到Tom已经从20岁变成了100岁。Time goes by,感叹岁月无情。

D(删除)

Delete,指从数据库中删除数据记录。这是通过SQL的DELETE语句来实现的。删除操作一般需要指定条件,否则就会删除全表数据,就和truncate功能相同了。

代码语言:go
AI代码解释
复制
stmt, err := db.Prepare("DELETE FROM people WHERE name = ?")
	if err != nil {
		fmt.Println(err)
	}
	defer stmt.Close()

	// 执行删除操作
	_, err = stmt.Exec("Jerry") 
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println("数据删除成功")

通过where指定条件,删除name为Jerry的数据。执行程序,结果如下。

结语

作为一名go的初学者,从Java的JDBC的角度来学习go更容易上手。同时在学习go连接MySQL的过程中,又认识了defer关键字,就这样吧。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go 数据存储篇(六):数据表之间的关联关系和关联查询
MySQL 之所以被称之为关系型数据库,是因为可以基于外键定义数据表之间的关联关系,日常开发常见的关联关系如下所示:
学院君
2020/10/19
3.3K0
Go 数据存储篇(六):数据表之间的关联关系和关联查询
Go实现对MySQL的增删改查 原
开发环境:windows7 64位、编辑器是sublime text3。 直接添上代码了,代码中有注释。 注:需要提前下载github.com/go-sql-driver/mysql,下面的程序才会运行成功。 package main
克虏伯
2019/04/15
1.2K0
Golang学习笔记之Golang与Mysql交互
Go标准库中没有数据库驱动。参见http://golang.org/s/sqldrivers获取第三方驱动。 这里选择了Go-MySQL-Driver这个实现。地址是:https://github.com/go-sql-driver/mysql/。 安装:go get github.com/go-sql-driver/mysql 官方database/sql包文档:https://studygolang.com/pkgdoc 有关于MySQL基本操作可以去看我的另一篇简书:https://www.jianshu.com/p/2e01f4c6b626 使用的数据库定义如下
李海彬
2018/12/28
2.5K1
Golang学习笔记之Golang与Mysql交互
golang源码分析(34)mysql驱动
为什么需要使用空白导入?是因为需要执行mysql包的初始化代码(代码位于%GOPATH%/github.com/go-sql-driver/mysql/driver.go)
golangLeetcode
2022/08/02
1K0
Go语言中进行MySQL预处理和SQL注入防护
在现代 web 应用开发中,安全性是我们必须重视的一个方面。SQL 注入是常见的攻击手法之一,它允许攻击者通过构造特殊的 SQL 查询来访问、修改数据库中的数据。
南山竹
2024/08/12
2810
Go语言中进行MySQL预处理和SQL注入防护
基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互
在这篇教程中,我们将在 MySQL 中创建一个 chitchat 数据库作为论坛项目的数据库,然后在 Go 项目中编写模型类与之进行交互。你可以本地安装 MySQL 数据库,也可以基于 Docker 容器运行(后续会介绍容器化启动方法)。
学院君
2020/04/02
1.1K0
基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互
如何使用mysql数据库【Golang 入门系列十】
之前,已经讲过一些Golang的基础的东西,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/category/1275863.html,
章为忠学架构
2019/08/09
1.1K0
使用Go语言连接MySQL:从入门到精通的实战指南
上一篇介绍了了,如何使用PHP连接数据,本文将介绍使用Go语言连接MySQL。Go 语言,作为一种现代化的编程语言,因其并发性能优异、工程化出色而受到越来越多开发者的青睐。本文将从入门到精通的角度,详细介绍如何使用 Go 语言连接 MySQL 数据库,并通过实战案例加深理解。
小明爱吃火锅
2024/07/07
2.1K0
go_databasetest
go_databasetest go语言的数据库测试: go get github.com/Go-SQL-Driver/MySQL package main import ( _"github.com/Go-SQL-Driver/MySQL" "database/sql" "fmt" ) func main() { //链接数据库 db, err := sql.Open("mysql", "root:1111@tcp(127.0.0.1:3306)/test
机器学习和大数据挖掘
2019/07/02
2500
49. 访问PostgreSQL数据库增删改查 | 厚土Go学习笔记
PostgreSQL是常见的免费的大型关系型数据库,具有丰富的数据类型,也是软件项目常用的数据库之一。 因其可靠的稳定性,通常我们可以拿它来做Oracle的替代品。 使用 Go 语言访问 PostgreSQL 数据库,与其他数据库是略有不同的。 为了能够对数据库进行访问,我们先建立一个数据库 cofoxdb,并且建立一个数据表 user 建表 SQL 脚本如下 --------------------------- ---postgresql SQL by Junbo Jian --------------
李海彬
2018/03/19
1.4K0
48. 访问MySql数据库增删改查和连接池及空字段处理 | 厚土Go学习笔记
和上一节相比,go 语言访问 MySql 数据库可以有更好的写法,今天来讲一下连接池。同时,也演示一下当表字段内容为 NULL 时,go 语言的处理。 首先我们建立一个新的数据库 cofoxdb 和数
李海彬
2018/03/28
1.2K0
48. 访问MySql数据库增删改查和连接池及空字段处理 | 厚土Go学习笔记
go语言学习-mysql
mysql使用 sql语句 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, `IsBoy` tinyint(4) DEFAULT NULL, PRIMARY KEY (`id`) ) DEFAULT CH
solate
2019/07/22
4610
通过go操作MySQL
一直要做MySQL方向的一些数据管理定制工作,go就是一个很不错的切入点,拖来拖去,决定还是从一些小的地方开始慢慢切入。
jeanron100
2018/09/29
1.3K0
通过go操作MySQL
GO web 开发 实战三,数据库预处理
了解什么是预处理,我们可以来对比一下,普通的 sql 语句执行过程和 预处理的执行过程
阿兵云原生
2023/02/16
3880
Go语言操作mysql数据库简单例子
Go语言操作数据库非常的简单, 他也有一个类似JDBC的东西"database/sql" 实现类是"github.com/go-sql-driver/mysql" 使用过JDBC的人应该一看就懂 对日期的处理比较晦涩,没有JAVA流畅: package main import ( "database/sql" _ "github.com/go-sql-driver/mysql" "log" "time" ) /* create table t( id
李海彬
2018/03/23
3.8K0
Go-MySQL-Driver,让Go语言拥抱MySQL
闫同学
2023/10/14
5970
Go 数据存储篇(五):建立数据库连接并进行增删改查操作
前面学院君给大家介绍了 Go 语言中的内存存储和文件存储,文件存储的好处是可以持久化数据,但是并不是 Web 应用数据存储的终极方案,因为这样存储起来的数据检索和管理起来非常麻烦,为此又诞生了数据库管理系统来处理数据的增删改查。数据库又可以划分为关系型数据库(RDBMS)和非关系型数据库(NoSQL),前者比如 MySQL、Oracle,后者比如 Redis、MongoDB,这里我们以当前最流行的开源关系型数据库 MySQL 为例进行介绍。
学院君
2020/10/19
3.7K0
Go 数据存储篇(五):建立数据库连接并进行增删改查操作
使用Go语言操作MySQL数据库的思路与步骤
最近在做注册登录服务时,学习用Go语言操作MySQL数据库实现用户数据的增删改查,现将个人学习心得总结如下,另外附有代码仓库地址,欢迎各位有兴趣的fork。
Zoctopus
2018/08/28
8780
使用Go语言操作MySQL数据库的思路与步骤
Golang如何优雅连接MYSQL数据库?
Go原生就支持连接数据库,所以在使用 Golang 开发时,当需要数据库交互时,即可使用database/sql包。
JavaEdge
2021/02/23
12.9K0
Golang如何优雅连接MYSQL数据库?
Go语言读写数据库
我用的驱动是:https://github.com/Go-SQL-Driver/MySQL 理由跟 https://github.com/astaxie/build-web-application-with-golang/blob/master/05.2.md 的一样。 比较新,更新维护的比较好; 完全支持database/sql接口 支持keepalive,保持长连接。 安装 $ go get github.com/go-sql-driver/mysql 数据库连接语句 import "database/
李海彬
2018/03/22
1K0
相关推荐
Go 数据存储篇(六):数据表之间的关联关系和关联查询
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档