CRAN 的包 RMySQL 提供了MySQL数据库系统的接口(见
http://www.mysql.com 和 Dubois,2000)。
这里的描述用于版本 0.5-0:早期版本有很多不一样的接口。
当前版本需要 DBI,这里的描述通过少量修改也可用于其它
支持DBI包的后端。
MySQL存在于 Unix/Linux 和 Windows 上面:从3.23.x版本开始(2001年1月), 它以GPL协议发布。MySQL是一个`轻量级'(light and lean)的数据库。 (在大小写敏感的文件操作系统,它支持名字的大小写。注意,Windows系统里面文件名大小写 不敏感。)1 包RMySQL在Linux和Windows系统上都可以使用。
dbDriver("MySQL") 的调用会返回一个数据库连接管理对象,然后
调用dbConnect打开一个数据库连接,随后会调用泛型函数
dbDisconnect 来关闭这个连接。
对于,ORACLE和SQLITE系统,分别使用ROracle 或 RSQLite
里面的dbDriver("Oracle") 函数或 dbDriver("SQLite")
函数。
SQL 查询可以通过dbSendQuery或
dbGetQuery 传给数据库管理系统。dbGetQuery 传送查询语句,
把结果以数据框形式返回。dbSendQuery 传送查询,返回的结果是
继承"DBIResult"的一个子类的对象。"DBIResult" 类
可用于取得结果,而且还可以通过调用 dbClearResult
清除结果。
函数 fetch 用于获得查询结果的部分或全部行,并以列表返回。
函数 dbHasCompleted 确定是否所有行已经获得了,
而 dbGetRowCount 返回结果中行的数目。
这些是数据库中读/写/测试/删除表的方便接口。
dbReadTable 和 dbWriteTable
实现一个 R 数据框的复制进和复制出数据库,
把数据框的行名字映射到 MySQL 表的
row_names 字段。
> library(RMySQL) # will load DBI as well
## 打开一个MySQL数据库的连接
> con <- dbConnect(dbDriver("MySQL"), dbname = "test")
## 列出数据库中表
> dbListTables(con)
## 把一个数据框导入到数据库,删除任何已经存在的拷贝
> data(USArrests)
> dbWriteTable(con, "arrests", USArrests, overwrite = TRUE)
TRUE
> dbListTables(con)
[1] "arrests"
## 获得整个表
> dbReadTable(con, "arrests")
Murder Assault UrbanPop Rape
Alabama 13.2 236 58 21.2
Alaska 10.0 263 48 44.5
Arizona 8.1 294 80 31.0
Arkansas 8.8 190 50 19.5
...
## 从导入的表中查询
> dbGetQuery(con, paste("select row_names, Murder from arrests",
"where Rape > 30 order by Murder"))
row_names Murder
1 Colorado 7.9
2 Arizona 8.1
3 California 9.0
4 Alaska 10.0
5 New Mexico 11.4
6 Michigan 12.1
7 Nevada 12.2
8 Florida 15.4
> dbRemoveTable(con, "arrests")
> dbDisconnect(con)
[1] 译者注:MySQL给数据库表命名的时候要小心一点。SQL标准里面,表的
大小写不敏感,但MySQL在Linux下面可能大小写敏感。此时可以通过-O lower_case_table_names=1
参数启动 mysqld,把表名字统一变成小写。