sqlite簡介
編譯&安裝
拿到原始碼後,我們看到除了sqlite3.c原始檔,還有shell.c檔案。因為sqlite3.c只是乙個動態庫的原始檔,因此通過整合shell.c可以生成sqlite執行碼,簡單來說就是sqlite3的客戶端。
1) 編譯命令列管理工具
gcc shell.c sqlite3.c -lpthread -ldl -o sqlite3
2) 編譯動態鏈結庫
gcc sqlite3.c -lpthread -ldl -fpic -shared -o libsqlite3.so
備註:-fpic:表示編譯為位置獨立的**,不用此選項的話編譯後的**是位置相關的,動態載入時是通過**拷貝的方式來滿足不同程序的需要, 這樣,n個程序就就需要n個動態庫的拷貝,不能達到真正**段共享的目的。
-lpthread系統庫用於支援執行緒操作。
-dl系統庫用於支援動態裝載。
3) 編譯靜態庫
gcc -c sqlite3.c -lpthread -ldl -o sqlite3.o
ar -r libsqlite3.a sqlite3.o
將列出的各個目標檔案一起打包成乙個靜態庫libsqlite3.a
sqlite3基本操作
經過第一步和第二步,我們已經有了動態庫和可執行碼,這一節主要講講sqlite客戶端的基本操作。由於sqlite支援sql-92標準,因此,在sqlite中使用sql語句與其他關係型資料庫並沒有太多差別。
1) 建立名為test.db的資料庫
sqlite3 test.db
2) 建立表t,並新增索引idx_c1
create table t1(id int primary key, c1 varchar(100));
create index idx_c1 on t1(c1);
3) 建立檢視
create view view_t1 as select * from t1;
4) 元資料查詢命令
a) .databaes 顯示資料庫物件
b) .tables 顯示表物件
c) .schema 顯示表物件建立語句
d) .indices 顯示索引物件
5) sqlite_master元資料表
sqlite中所有資料都儲存在乙個db檔案中,其中sqlite_master用於儲存元資料資訊。第4節講到的命令輸出的資料,實質都是**於sqlite_master表。sqlite_master表結構如下
type
name
tbl_name
rootpage
sql物件型別
物件名錶名
物件b樹儲存的根頁
建立物件語句
比如,查詢當前資料庫的所有物件
6) .show 顯示格式
預設查詢輸出結果可能不太容易看,可以通過設定以下引數來調整輸出。.show命令顯示了當前各種輸出引數的設定,比如我們輸出結果時,需要輸出列名,可以使用.headers on即可。其他引數,大家可以逐個試試。
sqlite> .show
echo: off
explain: off
headers: on
mode: column
nullvalue: ""
output: stdout
separator: "|"
width:
7) 匯入&匯出
sqlite備份恢復相當容易,直接拷貝db檔案就完事了。同樣sqlite也支援匯入匯出功能,相對於拷貝物理檔案方式,匯出的物件更靈活,可以只匯出資料庫中的指定物件,另外匯出檔案儲存的是sql語句,物理檔案儲存的是二進位制資料。
a) 匯出
.dump 預設匯出資料庫所有物件到螢幕
b) 匯出 t1和t2表到檔案,需要設定.output引數
.output filename
.dump t1 t2
.output stdout
c) 匯入
.read filename
SQLite學習筆記(一)
sqlite學習筆記 一 今天學習過程中發現資料庫並沒有想象中那麼容易,於是決定一些筆記來鞏固一下知識 介紹一些簡單sql語句,同時也是最為重要的基礎 sql structured query language 結構化查詢語言 該語言雖不區分大小寫,但是在閱讀方便上操作與變數區分開比較好 我拿乙個名...
sqlite 學習筆記(一)
所有的例子都是再ubuntu環境下,測試。1 使用命令 sqlite3 test.db 進入sqlite3 模式。2 headers on 查詢時顯示欄位名,經常與 mode column合用 用於改善顯示格式。3 create table test id integer primary key v...
sqlite庫學習 1 編譯sqlite
sqlite是一款輕型的資料庫,是遵守acid的關係型資料庫管理系統。它很小,只有sqlite3.h sqlite3ext.h sqlite3.c三個c語言檔案。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式裝置中,可能只需要幾百k的記憶體就夠了。它能夠...