史上最详解golang操控数据库实现多对一的CRUD - Go语言中文社区

史上最详解golang操控数据库实现多对一的CRUD


史上最详解golang操控数据库实现多对一的CRUD

前言

Golang 提供了database/sql包用于对SQL数据库的访问, 作为操作数据库的入口对象sql.DB, 主要为我们提供了两个重要的功能:
sql.DB 通过数据库驱动为我们提供管理底层数据库连接的打开和关闭操作.
sql.DB 为我们管理数据库连接池
需要注意的是,sql.DB表示操作数据库的抽象访问接口,而非一个数据库连接对象;它可以根据driver打开关闭数据库连接,管理连接池。正在使用的连接被标记为繁忙,用完后回到连接池等待下次使用。所以,如果你没有把连接释放回连接池,会导致过多连接使系统资源耗尽。

下面的几个操作里面我们都将采用同一个数据库表结构:数据库test,歌曲表music,关联歌手信息表singer。

CREATE TABLE music (
id int(11) NOT NULL AUTO_INCREMENT COMMENT ‘歌曲id’,
name varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT ‘歌曲名称’,
year int(11) DEFAULT NULL COMMENT ‘创建年份’,
singerId int(11) DEFAULT NULL COMMENT ‘歌手名称id’,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE singer (
sid int(11) NOT NULL COMMENT ‘歌手id’,
sname varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT ‘歌手名称’,
PRIMARY KEY (sid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

1.导入mysql数据库驱动
YINRU
2.连接数据库
通过调用sql.Open函数返回一个sql.DB指针; sql.Open函数原型如下:
在这里插入图片描述
driverName: 使用的驱动名. 这个名字其实就是数据库驱动注册到 database/sql 时所使用的名字.
dataSourceName: 数据库连接信息,这个连接包含了数据库的用户名, 密码, 数据库主机以及需要连接的数据库名等信息.

《-------------------------案列显示---------------------------》
在这里插入图片描述
调用 db.Query 执行 SQL 语句, 此方法会返回一个 Rows 作为查询的结果
sql.Open并不会立即建立一个数据库的网络连接, 也不会对数据库链接参数的合法性做检验, 它仅仅是初始化一个sql.DB对象. 当真正进行第一次数据库查询操作时, 此时才会真正建立网络连接;

3.查询全部数据
通过 rows.Next() 迭代查询数据.
在这里插入图片描述
通过 rows.Scan() 读取每一行的值 .
rows.Scan 参数的顺序很重要, 需要和查询的结果的column对应.
例如 “select m.,s. from music m left join singer s on m.singerId = s.sid” 查询的行的 column 顺序是 “id, name, year,singerId,sid,sname” 和插入操作顺序相同, 因此 rows.Scan 也需要按照此顺序rows.Scan(&id,&name,&year,&singerId,&sid,&sname), 不然会造成数据读取的错位.

一般用Prepared Statements[预编译语句]和Exec()[插入数据]完成INSERT, UPDATE, DELETE操作

4.添加数据
先根据通过Prepared Statements[预编译语句],在通过db.Exec()插入数据,通过返回的err可知插入失败的原因.
在这里插入图片描述
5.修改数据
先根据通过Prepared Statements[预编译语句],在通过db.Exec()插入数据,通过返回的err可知插入失败的原因.
rese可以进一步查询本次插入数据影响的行数RowsAffected
在这里插入图片描述
6.删除数据
先根据通过Prepared Statements[预编译语句],在通过db.Exec()插入数据。
rese可以进一步查询本次插入数据影响的行数RowsAffected,通过返回的err可知插入失败的原因.
在这里插入图片描述
7.获取错误
paric(err)是获取到真正意义上的错误
在这里插入图片描述
8.总结:
db.Query()函数用来直接执行Sql返回Rows结果。

db.Prepare()函数用来返回准备要执行的sql操作,然后返回准备完毕的执行状态

stmr.Exec()函数用来执行stmt准备好的SQL语句

github完整代码示例

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/wsk8520/article/details/101213031
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-16 02:30:50
  • 阅读 ( 1010 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢