Golang 数据库操作

本文介绍了Golang中数据库操作的详细流程,包括初始化连接、连接池管理,如SetMaxOpenConns、SetMaxIdleConns等,以及查询、插入、更新和删除数据的方法。还讲述了如何实现账号密码登录功能,并简要探讨了sqlx库的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

Install连接数据库需要的包

go get -u github.com/go-sql-driver/mysql // MySQL数据库的包
go get github.com/lib/pq // pg数据库的包

注意:不同数据库,安装的包不同

初始化连接

Open:函数只是验证连接参数是否正确

db.ping():测试是否能够正常连接数据库,返回nil表示可以

全局定义db变量是为了连t接数据库成功之后任意地方都可以进行操作。

引入 MySQL驱动包使用:_ "github.com/go-sql-driver/mysql"

当导入带有空白标识符前缀 _ 的包时,将调用包的 init 函数。该函数注册驱动程序

package main

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

// 定义全局db对象
var db *sql.DB

func InitDB() (err error) {
   
  // Data Source Name:连接MySQL的格式
	dsn := "root:password@tcp(127.0.0.1:3306)/GoStudy"
  
  // 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db
	db, err = sql.Open("mysql", dsn)

	if err != nil {
   
		return err
	}
	
  // 尝试与数据库建立连接(校验dsn是否正确)
	return db.Ping()
}

func main() {
   
	if err := InitDB(); err != nil {
   
		fmt.Println("连接失败")
		return
	}
	
	// 数据库使用完之后关闭连接
	defer db.Close()
}

其中sql.DB是表示连接的数据库对象(结构体实例),它保存了数据库所有信息,内部维护了一个具有0到多个底层数据库连接池,它可以安全的被多个Goroutine使用。因此Open函数应该仅被调用一次,很少需要关闭这个对象

连接池

SetMaxOpenConns
func (db *DB) SetMaxOpenConns(n int)

SetMaxOpenConns设置与数据库建立连接的最大数目。 如果n大于0且小于最大闲置连接数,会将最大闲置连接数减小到匹配最大开启连接数的限制。 如果n<=0,不会限制最大开启连接数,默认为0(无限制)。需要MySQL服务器的max_connections参数值要小,可以用以下SQL查询

show variables like 'max_connections';
SetMaxIdleConns
func (db *DB) SetMaxIdleConns(n int)

SetMaxIdleConns设置连接池中的最大闲置连接数。 如果n大于最大开启连接数,则新的最大闲置连接数会减小到匹配最大开启连接数的限制。 如果n<=0,不会保留闲置连接。需要比maxOpenConns小

SetConnMaxIdleTime

连接池里面的连接最大空闲时长(一个连接不活跃的时长)。

SetConnMaxLifetime

连接池里面的连接最大存活时长。必须要比mysql服务器设置的wait_timeout小,否则会导致golang侧连接池依然保留已被mysql服务器关闭了的连接。

MySQL默认是8小时,可通过以下SQL查询

show variables like 'wait_timeout';

查询数据

单行数据查询

通过QueryRow方法实现

package main

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

var db *sql.DB

type User struct {
   
	Id   int
	Name string
	Pwd  string
	Age  int
	Sex  string
}

func InitDB() (err error) {
   
	// Da
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值