Go 语言入门很简单:Go 语言中操作 MySQL 数据库(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL DuckDB 分析主实例,集群系列 8核16GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 在上一篇文章中,我们成功连接了 MySQL 数据库,并成功打印出 MySQL 的版本号,本篇文章就来介绍如何使用 Go 语言操作数据库。

引言

在上一篇文章中,我们成功连接了 MySQL 数据库,并成功打印出 MySQL 的版本号,本篇文章就来介绍如何使用 Go 语言操作数据库。

创建数据库表

我们在 DB_TEST 数据库中新建一个 user 数据库,包含主键 id 和名字 name,可以使用如下语句:

_, err2 := db.Exec("CREATE TABLE user(id INT NOT NULL , name VARCHAR(20), PRIMARY KEY(ID));")


我们可以先在 MySQL 终端中查看我们的数据库表。

mysql> use DB_TEST;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-------------------+
| Tables_in_db_test |
+-------------------+
| table_name        |
+-------------------+
1 row in set (0.00 sec)


编写的 Go 语言的代码如下:

package main
import (
  "database/sql"
  "fmt"
  _ "github.com/go-sql-driver/mysql"
  "log"
)
func main() {
  db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/DB_TEST")
  db.Ping()
  defer db.Close()
  if err != nil {
    fmt.Println("数据库连接失败!")
    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.Print("Successfully Created\n")
}

运行该程序:

Successfully Created


再来查看我们的数据库表 show tables;,会看到多了一个 user 表,说明创建数据库表成功:

mysql> show tables;
+-------------------+
| Tables_in_db_test |
+-------------------+
| table_name        |
| user              |
+-------------------+
2 rows in set (0.01 sec)

插入数据

package main
import (
  "database/sql"
  "fmt"
  _ "github.com/go-sql-driver/mysql"
  "log"
)
func main() {
  db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/DB_TEST")
  db.Ping()
  defer db.Close()
  if err != nil {
    fmt.Println("数据库连接失败!")
    log.Fatalln(err)
  }
  _, err2 := db.Query("INSERT INTO user VALUES(1, 'Wade')")
  if err2 != nil {
    log.Fatal(err2)
  }
  fmt.Print("Successfully Inserted\n")
}


回到数据库终端,查看一下 user 表 select * from user;,可以看到我们刚刚插入成功的一条数据:

mysql> select * from user;
+----+------+
| id | name |
+----+------+
|  1 | Wade |
+----+------+
1 row in set (0.00 sec)

查询所有数据


我们在数据库中再插入一条数据,使用如下命令 INSERT INTO user VALUES(2, 'Kyrie');

mysql> INSERT INTO user VALUES(2, 'Kyrie');
Query OK, 1 row affected (0.00 sec)

然后使用 db.Query("SELECT * FROM user") 查询 user 数据库表中的所有数据:

package main
import (
  "database/sql"
  "fmt"
  _ "github.com/go-sql-driver/mysql"
  "log"
)
func main() {
  db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/DB_TEST")
  db.Ping()
  defer db.Close()
  if err != nil {
    fmt.Println("数据库连接失败!")
    log.Fatalln(err)
  }
  result, err2 := db.Query("SELECT * FROM user")
  if err2 != nil {
    log.Fatal(err2)
  }
  for result.Next() {
    var id int
    var name string
    err = result.Scan(&id, &name)
    if err != nil {
      panic(err)
    }
    fmt.Printf("Id: %d, Name: %s\n", id, name)
  }
}

执行结果:

Id: 1, Name: Wade
Id: 2, Name: Kyrie


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
328 7
|
2月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
241 4
|
3月前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
|
6月前
|
Go 开发者
Go语言包的组织与导入 -《Go语言实战指南》
本章详细介绍了Go语言中的包(Package)概念及其使用方法。包是实现代码模块化、复用性和可维护性的核心单位,内容涵盖包的基本定义、命名规则、组织结构以及导入方式。通过示例说明了如何创建和调用包,并深入讲解了`go.mod`文件对包路径的管理。此外,还提供了多种导入技巧,如别名导入、匿名导入等,帮助开发者优化代码结构与可读性。最后以表格形式总结了关键点,便于快速回顾和应用。
277 61
|
7月前
|
存储 Go
Go语言之接口与多态 -《Go语言实战指南》
Go 语言中的接口是实现多态的核心机制,通过一组方法签名定义行为。任何类型只要实现接口的所有方法即视为实现该接口,无需显式声明。本文从接口定义、使用、底层机制、组合、动态行为到工厂模式全面解析其特性与应用,帮助理解 Go 的面向接口编程思想及注意事项(如 `nil` 陷阱)。
209 22
|
5月前
|
JSON 中间件 Go
Go语言实战指南 —— Go中的反射机制:reflect 包使用
Go语言中的反射机制通过`reflect`包实现,允许程序在运行时动态检查变量类型、获取或设置值、调用方法等。它适用于初中级开发者深入理解Go的动态能力,帮助构建通用工具、中间件和ORM系统等。
306 63
|
7月前
|
Go C++
Go语言方法与接收者 -《Go语言实战指南》
本文介绍了 Go 语言中方法的相关概念和用法。方法是绑定到特定类型上的函数,包含值接收者和指针接收者两种形式。值接收者不会改变原始数据,而指针接收者可修改原始数据,且在处理大型结构体时性能更优。文章详细对比了方法与普通函数的区别,并说明了选择指针接收者的原因,如修改原始值、提升性能及保持一致性。此外,Go 支持为任意自定义类型定义方法,不仅限于结构体。最后通过表格总结了方法的核心概念和使用场景。
206 34
|
6月前
|
测试技术 程序员 Go
Go语言测试简明指南:深度解读go test命令
总的来说,go test是 Go 语言中一个强而有力的工具,每个 Go 程序员都应该掌握并把它融入到日常的开发和调试过程中。就像是一个眼镜过滤出的太阳,让我们在宽阔的代码海洋中游泳,而不是淹没。用好它,让我们的代码更健壮,让我们的生产力更强效。
527 23
|
6月前
|
数据可视化 测试技术 Go
Go 语言测试与调试:`go test` 工具用法
`go test` 是 Go 语言内置的测试工具,支持单元测试、基准测试、示例测试等功能。本文详解其常用参数、调试技巧及性能测试命令,并提供实际项目中的应用示例与最佳实践。
|
6月前
|
测试技术 Go 开发者
Go语言常见接口设计技巧-《Go语言实战指南》
本文分享了 Go 语言中接口设计的最佳实践与技巧。首先介绍了接口设计原则,包括面向接口编程和接口隔离原则(定义最小化接口)。接着详细讲解了常用技巧:关注行为而非数据、优先返回接口隐藏实现细节、遵循“-er”命名惯例、使用接口组合提升灵活性、通过 Mock 接口简化单元测试,以及避免导出仅内部使用的接口。最后以表格形式总结了各技巧的核心要点,帮助开发者编写更清晰、可维护的代码。
221 11

推荐镜像

更多