iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Golang如何连接MySQL数据库
  • 832
分享到

Golang如何连接MySQL数据库

2024-04-02 19:04:59 832人浏览 泡泡鱼
摘要

本篇内容主要讲解“golang如何连接Mysql数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Golang如何连接mysql数据库”吧!Go原生就支持连接

本篇内容主要讲解“golang如何连接Mysql数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Golang如何连接mysql数据库”吧!

Go原生就支持连接数据库,所以在使用 Golang 开发时,当需要数据库交互时,即可使用database/sql包。

Golang如何连接MySQL数据库

在Go中访问DB需用sql.DB接口:可创建语句(statement)和事务(transaction),执行查询,获取结果。

使用DB时,除database/sql包,还需引入想使用的特定DB驱动。官方不提供实现,需要先下载三方实现,点击这里查看各种各样的实现版本。

通常DB选型MySQL,所以选型驱动为:GitHub.com/go-sql-driver/mysql,需引入包:

"database/sql"_ "github.com/go-sql-driver/mysql"

包名前的"_"

import 下划线(如:import _  github/demo)的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用  import _ 引用该包。

上面的MySQL驱动中引入的就是MySQL包中各个init()方法,你无法通过包名来调用包中的其他函数。导入时,驱动的初始化函数会调用sql.ReGISter将自己注册在database/sql包的全局变量sql.drivers中,以便以后通过sql.Open访问。

Golang如何连接MySQL数据库

案例用数据表

Golang如何连接MySQL数据库

初始化数据库连接Golang如何连接MySQL数据库

Golang如何连接MySQL数据库

sql.Open()中的数据库连接串格式为:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"。DB的类型为:*sql.DB,有DB后即可执行CRUD。

Go将数据库操作分为两类:Query与Exec

  • Query表示查询,它会从数据库获取查询结果(一系列行,可能为空)。

  • Exec表示执行语句,它不会返回行。

常见数据库操作模式:

  • QueryRow只返回一行的查询,作为Query的一个常见特例。

  • Prepare准备一个需要多次使用的语句,供后续执行用。

查询操作

var user User rows, e := DB.Query("select * from user where id in (1,2,3)") if e == nil {     errors.New("query incur error") } for rows.Next(){     e := rows.Scan(user.sex, user.phone, user.name, user.id,        user.age)     if e != nil{         fmt.Println(JSON.Marshal(user))     } } rows.Close() // 单行查询操作 DB.QueryRow("select * from user where id=1").Scan(user.age,    user.id, user.name, user.phone, user.sex)

执行流程

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 使用db.Query()来发送查询到数据库,获取结果集Rows,并检查错误。

  3. 使用rows.Next()作为循环条件,迭代读取结果集。

  4. 使用rows.Scan从结果集中获取一行结果。

  5. 使用rows.Err()在退出迭代后检查错误。

  6. 使用rows.Close()关闭结果集,释放连接。

增删改和Exec

通常不会约束你查询必须用Query,只是Query会返回结果集,而Exec不会返回。所以如果你执行的是增删改操作一般用Exec会好一些。Exec返回的结果是Result,Result接口允许获取执行结果的元数据:

type Result interface {     // 用于返回自增ID,并不是所有的关系型数据库都有这个功能。     LastInsertId() (int64, error)     // 返回受影响的行数。     RowsAffected() (int64, error) }

准备查询

如果你现在想使用占位符的功能,where  的条件想以参数的形式传入,Go提供了db.Prepare语句来帮你绑定。准备查询的结果是一个准备好的语句(prepared  statement),语句中可以包含执行时所需参数的占位符(即绑定值)。准备查询比拼字符串的方式好很多,它可以转义参数,避免SQL注入。同时,准备查询对于一些数据库也省去了解析和生成执行计划的开销,有利于性能。

占位符

postgresql使用$N作为占位符,N是一个从1开始递增的整数,代表参数的位置,方便参数的重复使用。MySQL使用?作为占位符,SQLite两种占位符都可以,而oracle则使用:param1的形式。

MySQL               PostgreSQL            Oracle =====               ==========            ====== WHERE col = ?       WHERE col = $1        WHERE col = :col VALUES(?, ?, ?)     VALUES($1, $2, $3)    VALUES(:val1, :val2, :val3) stmt, e := DB.Prepare("select * from user where id=?") query, e := stmt.Query(1) query.Scan()

 事务的使用

通过db.Begin()来开启一个事务,Begin方法会返回一个事务对象Tx。在结果变量Tx上调用Commit()或者Rollback()方法会提交或回滚变更,并关闭事务。在底层,Tx会从连接池中获得一个连接并在事务过程中保持对它的独占。事务对象Tx上的方法与数据库对象sql.DB的方法一一对应,例如Query,Exec等。事务对象也可以准备(prepare)查询,由事务创建的准备语句会显式绑定到创建它的事务。

//开启事务 tx, err := DB.Begin() if err != nil {     fmt.Println("tx fail") } //准备sql语句 stmt, err := tx.Prepare("DELETE FROM user WHERE id = ?") if err != nil {     fmt.Println("Prepare fail")     return false } //设置参数以及执行sql语句 res, err := stmt.Exec(user.id) if err != nil {     fmt.Println("Exec fail")     return false } //提交事务 tx.Commit()  我们来一个完整的sql操作:package main  import (     "database/sql"     "encoding/json"     "fmt"     _ "github.com/go-sql-driver/mysql"     "github.com/pkg/errors"     "strings" )  //数据库配置 const (     userName = "root"     passWord = "123456"     ip       = "127.0.0.1"     port     = "3306"     dbName   = "test" )  //Db数据库连接池 var DB *sql.DB  type User struct {     id    int64     name  string     age   int8     sex   int8     phone string }  //注意方法名大写,就是public func InitDB() {     //构建连接:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"     path := strings.Join([]string{userName, ":", password, "@tcp(", ip, ":", port, ")/", dbName, "?charset=utf8"}, "")     //打开数据库,前者是驱动名,所以要导入:_ "github.com/go-sql-driver/mysql"     DB, _ = sql.Open("mysql", path)     //设置数据库最大连接数     DB.SetConnMaxLifetime(100)     //设置上数据库最大闲置连接数     DB.SetMaxIdleConns(10)     //验证连接     if err := DB.Ping(); err != nil {         fmt.Println("open database fail")         return     }     fmt.Println("connnect success") }  //查询操作 func Query() {     var user User     rows, e := DB.Query("select * from user where id in (1,2,3)")     if e == nil {         errors.New("query incur error")     }     for rows.Next() {         e := rows.Scan(user.sex, user.phone, user.name, user.id, user.age)         if e != nil {             fmt.Println(json.Marshal(user))         }     }     rows.Close()     DB.QueryRow("select * from user where id=1").Scan(user.age, user.id, user.name, user.phone, user.sex)      stmt, e := DB.Prepare("select * from user where id=?")     query, e := stmt.Query(1)     query.Scan() }  func DeleteUser(user User) bool {     //开启事务     tx, err := DB.Begin()     if err != nil {         fmt.Println("tx fail")     }     //准备sql语句     stmt, err := tx.Prepare("DELETE FROM user WHERE id = ?")     if err != nil {         fmt.Println("Prepare fail")         return false     }     //设置参数以及执行sql语句     res, err := stmt.Exec(user.id)     if err != nil {         fmt.Println("Exec fail")         return false     }     //提交事务     tx.Commit()     //获得上一个insert的id     fmt.Println(res.LastInsertId())     return true }  func InsertUser(user User) bool {     //开启事务     tx, err := DB.Begin()     if err != nil {         fmt.Println("tx fail")         return false     }     //准备sql语句     stmt, err := tx.Prepare("INSERT INTO user (`name`, `phone`) VALUES (?, ?)")     if err != nil {         fmt.Println("Prepare fail")         return false     }     //将参数传递到sql语句中并且执行     res, err := stmt.Exec(user.name, user.phone)     if err != nil {         fmt.Println("Exec fail")         return false     }     //将事务提交     tx.Commit()     //获得上一个插入自增的id     fmt.Println(res.LastInsertId())     return true }  func main() {     InitDB()     Query()     defer DB.Close() }

到此,相信大家对“Golang如何连接MySQL数据库”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: Golang如何连接MySQL数据库

本文链接: https://www.lsjlt.com/news/56600.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Golang如何连接MySQL数据库
    本篇内容主要讲解“Golang如何连接MySQL数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Golang如何连接MySQL数据库”吧!Go原生就支持连接...
    99+
    2022-10-18
  • golang怎么连接mysql数据库
    今天小编给大家分享一下golang怎么连接mysql数据库的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。golang操作my...
    99+
    2023-06-30
  • mysql如何连接数据库
    本篇内容主要讲解“mysql如何连接数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql如何连接数据库”吧! mysql连...
    99+
    2023-01-31
    mysql 数据库
  • golang连接mysql数据库操作使用示例
    目录安装连接数据库处理类型(Handle Types)建表Exec使用Exec增删该示例sql预声明(Prepared Statements)QueryQueryxQueryRow和...
    99+
    2022-11-13
  • C#如何连接MySQL数据库
    本文章是建立在已经安装MySQL数据库的前提,默认安装在C:\Program Files (x86)\MySQL,建议在安装时选中Connector.NET 6.9的安装,里面有MySQL与C#连接的动态链接库。  ...
    99+
    2022-05-24
    c# mysql c# 连接数据库 c# 连接MySQL数据库
  • java如何连接mysql数据库
    这篇文章主要介绍java如何连接mysql数据库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!java如何连接mysql数据库?1. 下载安装eclipse软件,以及准备“...
    99+
    2022-10-18
  • eclipse如何连接mysql数据库
    这期内容当中小编将会给大家带来有关eclipse如何连接mysql数据库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。eclipse如何连接mysql数据库1.进入ecl...
    99+
    2022-10-18
  • JSP如何连接mysql数据库
    本篇内容主要讲解“JSP如何连接mysql数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JSP如何连接mysql数据库”吧! ...
    99+
    2022-10-18
  • nodejs如何连接mysql数据库
    这篇文章主要介绍nodejs如何连接mysql数据库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本篇文章给大家介绍一下使用nodejs连接mysql数据库的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大...
    99+
    2023-06-14
  • Spring如何连接Mysql数据库
    这篇文章主要介绍了Spring如何连接Mysql数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、创建一个Maven项目二、导入坐标 在pom.xml...
    99+
    2023-06-29
  • SPSS如何连接mysql数据库
    本篇内容介绍了“SPSS如何连接mysql数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!安装MySQL ODBC驱动官方说法:MySQ...
    99+
    2023-07-05
  • mysql 连接数据库
    1、首先启动mysql 并链接数据 小意思吧!都会了是吧    mysql -uroot -p //连接数据    net start mysql /...
    99+
    2022-05-21
    连接数据库 mysql
  • golang中mysql数据库连接池的示例分析
    这篇文章主要介绍golang中mysql数据库连接池的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!golang的优点golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标...
    99+
    2023-06-15
  • 如何查看mysql数据库连接数
    要查看MySQL数据库的连接数,可以使用以下方法:1. 使用MySQL的命令行客户端登录到数据库服务器:```mysql -u us...
    99+
    2023-08-09
    mysql数据库
  • 如何远程连接mysql数据库
    这期内容当中小编将会给大家带来有关如何远程连接mysql数据库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。如何远程连接mysql数据库我们可以使用navicat来远程连...
    99+
    2022-10-18
  • Cmd中如何连接MySQL数据库
    Cmd中如何连接MySQL数据库,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、 Mysql命令行连接1、一般对于刚刚安装好...
    99+
    2022-10-18
  • PHP中如何连接MySQL数据库
    本篇内容介绍了“PHP中如何连接MySQL数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2023-04-21
    php mysql
  • Node.js 连接 mysql 数据库
    目录 一、安装驱动 二、连接数据库 1、数据库连接的配置信息 数据库连接参数说明 2、封装 mysql 的执行语句 3、后端路由文件  三、数据库操作( CURD ) 1、查询数据 2、插入数据 3、更新数据 4、删除数据 4、获取受影响的...
    99+
    2023-09-09
    mysql 数据库 node.js
  • python连接MySQL数据库
    模块功能:connect()方法 * connect()方法用于连接数据库,返回一个数据库连接对象。如果要连接一个位于host.remote.com服务器上名为fourm的MySQL数据库,连接串可以这样写: ...
    99+
    2023-01-31
    数据库 python MySQL
  • JSP连接MySQL数据库
    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者成长之路 ✨...
    99+
    2023-08-16
    java mysql tomcat
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作