SQLite之基礎篇

一、SQLite3簡介

SQLite是嵌入式關係型數據庫引擎。它是一個獨立的、無服務器、零配置、事務型SQL數據庫引擎。它流行世界各地,被用於Solaris 十、Mac OS、Android、iPhone中。Qt四、Python、PHP都有內置的SQLite。許多流行的應用也都使用SQLite,如Firefox、Google Chrome、Amarok。適合桌面程序和小型網站的數據庫服務器。SQLite直接讀寫在硬盤上的數據庫文件。
優點sql

  1. 易於管理,甚至能夠認爲是無需管理。數據庫

  2. 操做方便,SQLite生成的數據庫文件可在各個平臺無縫移植。緩存

  3. 能夠多種形式嵌入到的其它應用程序中,如靜態庫、動態庫等。bash

  4. 易於維護和配置,爲零配置。完整配置的少於 250KB,忽略一些可選特性的少於 150KB。服務器

  5. 沒有獨立的服務器,其運行環境與主程序位於同一進程空間,所以它們之間的通訊徹底是進程內通訊,而相比於進程間通訊,其效率更高。網絡

  6. 單一磁盤文件,只要有權限即可隨意訪問和拷貝,便於攜帶和共享。併發

劣勢工具

  1. 因爲SQLite的數據管理機制更多的依賴於OS的文件系統,所以在多用戶訪問數據庫數據時,特別是數據操做經過網絡傳輸完成時,其效率較低。性能

  2. 受限於操做系統的文件系統,處理大數據時,效率較低,對於超大數據量,甚至不能支持。支持最大可達 2T 的數據庫。大數據

  3. SQLite僅僅提供了粒度很粗的數據鎖,如讀寫鎖,所以在每次加鎖操做中都會有大量的數據被鎖住,即僅有極小部分的數據會被訪問。在這種同步機制下,併發性能很難高效。

在gentoo下安裝SQLite3:

$ sudo emerge -avt dev-db/sqlite

二、SQL(Structured Query Language)語言基本語法

2.1 數據庫操做

1) 新建數據庫

$ sqlite3 test.db
SQLite version 3.8.11.1 2015-07-29 20:00:57
Enter ".help" for usage hints.
sqlite>

2) 數據庫備份

sqlite3 test.db .dump > test.sql //數據庫備份

或者

sqlite> .output test.sql
sqlite> .dump
sqlite> .exit

3) 導入一個備份

sqlite3 test.db < test.sql

4) 卸載將當前鏈接中的指定數據庫

sqlite> DETACH DATABASE mydb;

5) ATTACH DATABASE語句

添加另一個數據庫文件到當前的鏈接中,":memory:"爲內存數據庫。

sqlite> ATTACH DATABASE '~/tmp/mydb.db' AS mydb;

2.2 建立數據表

1) 最簡單的數據表

sqlite> CREATE TABLE testtable (first_var integer);

注意:testtable不要以sqlite_開頭,由於該前綴定義的表名都用於sqlite內部.

2) 建立帶有缺省值的數據表

sqlite> CREATE TABLE testtable (first_col integer DEFAULT 0, second_col varchar DEFAULT 'hello');

3) 在指定數據庫建立表

sqlite> ATTACH DATABASE '~/tmp/mydb.db' AS mydb;//mydb.db不必定存在
sqlite> CREATE TABLE mydb.testtable (first_col integer);

4) IF NOT EXISTS從句

若是你要建立的數據表已存在,則使用以前的建立表語句會發生錯誤,這就須要加上IF NOT EXISTS從句.

sqlite> CREATE TABLE IF NOT EXISTS testtable (first_col integer);

5) CREATE TABLE ... AS SELECT

新建立的表將會包含SELECT查詢返回的結果集的全部數據,可是不包含缺省值和主鍵等約束信息。

sqlite> CREATE TABLE testtable2 AS SELECT * FROM testtable;
sqlite> .schema testtable2
CREATE TABLE testtable2(first_col INT);

6) 主鍵約束:

sqlite> CREATE TABLE testtable (first_col integer PRIMARY KEY ASC);//ASC

聯合主鍵

sqlite> CREATE TABLE testtable2 (first integer, second integer, PRIMARY KEY (first_col,second_col));

7) 惟一性約束

sqlite> CREATE TABLE testtable (first_col integer UNIQUE);

兩個列的惟一性約束

sqlite> CREATE TABLE testtable2 (first integer, second integer, UNIQUE (first_col,second_col));

8) 爲空(NOT NULL)約束

sqlite> CREATE TABLE testtable(first_col integer NOT NULL);

9) 檢查性約束

sqlite> CREATE TABLE testtable (first_col integer CHECK (first_col < 5));

2.3 數據表的修改

1) 修改表名

SQLite中表名的修改只能在同一個數據庫,表名被修改後,該表已存在的索引將不會受到影響,然而依賴該表的視圖和觸發器將不得不從新修改其定義。

sqlite> ALTER TABLE testtable RENAME TO testtable2;

2) 新增字段

sqlite> ALTER TABLE testtable ADD COLUMN second_col integer;

2.4 表的刪除

sqlite> DROP TABLE testtable;
sqlite> DROP TABLE IF EXISTS testtable;

2.5 插入數據

sqlite> INSERT INTO testtable VALUES(2);

2.6 顯示數據表的數據

爲了增減輸出的易讀性

sqlite> .echo on
sqlite> .mode on
sqlite> .headers on
sqlite> .nullvalue NULL

顯示語法

sqlite> SELECT * FROM testtablel;
sqlite> SELECT fisrt FROM testtablel;

2.7 數據表中數據的操做

1) 更新數據表裏的某些數據

sqlite> UPDATE testtable SET first=2 WHERE ID = 1;

2) 刪除數據表中的所有數據

sqlite> DROP FROM testtable;

3) 刪除數據表中的某些數據

sqlite> DROP FROM testtable WHERE ID = 1 AND NAME = yxg;

2.8 事務:

若是沒有爲當前的SQL命令(SELECT除外)顯示的指定事務,那麼SQLite會自動爲該操做添加一個隱式的事務,以保證該操做的原子性和一致性。

sqlite> BEGIN TRANSACTION;
sqlite> INSERT INTO testtable VALUES(1);
sqlite> INSERT INTO testtable VALUES(2);
sqlite> COMMIT TRANSACTION;--顯示事務被提交,數據表中的數據也發生了變化。
sqlite> SELECT COUNT(*) FROM testtable;
COUNT(*)
2
sqlite> BEGIN TRANSACTION;
sqlite> INSERT INTO testtable VALUES(1);
sqlite> ROLLBACK TRANSACTION; --顯示事務被回滾,數據表中的數據沒有發生變化。
sqlite> SELECT COUNT(*) FROM testtable;
COUNT(*)
2

三、數據類型

3.1 存儲種類

SQLite將數據值的存儲劃分爲如下幾種存儲類型:
NULL: 表示該值爲NULL值。
INTEGER: 無符號整型值。
REAL: 浮點值。
TEXT: 文本字符串,存儲使用的編碼方式爲UTF-八、UTF-16BE、UTF-16LE。
BLOB: 存儲Blob數據,該類型數據和輸入數據徹底相同。

3.2 比較表達式

"=", "==", "<", "<=", ">", ">=", "!=", "<>", "IN", "NOT IN", "BETWEEN", "IS" and "IS NOT"。

四、命令行工具

.help //列出全部內置命令
.tables TABLENAME //顯示當前鏈接的數據庫中的全部數據表,若指定表名,僅顯示匹配的數據表,TABLENAME支持LIKE表達式。
.backup ~/tmp/test.db //將當前鏈接中的緩存數據導出到本地文件。
.schema //是sqlite3命令行工具的內置命令,用於顯示當前數據表的CREATE TABLE語句。
.exit //退出當前鏈接。
.databases //列出當前連接中全部attached數據庫名和文件名。
.echo ON|OFF //打開或關閉顯示輸出。
.header(s) ON|OFF //在顯示SELECT結果時,是否顯示列的標題。
.import FILE TABLE //導入指定文件到指定表。
.mode MODE TABLENAME //設置輸出模式,經常使用爲column,是SELECT輸出列左對齊顯示。
.read FILENAME//執行指定文件內的SQL語句。

相關文章
相關標籤/搜索