本文首先介绍如何在 Fedora 29 系统上安装配置 MySQL 数据库管理系统,然后介绍如何从 R 连接 MySQL,连接上数据库之后,介绍SQL与R的等价数据操作,几个常用的数据存储类型、基本操作命令和一个小技巧 --- 生成数据库表的字段描述。
安装配置 MySQL
MySQL 是 Oracle (甲骨文)公司出品的一款数据库管理系统,社区版以 GPL 2.0 协议开源。MySQL 之前长时间以来由 Sun 公司开发和维护,后来 Oracle 买了 Sun,MySQL 就转入 Oracle 门下。尽管 MySQL 一直开源的,但是其原作者不想被 Oracle 牵着走,所以创立了 MariaDB,也保证保持开源状态,那批早期的 MySQL 开发者因为拥有了更多的自主权(比如 Oracle 可能不接受你贡献的代码)已经跑到 MariaDB 这杆旗下,下游的其它语言的接口,比如 RMySQL 包正逐步被 RMariaDB 包替换,MySQL Server 也必将逐步被 MariaDB Server 替换。
本文介绍的 MariaDB Server 版本为 10.3.18,系统环境为 Fedora 29,在本文环境下,完全可以将 MariaDB Server 看作 MySQL Server。首先从 Fedora 29 系统仓库安装开源版 MariaDB Server。
# 安装开源版 MariaDB Server
`sudo dnf install -y mariadb-devel # 这是在 Fedora 29 系统上# 启动 mysql 服务
sudo systemctl start mariadb.service# 设置开机启动
sudo systemctl enable mariadb.service`
或者从 MySQL 官网获取 Oracle 出品的开源社区版,这需要先导入安装源。
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-fc29-2.noarch.rpm
`# 从 Oracle 仓库安装开源版sudo dnf install mysql-community-server
# 启动 mysql 服务sudo systemctl start mysqld.service
# 设置开机启动`sudo systemctl enable mysqld.service
除了红帽系的 Fedora 系统,MySQL 还支持 CentOS/Ubuntu/MacOS/Windows 等系统,开源软件一大特点就是跨系统平台,支持的系统和版本详见 MySQL 官网下载页面。
下面进入 MySQL 数据库管理系统,默认状态下,只有 root 账户,且初始密码是空的,无密码,直接回车即可登录进去。
mysql -u root -p
进入 MySQL 后可以设置新的 root 账户密码,比如这里的 xxx。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx';
接下来,在进入 MySQL 数据库管理系统后,创建一个名叫 demo 的数据库。你可能已经发现在 SQL 语法中,对关键词是不区分大小写的,比如 create 或 CREATE 都是可以的,但是在 SQL 代码中应尽量保持一致,对保留字都用大写,对自造的库名、表名、列名都用小写,我司采用的 Hive 仓库前端 HUE 就支持 SQL 语句格式化,再辅以手动调整,用起来也比较方便,这主要针对交付阶段的代码整理,以便协作和共享。一些网站也提供免费的 SQL 代码格式化工具,比如 SQLFormat。
CREATE DATABASE demo;
从 R 连接 MySQL
在安装配置好 MySQL 的情况下,准备好 R 软件和 R 扩展包:
install.packages(c('DBI','RMySQL'))
然后加载 R 包连接 MySQL 数据库,dbname 是要连接的数据库名称,host 是数据库所在的网络位置,本机常常是 localhost。远程的话,就是 IP 地址,port 是连接 MySQL 数据库系统的端口,MySQL 作为一款软件,同时也是一个数据库管理系统,要访问它,就要知道访问它的通道,默认开放的端口就是 3306,user 用来指定登录的用户,比如拥有最高权限的 root 账户或其它账户,password 就是对应的账户密码。
`library(DBI)``# 用 root 账户登录连接数据库 demo`con