File tree 3 files changed +17
-15
lines changed
3 files changed +17
-15
lines changed Original file line number Diff line number Diff line change 1
1
#5 .2使用MySQL数据库
2
- 目前Internet上流行的网站构架方式是LAMP,MySQL数据库是其中的标配之一,MySQL作为数据库,它是免费的、开源的、而且使用起来非常的方便。所以目前很多的Web开发都采用MySQL作为后端的数据库存储 。
2
+ 目前Internet上流行的网站构架方式是LAMP,其中的M即MySQL, 作为数据库,MySQL以免费、开源、使用方便为优势成为了很多Web开发的后端数据库存储引擎 。
3
3
4
4
##MySQL驱动
5
- Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口。
5
+ Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口,常用的有如下几种:
6
6
7
7
- http://code.google.com/p/go-mysql-driver/ 支持database/sql,全部采用go写。
8
8
- https://github.com/ziutek/mymysql 支持database/sql,也支持自定义的接口,全部采用go写。
9
9
- https://github.com/Philio/GoMySQL 不支持database/sql,自定义接口,全部采用go写。
10
10
11
- 上面三个数据库驱动是目前使用率最高的库,我接下来的例子主要采用第一个为主(我目前项目中也是采用第一个驱动来写),也推荐大家采用第一个驱动 ,主要理由:
11
+ 接下来的例子我主要以第一个驱动为例(我目前项目中也是采用它来驱动),也推荐大家采用它 ,主要理由:
12
12
13
- - 目前这个驱动比较新 ,维护的比较好
13
+ - 这个驱动比较新 ,维护的比较好
14
14
- 完全支持database/sql接口
15
- - 支持keepalive,保持长连接,虽然星星fork了mymysql也支持keepalive,但是不是线程安全的 ,这个从底层就支持了keepalive。
15
+ - 支持keepalive,保持长连接,虽然 [ 星星 ] ( http://www.mikespook.com ) fork的mymysql也支持keepalive,但不是线程安全的 ,这个从底层就支持了keepalive。
16
16
17
17
##示例代码
18
- 接下来的几个小节里面我们都采用同一个数据库表结构,我们新建一个数据库test,新建用户表userinfo ,关联用户信息表userdetail。
18
+ 接下来的几个小节里面我们都将采用同一个数据库表结构:数据库test,用户表userinfo ,关联用户信息表userdetail。
19
19
20
20
CREATE TABLE `userinfo` (
21
21
`uid` INT(10) NOT NULL AUTO_INCREMENT,
@@ -32,7 +32,7 @@ Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持data
32
32
PRIMARY KEY (`uid`)
33
33
)
34
34
35
- 看下面这个Go如何操作数据库表数据:增删改查
35
+ 如下示例将示范如何使用database/sql接口对数据库表进行增删改查操作
36
36
37
37
package main
38
38
Original file line number Diff line number Diff line change @@ -5,11 +5,11 @@ SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置
5
5
##驱动
6
6
Go支持sqlite的驱动也比较多,但是好多都是不支持database/sql接口的
7
7
8
- -https://github.com/mattn/go-sqlite3 支持database/sql接口,基于cgo写的
9
- -https://github.com/feyeleanor/gosqlite3 不支持database/sql接口,基于cgo写的
10
- -https://github.com/phf/go-sqlite3 不支持database/sql接口,基于cgo写的
8
+ - https://github.com/mattn/go-sqlite3 支持database/sql接口,基于cgo(关于cgo的知识请参看官方文档或者本书后面的章节)写的
9
+ - https://github.com/feyeleanor/gosqlite3 不支持database/sql接口,基于cgo写的
10
+ - https://github.com/phf/go-sqlite3 不支持database/sql接口,基于cgo写的
11
11
12
- 我们看到目前支持database /sql的SQLite数据库驱动只有第一个,我目前采用的也是第一个驱动进行开发的 。采用标准接口有利于以后出现更好的驱动的时候做迁移。
12
+ 目前支持database /sql的SQLite数据库驱动只有第一个,我目前也是采用它来开发项目的 。采用标准接口有利于以后出现更好的驱动的时候做迁移。
13
13
14
14
##实例代码
15
15
示例的数据库表结构如下所示,相应的建表SQL:
Original file line number Diff line number Diff line change @@ -4,16 +4,17 @@ PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系
4
4
5
5
PostgreSQL和MySQL比较,它更加庞大一点,因为它是用来替代Oracle而设计的。所以在企业应用中采用PostgreSQL是一个明智的选择。
6
6
7
- 现在MySQL被Oracle收购之后,有传闻Oracle正在逐步的封闭MySQL,也许将来我们会选择PostgreSQL作为我们后端数据库 。
7
+ 现在MySQL被Oracle收购之后,有传闻Oracle正在逐步的封闭MySQL,,鉴于此,将来我们也许会选择PostgreSQL而不是MySQL作为项目的后端数据库 。
8
8
9
9
##驱动
10
- Go实现的支持PostgreSQL的驱动还是挺多的,发现国外很多人使用这个数据库 。
10
+ Go实现的支持PostgreSQL的驱动也很多,因为国外很多人在开发中使用了这个数据库 。
11
11
12
12
- https://github.com/bmizerany/pq 支持database/sql驱动,纯Go写的
13
13
- https://github.com/jbarham/gopgsqldriver 支持database/sql驱动,纯Go写的
14
14
- https://github.com/lxn/go-pgsql 支持database/sql驱动,纯Go写的
15
15
16
- 这里演示我采用了第一个驱动,这个库目前在Go里面使用的人多,在github上也比较活跃。
16
+ 在下面的示例中我采用了第一个驱动,因为它目前使用的人最多,在github上也比较活跃。
17
+
17
18
##实例代码
18
19
数据库建表语句:
19
20
@@ -111,8 +112,9 @@ package main
111
112
}
112
113
}
113
114
115
+ 从上面的代码我们可以看到,PostgreSQL是通过` $1 ` ,` $2 ` 这种方式来指定要传递的参数,而不是MySQL中的` ? ` ,另外在sql.Open中的dsn信息的格式也与MySQL的驱动中的dsn格式不一样,所以在使用时请注意它们的差异。
114
116
115
- 上面的代码我们可以看到,PostgreSQL传递参数是通过 ` $1 ` , ` $2 ` 这种方式来指定要传递的参数,而不是MySQL中的 ` ? ` ,所以在处理的时候稍微有点不一样。 还有pg不支持LastInsertId函数,因为PostgreSQL内部没有实现类似MySQL的自增ID返回,其他的代码几乎是一模一样。
117
+ 还有pg不支持LastInsertId函数,因为PostgreSQL内部没有实现类似MySQL的自增ID返回,其他的代码几乎是一模一样。
116
118
117
119
## links
118
120
* [ 目录] ( < preface.md > )
You can’t perform that action at this time.
0 commit comments