RMySQL 讓 R 直接以 DataFrame 形式讀寫 MySQL,極大簡化統計分析與持久化流程。本文涵蓋安裝、連線、寫表、讀表、斷開五大核心操作,並補充連線池、大數據分塊讀寫、事務控制進階技巧。
install.packages("RMySQL")
library(RMySQL)
conn <- dbConnect(MySQL(),
dbname = "rmysql",
username = "rmysql",
password = "rmysql",
host = "127.0.0.1",
port = 3306)
# 寫入 DataFrame 到表(自動建表、類型映射) dbWriteTable(conn, "tablename", data) # 讀取整表為 DataFrame df <- dbReadTable(conn, "tablename") # 關閉連線 dbDisconnect(conn)
dbGetQuery(conn, "SELECT * FROM big_table LIMIT 100000 OFFSET 0") 迴圈讀取,避免記憶體爆炸。dbGetQuery(conn, "SELECT * FROM t WHERE id = ?", params = list(123))dbBegin(conn) dbExecute(conn, "INSERT ...") dbExecute(conn, "UPDATE ...") dbCommit(conn) # 或 dbRollback(conn)
pool 包 dbPool 管理連線生命週期。| 錯誤 | 原因 | 對策 |
|---|---|---|
| Can't connect to MySQL server | 主機/端口/防火牆 | 檢查 bind-address、安全組、GRANT ...@'%' |
| Authentication plugin 'caching_sha2_password' not supported | MySQL 8.0 預設插件 RMySQL 不支援 | ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd'; |
| Data truncated for column | DataFrame 列類型與表定義不符 | 寫入前 str(df) 檢查,必要時 as.character/as.numeric 強制轉型 |