1 RMySQL설치 및 로딩

# install.packages("RMySQL") #이미 서버에 설치되었음
library(RMySQL)
## Loading required package: DBI

2 DB접속

my_uid <- "자신의 DB접속ID"
my_pwd <- "나의 DB접속 패스워드"
my_db <- "사용할 DB이름"
my_con <- dbConnect(MySQL(), user=my_uid, password=my_pwd, port=3306,
                   dbname=my_db, host="127.0.0.1")

3 DB테이블 목록 보기

dbListTables(my_con)
## [1] "TABLE 2"   "USArrests" "news"      "pet"       "pet1"     
## [6] "t1"        "t2"

4 SQL을 이용하여 DB 테이블의 정보를 R 데이터프레임으로 가져오기

  1. dbSendQuery
    • DB connection(my_com)에서 SQL문 실행
    • 결과는 DBIResult 객체로 반환되며
    • 이를 데이터프레임으로 변환하려면 dbFetch()를 실행하여야 함
    query <-"SELECT * FROM jskim.pet;"
    a <- dbSendQuery(my_con, query)
    pet1 <- dbFetch(a)
    pet1
    ##     name  owner species sex      birth      death
    ## 1 bowser dianne     dog   m 1989-08-31 1995-07-29
    # dbSendQuery()로 생성된 DBIResult 객체를 메모리에서 삭제
    dbClearResult(a) 
    ## [1] TRUE
  2. dbGetQuery: SQL실행결과 데이터를 데이터프레임으로 바로 생성

    pet2 <- dbGetQuery(my_con, "SELECT * FROM jskim.pet")
    pet2
    ##     name  owner species sex      birth      death
    ## 1 bowser dianne     dog   m 1989-08-31 1995-07-29

5 R데이터프레임을 DB테이블로 보내기

dbWriteTable(my_con, "mtcars", mtcars[1:20, ])
## [1] TRUE
dbListTables(my_con)
## [1] "TABLE 2"   "USArrests" "mtcars"    "news"      "pet"      
## [6] "pet1"      "t1"        "t2"
dbCreateTable(my_con, "iris", iris)
dbListTables(my_con)
## [1] "TABLE 2"   "USArrests" "iris"      "mtcars"    "news"     
## [6] "pet"       "pet1"      "t1"        "t2"

6 DB테이블 가져오기

m <- dbReadTable(my_con, "mtcars")
head(m)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

7 Disconnect

dbDisconnect(my_con)
## [1] TRUE