GO操作Mysql数据库

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: GO操作Mysql数据库

GO操作Mysql数据库

       Go语言中的database/sql包定义了对数据库的一系列的操作。database/sql/driver包定义了对应的被数据库实现的接口。这些接口会被sql包使用,但是Go语言没有提供任何官方的数据库驱动,所以我们需要导入第三方的数据库驱动。不过我们连接数据库之后对数据库操作的大部分代码都使用sql包。 [go-sql-driver]

引入包:

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

定义两个全局变量(我们需要在多个文件中使用到)

var (
    Db      *sql.Db
    Err      errror
)

type DB说明

DB是一个数据库操作的句柄(或者说指针),指向了一个具有0个或者多个连接的连接池。它可以安全的被多个go协程同时使用(猜测底层通过管道)。

       sql包会自动地创建和释放连接,维护一个闲置连接的连接池。如果一个数据库具有单链接状态的概念,该状态只有在事务中被观察时才可信。一旦调用DB.Begin,返回的Tx会绑定到单个连接。连接池的大小可以用SetMaxdleConns方法控制 

func init(){//init函数一般用于初始化工作,作用于main函数之前
    Db,err := sql.OPen("maysql","root:密码@tcp(IP:端口)/数据库名")
    if err != nil{
        panic(err.Error())        //抛出异常,常使用defer+recover捕捉
    }    
}

Open函数说明

       func Open(driverName,dataSourceName string)(*DB,error)

       Open打开一个dirverName指定的数据库,dataSourceName的数据源

       注1:Open函数可能只能验证其参数,而不创建与数据库的连接。如果需要检查数据源的名称是否合法,应调用返回值的Ping方法。

       func (*DB)Ping() error

        Ping检查与数据库的连接是否仍然有效,如果需要会创建连接

创建一个数据表      

CREATE TABLE users(
    id         INT PRIMARY  KEY  AUTO_INCREMENT,
    username   VARCHAR(100) NOT NULL UNIQUE,
    password   VARCHAR(100) NOT  NULL,
    email      VARCHAR(100)  
)

文件分布

       DB_mysql/model/user.go

       DB_mysql/model/user_test.go                 //测试文件

       DB_mysql/db.go

package utils
import (
  "database/sql"
  _ "github.com/go-sql-driver/mysql"
)
//定义两个全局变量
var (
  Db  *sql.DB
  Err error
)
//初始化连接池
func init() {
  Db, err := sql.Open("mysql", "root:123123@tcp(localhost:3306)/mytest")
  if err != nil {
    panic(Err.Error())
  }
}
package model
import "goWorking/DBSql/utils"
//User字段应该与数据库中的users表的字段意义对应
type User struct {
  Id       int
  UserName string
  Password string
  Email    string
}
//给User绑定相应的操作方法
//增加用户
func (this *User) AddUser() error {
  //1.写sql语句
  str := "insert into users(id,username,password,email) values(?,?,?)" //?是占位符
  //2.预编译(建议预编译,防止sql注入)
  strTmt, err := utils.Db.Prepare(str)
  if err != nil {
    return err
  }
  //3.执行
  //Exec执行一次命令(包括查询、删除、更新、插入等),不返回任何执行结果。参数args表示query中的占位参数。
  _, err = strTmt.Exec("admin", "123123", "email") //id自动增长
  if err != nil {
    return err
  }
  return nil
}
//通过ID从数据库获取一条用户信息
func (this *User) GetUserById() (u *User, err error) {
  //1.写sql语句
  str := "select * from users where id = ?"
  //2.预编译
  strTmt, err := utils.Db.Prepare(str)
  //3.执行
  //QueryRow执行一次查询,并期望返回最多一行结果(即Row)。
  //QueryRow总是返回非nil的值,直到返回值的Scan方法被调用时,才会返回被延迟的错误
  row := strTmt.QueryRow(this.Id)
  var id int
  var username string
  var password string
  var email string
  err = row.Scan(&id, &username, &password, &email)
  if err != nil {
    return nil, err
  }
  user := &User{
    Id:       id,
    UserName: username,
    Password: password,
    Email:    email,
  }
  return user, err
}
//获取所有用户信息
func (this *User) GetUsers() (userSlice []*User, err error) {
  //写sql语句
  str := "select * from users"
  //执行
  rows, err := utils.Db.Query(str)
  //获取每一行信息
  var id int
  var username string
  var password string
  var email string
  for rows.Next() {
    err = rows.Scan(&id, &username, &password, &email)
    user := &User{
      Id:       id,
      UserName: username,
      Password: password,
      Email:    email,
    }
    userSlice = append(userSlice, user)
  }
  return
}
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
go如何使用SQLX操作MySQL数据库?
sqlx是Go语言中一款流行的第三方数据库操作包,它扩展了Go标准库`database/sql`的功能,极大地简化了数据库操作流程并提供了丰富的数据库交互方法。
|
1月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
33 1
|
1月前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
62 4
|
1月前
|
SQL 关系型数据库 MySQL
go语言中安装数据库驱动
【11月更文挑战第1天】
52 5
|
1月前
|
SQL 关系型数据库 MySQL
go语言中数据库操作
【10月更文挑战第22天】
49 4
|
1月前
|
关系型数据库 MySQL 数据库连接
go语言中打开数据库连接
【11月更文挑战第1天】
32 2
|
2月前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
90 11
|
3月前
|
关系型数据库 MySQL Go
go抽取mysql配置到yaml配置文件
go抽取mysql配置到yaml配置文件
|
4月前
|
SQL 关系型数据库 MySQL
Go语言中使用 sqlx 来操作 MySQL
Go语言因其高效的性能和简洁的语法而受到开发者们的欢迎。在开发过程中,数据库操作不可或缺。虽然Go的标准库提供了`database/sql`包支持数据库操作,但使用起来稍显复杂。为此,`sqlx`应运而生,作为`database/sql`的扩展库,它简化了许多常见的数据库任务。本文介绍如何使用`sqlx`包操作MySQL数据库,包括安装所需的包、连接数据库、创建表、插入/查询/更新/删除数据等操作,并展示了如何利用命名参数来进一步简化代码。通过`sqlx`,开发者可以更加高效且简洁地完成数据库交互任务。
42 1
|
21天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
34 7