Golang操作MySql数据库的完整步骤记录
前言
mysql是业界常用的关系型数据库,在平时开发中会经常与mysql数据库打交道,所以在接下来将介绍怎么使用go语言操作mysql数据库。
下载mysql连接驱动
go语言中的database/sql包提供了保证sql或类sql数据库的泛用接口,并不提供具体的数据库驱动。使用database/sql包时必须注入(至少)一个数据库驱动。
我们常用的数据库基本上都有完整的第三方实现。比如:mysql驱动
**下载依赖**
**使用mysql驱动**
open打开一个dirvername指定的数据库,datasourcename指定数据源,一般至少包括数据库文件名和其它连接必要的信息。
示例代码:
初始化连接
open函数可能只是验证其参数格式是否正确,实际上并不创建与数据库的连接。如果要检查数据源的名称是否真实有效,应该调用ping方法。
返回的db对象可以安全地被多个goroutine并发使用,并且维护其自己的空闲连接池。因此,open函数应该仅被调用一次,很少需要关闭这个db对象。
示例代码如下:
其中sql.db是表示连接的数据库对象(结构体实例),它保存了连接数据库相关的所有信息。它内部维护着一个具有零到多个底层连接的连接池,它可以安全地被多个goroutine同时使用。
**设置最大连接数**
setmaxopenconns设置与数据库建立连接的最大数目。如果n大于0且小于最大闲置连接数,会将最大闲置连接数减小到匹配最大开启连接数的限制。如果n<=0,不会限制最大开启连接数,默认为0(无限制)。
**设置最大闲置连接数**
setmaxidleconns设置连接池中的最大闲置连接数。如果n大于最大开启连接数,则新的最大闲置连接数会减小到匹配最大开启连接数的限制。如果n<=0,不会保留闲置连接。
mysql建库建表
我们先在mysql中创建一个名为`sql_test`的数据库:
进入该数据库:
执行以下命令创建一张用于测试的数据表:
操作mysql查询
为了方便查询,我们事先定义好一个结构体来存储user表的数据。
**单行查询**
单行查询`db.queryrow()`执行一次查询,并期望返回最多一行结果(即row)。queryrow总是返回非nil的值,直到返回值的scan方法被调用时,才会返回被延迟的错误。(如:未找到结果)
示例代码:
**多行查询**
多行查询db.query()执行一次查询,返回多行结果(即rows),一般用于执行select命令。参数args表示query中的占位参数。
示例代码:
操作mysql插入数据
插入、更新和删除操作都使用exec方法。
exec执行一次命令(包括查询、删除、更新、插入等),返回的result是对已执行的sql命令的总结。参数args表示query中的占位参数。
具体插入数据示例代码如下:
操作mysql更新数据
具体更新数据示例代码如下:
操作mysql删除数据
具体删除数据的示例代码如下:
sql注入安全问题
我们任何时候都不应该自己拼接sql语句!
这里我们演示一个自行拼接sql语句的示例,编写一个根据name字段查询user表的函数如下:
此时以下输入字符串都可以引发sql注入问题:
完整示例代码归档github
到此这篇关于golang操作mysql数据库的完整步骤记录的文章就介绍到这了,更多相关golang操作mysql数据库内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!