您的位置:首页 > 数据库 > MySQL

R语言使用RMySQL连接及读写Mysql数据库

2017-04-05 13:59 495 查看
简单说下安装过程,一般不会有问题,重点是RMySQL的使用方式。

系统环境说明

Redhat系统:Linux 460-42.6.32-431.29.2.el6.x86_64

系统编码:LANG=zh_CN.UTF-8(中文UTF-8格式)

MySQL版本:mysql Ver 14.14 Distrib 5.1.73, forredhat-linux-gnu (x86_64) using readline 5.1



安装mysql

1. 查看是否安装

yum list installed mysql*

2. 查看现有安装包

yumlist mysql*

3. 安装mysql服务器端

yuminstall mysql-devel

yuminstall mysql-server

4. 设置mysql默认字符和引擎

vim/etc/my.cnf

在[mysqld]下添加

default-character-set=utf8

default-storage-engine=INNODB

5. mysql启动和关闭

/etc/init.d/mysqld start

/etc/init.d/mysqld stop

6. 设置开机mysql启动

/sbin/chkconfig - - list

/sbin/chkconfig add mysqld

/sbin/chkconfig mysqld on

参考:redhat下mysql安装与使用

安装RMySQL

install.packages(“RMySQL”)

使用RMySQL操作数据库

[plain] view plain copy

library(RMySQL)

help(package=”RMySQL”) #查看RMySQL的说明文档,里面有RMySQL所有可用的方法

#创建数据库连接

con <- dbConnect(MySQL(),host="host",dbname="test_dw",user="user",password="password")

#获取连接信息,查看database下所有表,以及删除testname表

summary(con)

dbGetInfo(con)

dbListTables(con)

dbRemoveTable(con,"test")



[plain] view plain copy

#写数据库表

fruits <-data.frame(id=1:5,name=c("苹果","香蕉","梨子","玉米","西瓜"),price=c(8.8,4.98,7.8,6,2.1),status=c("无","打折","无","售罄","批发"))

dbListTables(con)

dbWriteTable(con,"fruits",fruits)

dbListTables(con)



[plain] view plain copy

#读数据库

dbReadTable(con,"fruits")#中文出现乱码,这是因为字符编码格式不统一的问题

dbSendQuery(con,'SET NAMES uftf8')

dbReadTable(con,"fruits")#没有乱码问题了





[plain] view plain copy

#写数据表,覆盖追加

testA <-data.frame(id=1:6,e=c("a","b","c","d","e","f"),c=c("我","的","世","界","变","得"))

testB <-data.frame(id=7:13,e=c("g","h","i","j","k","l","m"),c=c("奇","妙","跟","难","以","言","喻"))

#直接写testA写入test表中

dbWriteTable(con,"test",testA,row.names=F)

dbReadTable(con,"test")

#追加写testB追加在test表后

dbWriteTable(con,"test",testB,append=T,row.names=F)

dbReadTable(con,"test")

#覆盖写testB覆盖test表

dbWriteTable(con,"test",testB,overwrite=T,row.names=F)

dbReadTable(con,"test")



[plain] view plain copy

#用SQL语句查询dbGetQuery()和dbSendQuery()两种方法

dbGetQuery(con, "SELECT * FROM fruits limit 3")

res <- dbSendQuery(con, "SELECT *FROM fruits")

data <- dbFetch(res, n=2) #取前2条数据,n=-1时是获取所有数据

data

data <- dbFetch(res, n=-1) #取余下所有数据

data

dbClearResult(res)

dbDisconnect(con) #断开连接



[plain] view plain copy

#用SQL语句批量查询

con <- dbConnect(MySQL(),host="host",dbname="test_dw",user="user",password="password",client.flag= CLIENT_MULTI_STATEMENTS) #client.flag设置这样支持批量查询

dbSendQuery(con,'SET NAMES utf8')

sql <- "SELECT * FROM fruits;SELECT * FROM test"

res1 <- dbSendQuery(con,sql)

dbFetch(res1, n = -1)

if (dbMoreResults(con)) {

res2 <- dbNextResult(con)

dbFetch(res2, n = -1)

}

dbListResults(con)

dbClearResult(res1)

dbClearResult(res2)

dbDisconnect(con)



参考:RMySQL数据库编程指南

有任何问题或建议欢迎提出!

转载请务必注明来源,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: