用R語言做數(shù)據(jù)分析時(shí),常常需要從多種數(shù)據(jù)源取數(shù)據(jù),其中數(shù)據(jù)庫是非常常見的數(shù)據(jù)源。用R操作MySQL數(shù)據(jù)庫,可以說是數(shù)據(jù)分析師必備的技能了,本文介紹RMySQL包,可以在R語言中對數(shù)據(jù)庫進(jìn)行增刪改查的操作。
軟件版本
- win10 64bit
- r3.6.1
- rstudio 1.2
- RMySQL 0.10.20
安裝包
install.packages('RMySQL')
創(chuàng)建連接
用dbConnect函數(shù)創(chuàng)建連接,驅(qū)動類型設(shè)置為MySQL(),用戶名user、密碼password、主機(jī)host、端口port、數(shù)據(jù)庫dbname這些參數(shù)需要根據(jù)實(shí)際情況修改,其中端口port默認(rèn)值是3306。
# 加載包
library(RMySQL)
# 創(chuàng)建連接
con <- dbConnect(MySQL(),
user="root",
password="xxx",
host="192.168.1.244",
port=3306,
dbname="test")
還可以通過一些命令,查看連接的相關(guān)信息。
# 連接概述
summary(con)
## <MySQLConnection:0,5>
## User: root
## Host: 192.168.1.244
## Dbname: test
## Connection type: 192.168.1.244 via TCP/IP
##
## Results:
# 連接詳情
dbGetInfo(con)
## $host
## [1] "192.168.1.244"
##
## $user
## [1] "root"
##
## $dbname
## [1] "test"
##
## $conType
## [1] "192.168.1.244 via TCP/IP"
##
## $serverVersion
## [1] "5.7.23"
##
## $protocolVersion
## [1] 10
##
## $threadId
## [1] 465075
##
## $rsId
## list()
# 列出連接下所有表
dbListTables(con)
## [1] "city" "result"
## [3] "t_json" "tb_newChiller"
創(chuàng)建表
dbCreateTable函數(shù)創(chuàng)建表
# 方法1:字符向量
dbCreateTable(con,'table1',fields =c("id"='int',"value"="float"))
# 方法2:數(shù)據(jù)框
dbCreateTable(con,'table2',fields = mtcars)
注意點(diǎn):
- 設(shè)置fields參數(shù)時(shí),用命名的字符向量(名字為字段名,值為字段數(shù)據(jù)類型)或數(shù)據(jù)框表示
- 表只能創(chuàng)建一次,重復(fù)創(chuàng)建會報(bào)錯。
sql語句創(chuàng)建表
運(yùn)行dbSendQuery函數(shù),調(diào)用sql語句創(chuàng)建表,該函數(shù)返回一個RMySQLResult類。該方法可以重復(fù)運(yùn)行,不會報(bào)錯。
# 方法3:sql語句
dbSendQuery(con,'create table if not exists table3(id int,value float)')
## <MySQLResult:11,5,3>
讀取表
dbReadTable函數(shù)讀取表
# 先設(shè)置編碼(windows)
dbSendQuery(con,'set names gbk')
## <MySQLResult:11,5,4>
# 讀取完整表
dbReadTable(con,'city')
## id name city_code
## 1 1 北京 000001
## 2 4 南京 000002
## 3 7 廣州 000003
## 4 10 上海 000004
## 5 11 深圳 000005
## 6 13 蘇州 000006
注意點(diǎn):
- 返回的是整個表的數(shù)據(jù)
- 為解決中文顯示問題,若運(yùn)行R的操作系統(tǒng)為window,需要設(shè)置編碼為gbk,為Linux則需要設(shè)置為utf8
- 返回的數(shù)據(jù)格式為data.frame
sql語句讀取表
通過運(yùn)行dbGetQuery或dbSendQuery函數(shù),調(diào)用sql語句讀取表。
dbGetQuery函數(shù)運(yùn)行sql語句,返回data.frame??梢栽趕ql語句中編寫篩選語句。
# 讀取完整表
dbGetQuery(con,'select * from city')
## id name city_code
## 1 1 北京 000001
## 2 4 南京 000002
## 3 7 廣州 000003
## 4 10 上海 000004
## 5 11 深圳 000005
## 6 13 蘇州 000006
# 讀取篩選的表
dbGetQuery(con,'select id,name from city where id > 10')
## id name
## 1 11 深圳
## 2 13 蘇州
dbSendQuery函數(shù)運(yùn)行sql語句,返回MySQLResult類。對該類使用dbFetch函數(shù),可以篩選行,返回data.frame。用完后需要用dbClearResult函數(shù)清理結(jié)果。
# 篩選前3行數(shù)據(jù)
res <- dbSendQuery(con,'select * from city')
dbFetch(res,3)
## id name city_code
## 1 1 北京 000001
## 2 4 南京 000002
## 3 7 廣州 000003
dbClearResult(res)
## [1] TRUE
寫入表
dbWriteTable函數(shù)寫入表
# 寫入表
dbWriteTable(con,"iris",iris,row.names=FALSE,append=TRUE)
## [1] TRUE
注意點(diǎn):
- 第一次寫入時(shí),若數(shù)據(jù)庫中無該表,會根據(jù)表名自動創(chuàng)建
- 重復(fù)寫入時(shí),需要設(shè)置寫入行為:
參數(shù)設(shè)置 | 解釋 |
---|---|
append=TRUE | 追加寫入,新數(shù)據(jù)在原數(shù)據(jù)行末添加 |
overwrite=TRUE | 覆蓋寫入,新數(shù)據(jù)覆蓋原數(shù)據(jù) |
row.names=FALSE | 不寫入數(shù)據(jù)框的行名 |
- append和overwrite兩個參數(shù)不能同時(shí)設(shè)置為TRUE。
sql語句插入數(shù)據(jù)
運(yùn)行dbSendStatment函數(shù),調(diào)用sql語句插入數(shù)據(jù)。
dbSendStatement(con,'insert into table1 values(1,12)')
## <MySQLResult:1701147206,5,12>
注意點(diǎn):
- 重復(fù)運(yùn)行會重復(fù)插入數(shù)據(jù)
刪除表
用dbRemoveTable函數(shù)刪除表。
# 刪除表
dbRemoveTable(con,'table1')
## [1] TRUE
dbRemoveTable(con,'table2')
## [1] TRUE
dbRemoveTable(con,'table3')
## [1] TRUE
dbRemoveTable(con,'iris')
## [1] TRUE
完成所有的操作后,需要關(guān)閉連接。
# 關(guān)閉連接
dbDisconnect(con)
## [1] TRUE
到此這篇關(guān)于R語言實(shí)現(xiàn)操作MySQL數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)R語言操作MySQL內(nèi)容請搜索html5模板網(wǎng)以前的文章希望大家以后多多支持html5模板網(wǎng)!