前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自学go,也摆脱不了CRUD的日子

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

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

前言

对于外部数据库的依赖,是每种高级编程语言绕不开的话题。像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
复制
go get github.com/go-sql-driver/mysql

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

C(新增)

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

代码语言:go
复制
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
复制
 // 执行查询命令
	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
复制
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
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 数据表
  • CRUD
    • C(新增)
      • R(读取)
        • U(更新)
          • D(删除)
          • 结语
          相关产品与服务
          云数据库 MySQL
          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档