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