R 關係型資料庫管理

2021-09-20 01:35:31 字數 3056 閱讀 8508

基本要求: r語言基礎,懂得一定sql語法, 懂得使用搜尋引擎

目標: 學會使用dbi操作sqlite資料庫

r本身不具備資料庫操作能力,需要額外的擴充套件包--dbi(database inte***ce)。dbi將資料庫管理分為前端和後端。使用者在前端使用對應的api, 經由dbi轉換成相應的底層操作.

dbi分為三個部分:

dbi結構

首先載入r包

library(dbi)

library(rsqlite)

第一步: 連線或建立資料庫:dbconnect,建立連線物件,後續的操作都基於該物件。

常用命令為:dbexecutedbsendstatement, 前者適用於資料量不大時,後者適用資料量較大時

# 新建或連線已有的磁碟上資料庫

con

# 臨時在記憶體中建立

con

引數1: 資料庫驅動引擎(rsqlite::sqlite());

引數2: 資料庫連線引數(如user, password, host, port, dbname),sqlite只需要提供資料庫命名(不存在則新建),:memory: 則表示在僅儲存在記憶體中.

第二步: 在r上實現資料庫的常用操作:增刪改查

:建立表並增加記錄

# 匯入已有的資料框, 引數為「連線物件, 表名,資料框」

dbwritetable(con, 'mtcar', mtcars )

# 建立新錶

dbexecute(con, 'create table test (name char(10), age int(10))')

dbexecute(con, 'insert into test (name, age) values ("tom", 25), ("jelly",26)')

# 資料量過大,可以批次插入

rs dbhascompleted(rs) # 判斷操作是否完成

dbgetrowaffected(rs) # 返回影響的行

dbclearresult(rs) # 清空記憶體

: 有兩種方法, 一類獲取所有資料,一類分批獲取資料

# 方法1

dbgetquery(con, 'select * from test')

# 方法2

con

dbwritetable(con, "mtcars", mtcars)

rs dbfetch(rs, n=10) # 獲取10行

dbfetch(rs, n=10) # 再獲取10行

dbclearresult(rs) # 清空rs控制代碼中的內容

dbdisconnect(con)

: 刪除記錄

# 刪除記錄前,要先查詢

dbgetquery(con, 'select * from mtcar where mpg > 30')

# 刪除記錄

dbexecute(con, 'delete from mtcar where mpg > 30')

# 刪除所有記錄,謹慎操作

dbexecute(con, 'drop table test')

dbremovetable(con, 'test')

: 修改記錄

# 修改記錄前也是先查詢

dbgetquery(con, 'select * from mtcar where am ==1')

# 然後我們將mpg=21,且qsec=16.46 記錄 的mpg修改為21.1

dbexecute(con, 'update mtcar set mpg = 21.1 where mpg =21.0 and qsec =16.46')

# 事後驗證

dbgetquery(con, 'select * from mtcar where mpg = 21.1')

一般而言,增查改刪操作最好能夠有反悔藥。dbbegin(con)會記錄一系列操作,直到你呈交修改dbcommit(con)回滾修改dbrollback(con)

con 

dbwritetable(con, "cash", data.frame(amount = 100))

# 測試dbcommit

dbbegin(con)

withdrawal

dbexecute(con, "update cash set amount = amount + ?", list(withdrawal))

dbcommit(con)

# 測試回滾

dbbegin(con)

withdrawl

dbexecute(con, "update cash set amount = amount + ?", list(withdrawal))

## 檢視結果

dbgetquery(con,'select * from cash')

## 回滾

dbrollback(con)

## 檢查結果

dbgetquery(con,'select * from cash')

所有操作完畢,結束連線dbdisconnect(con)下面一些命令也比較常用,用法比較簡單。

最後感言:感謝自己大學時候看過幾本sql語法書,雖然忘得差不多了。

關係型資料庫 非關係型資料庫

關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...

關係型資料庫 非關係型資料庫

2019 02 25 20 38 36 關係型資料庫和非關係型資料的比較 一 關係型資料庫 關係型資料庫最典型的資料結構是表,由二維表及其之間的聯絡所組成的乙個資料組織 優點 1 易於維護 都是使用表結構,格式一致 2 使用方便 sql語言通用,可用於複雜查詢 3 複雜操作 支援sql,可用於乙個表...

關係型資料庫與非關係型資料庫

關係型資料庫與非關係型資料庫的區別 非關係型資料庫的優勢 1.效能 nosql是基於鍵值對的,可以想象成表中的主鍵和值的對應關係,而且不需要經過sql層的解析,所以效能非常高。2.可擴充套件性 同樣也是因為基於鍵值對,資料之間沒有耦合性,所以非常容易水平擴充套件。關係型資料庫的優勢 1.複雜查詢 可...