Go语言MySQL数据库操作

一、MySQL数据库驱动

1、MySQL数据库驱动简介

Go语言官方没有实现MySQL数据库驱动,常用的开源MySQL数据库驱动实现如下:

(1)Go MySQL Driver

Go MySQL Driver支持database/sql接口,全部采用Go语言实现。

官方网站:

https://github.com/go-sql-driver/mysql/

(2)MyMySQL

MyMySQL支持database/sql接口,也支持自定义的接口,全部采用Go语言实现。

官方网站:

https://github.com/ziutek/mymysql

(3)GoMySQL

GoMySQL不支持database/sql接口,采用自定义接口,全部采用Go语言实现。

官方网站:

https://github.com/Philio/GoMySQL

2、Go-MySQL-Driver简介

Go-MySQL-Driver优点:

(1)维护比较好。

(2)完全支持database/sql接口。

(3)支持keepalive,保持长连接。

Go-MySQL-Driver安装如下:

导入包:

二、MySQL基本操作

1、MySQL数据库创建

登录MySQL数据库,创建数据库

2、sql常用方法

driverName参数为数据库驱动名称。

dataSourceName是连接参数,参数格式如下:

user:password@tcp(host:port)/dbname?charset=utf8

Prepare为后续查询或执行操作创建一个准备SQL

使用给定参数执行准备的SQL语句

使用给定参数执行准备的SQL查询语句

执行SQL操作,query为SQL语句,可以接收可变参数,用于填充SQL语句的某些字段值。

执行SQL查询操作,可以接收多个参数

3、MySQL常用操作

三、MySQL事务操作

1、事务常用方法

开启事务,从连接池中取出一个类型连接。使用TX类型连接可以进行回滚事务和提交事务。

提交事务

回滚

执行SQL操作

执行SQL查询操作

2、事务示例

四、MySQL操作的效率分析

1、sql接口效率分析

sql.Open返回一个DB对象,DB对象对于多个goroutines并发使用是安全的,DB对象内部封装了连接池。Open函数并没有创建连接,只是验证参数是否合法,然后开启一个单独goroutine去监听是否需要建立新的连接,当有请求建立新连接时就创建新连接。

执行不返回行(row)的查询,比如INSERT,UPDATE,DELETE

DB交给内部的exec方法负责查询。exec会首先调用DB内部的conn方法从连接池里面获得一个连接。然后检查内部的driver.Conn是否实现了Execer接口,如果实现了Execer接口,会调用Execer接口的Exec方法执行查询;否则调用Conn接口的Prepare方法负责查询。

用于查询,DB交给内部的query方法负责查询。query首先调用DB内部的conn方法从连接池里面获得一个连接,然后调用内部的queryConn方法负责查询。

返回一个Stmt。Stmt对象可以执行Exec,Query,QueryRow等操作。DB交给内部的prepare方法负责查询。prepare首先调用DB内部的conn方法从连接池里面获得一个连接,然后调用driverConn的prepareLocked方法负责查询。

开启事务,返回Tx对象。调用Begin方法后,TX会与指定的连接绑定,一旦事务提交或者回滚,事务绑定的连接就还给DB的连接池。DB交给内部的begin方法负责处理。begin首先调用DB内部的conn方法从连接池里面获得一个连接,然后调用Conn接口的Begin方法获得一个TX。

进行MySQL数据库操作时,如果每次SQL操作都从DB对象的连接池中获取连接,则会在很大程度上损耗效率。因此,必须尽量在一个连接上执行SQL操作。

2、效率分析示例

从示例结果看,执行SQL操作时如果不释放连接,则效率比释放连接要高。

本文转自51CTO博客作者天山老妖S,

Gopher China 2019早鸟票仅剩有限名额,最后几天,大家抓紧啦~~

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20190130B05P5700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券