一酗钞、基本簡(jiǎn)介
SQLite 是一個(gè)自持的(self-contained)岸裙、無服務(wù)器的揩页、零配置的旷偿、事務(wù)型的關(guān)系型數(shù)據(jù)庫(kù)引擎。因?yàn)樗苄。砸部梢宰鳛榍度胧綌?shù)據(jù)庫(kù)內(nèi)建在你的應(yīng)用程序中萍程。SQLite 被應(yīng)用在 Solaris 10操作系統(tǒng)幢妄、Mac OS 操作系統(tǒng)、iPhone 和 Skype 中茫负。QT4 蕉鸳、Python 、 PHP 都默認(rèn)支持 SQLite 忍法,F(xiàn)irefox Amarok 等流行的應(yīng)用程序在內(nèi)部也使用了SQLite.
SQLite?? 數(shù)據(jù)庫(kù)引擎實(shí)現(xiàn)了主要的SQL-92 標(biāo)準(zhǔn)潮尝,引擎本身只有一個(gè)文件,大小不到 300k 饿序,但是并不作為一個(gè)獨(dú)立的進(jìn)程運(yùn)行勉失,而是動(dòng)態(tài)或者靜態(tài)的鏈接到其他應(yīng)用程序中。它生成的數(shù)據(jù)庫(kù)文件是一個(gè)普通的磁盤文件嗤堰,可以放置在任何目錄下戴质。SQLite 本身是 C 語言開發(fā)的,開源也跨平臺(tái)踢匣,并且被所有的主流編程語言支持。
相關(guān)資源
sqlite.org
wikipedia.org
二戈抄、下載安裝
在 Windows 上安裝SQLite
??? 請(qǐng)?jiān)L問 SQLite 下載頁(yè)面离唬,從 Windows 區(qū)下載預(yù)編譯的二進(jìn)制文件。
??? 您需要下載 sqlite-shell-win32-*.zip和 sqlite-dll-win32-*.zip 壓縮文件划鸽。
??? 創(chuàng)建文件夾C:\sqlite输莺,并在此文件夾下解壓上面兩個(gè)壓縮文件,將得到 sqlite3.def裸诽、sqlite3.dll 和 sqlite3.exe 文件嫂用。
??? 添加 C:\sqlite 到 PATH 環(huán)境變量,最后在命令提示符下丈冬,使用 sqlite3 命令嘱函,將顯示如下結(jié)果。
C:\>sqlite3
SQLite version 3.7.15.2 2013-01-09 11:53:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
目前埂蕊,幾乎所有版本的Linux 操作系統(tǒng)都附帶 SQLite往弓。所以,只要使用下面的命令來檢查您的機(jī)器上是否已經(jīng)安裝了 SQLite蓄氧。
$sqlite3
SQLite version3.7.15.2 2013-01-09 11:53:05
Enter".help" for instructions
Enter SQLstatements terminated with a ";"
sqlite>
如果沒有看到上面的結(jié)果函似,那么就意味著沒有在 Linux 機(jī)器上安裝 SQLite。因此喉童,讓我們按照下面的步驟安裝 SQLite:
??? 請(qǐng)?jiān)L問 SQLite 下載頁(yè)面撇寞,從源代碼區(qū)下載 sqlite-autoconf-*.tar.gz。
??? 步驟如下:
$tar xvfzsqlite-autoconf-3071502.tar.gz
$cdsqlite-autoconf-3071502
$./configure--prefix=/usr/local
$make
$make install
上述步驟將在 Linux 機(jī)器上安裝 SQLite,您可以按照上述講解的進(jìn)行驗(yàn)證蔑担。
在 Mac OS X 上安裝SQLite
最新版本的 Mac OS
X 會(huì)預(yù)安裝 SQLite牌废,但是如果沒有可用的安裝,只需按照如下步驟進(jìn)行:
??? 請(qǐng)?jiān)L問 SQLite 下載頁(yè)面钟沛,從源代碼區(qū)下載 sqlite-autoconf-*.tar.gz畔规。
??? 步驟如下:
$tar xvfzsqlite-autoconf-3071502.tar.gz
$cdsqlite-autoconf-3071502
$./configure--prefix=/usr/local
$make
$make install
上述步驟將在 Mac OS
X 機(jī)器上安裝 SQLite,您可以使用下列命令進(jìn)行驗(yàn)證:
$sqlite3
SQLite version3.7.15.2 2013-01-09 11:53:05
Enter".help" for instructions
Enter SQLstatements terminated with a ";"
sqlite>
最后恨统,在 SQLite 命令提示符下叁扫,使用 SQLite 命令做練習(xí)。
三畜埋、基本命令
1莫绣、進(jìn)入命令行環(huán)境:sqlite3
打開一個(gè)控制臺(tái)窗口,輸入sqlite3 回車悠鞍,這時(shí)你就進(jìn)入了 SQLite 命令行環(huán)境对室,如圖
[if !vml]
[endif]
它顯示了版本號(hào),并告訴你每一條 SQL 語句必須用分號(hào)咖祭;結(jié)尾
2掩宜、命令行幫助:.help
在命令行環(huán)境下輸入.help 回車,顯示所有可使用的命令以及這些命令的幫助么翰。注意:所有的命令開頭都是一個(gè)點(diǎn)
3牺汤、退出命令行環(huán)境
.quit 或者.exit? 都可以退出
四、數(shù)據(jù)庫(kù)和表的相關(guān)命令
1浩嫌、創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù):sqlite3???? 文件名
先建立一個(gè) Db 目錄檐迟,并在 Db 目錄中創(chuàng)建一個(gè) test.db 數(shù)據(jù)庫(kù)文件,打開控制臺(tái)窗口码耐,命令如下:
mkdir Db
cd Db
sqlite3 test.db
2追迟、打開一個(gè)已經(jīng)存在的數(shù)據(jù)庫(kù):sqlite3????? 已經(jīng)存在的文件名
創(chuàng)建一個(gè)新數(shù)據(jù)庫(kù)和打開一個(gè)已經(jīng)存在的數(shù)據(jù)庫(kù)命令是一模一樣的,如果文件在當(dāng)前目錄下不存在骚腥,則新建敦间;如果存在,則打開桦沉。
3每瞒、導(dǎo)入數(shù)據(jù):.read???? 數(shù)據(jù)文件
打開記事本,并將下列SQL 語句復(fù)制到記事本中纯露,保存為 test.sql 到上面說到的 Db 目錄下剿骨,在命令行環(huán)境中輸入
1
.read?? test.sql
即將所有的數(shù)據(jù)導(dǎo)入到test.db 數(shù)據(jù)庫(kù)中。
test.db 導(dǎo)入數(shù)據(jù)
BEGINTRANSACTION;
CREATE TABLECars(Id integer PRIMARY KEY, Name text, Cost integer);
INSERT INTO CarsVALUES(1,'Audi',52642);
INSERT INTO CarsVALUES(2,'Mercedes',57127);
INSERT INTO CarsVALUES(3,'Skoda',9000);
INSERT INTO CarsVALUES(4,'Volvo',29000);
INSERT INTO CarsVALUES(5,'Bentley',350000);
INSERT INTO CarsVALUES(6,'Citroen',21000);
INSERT INTO CarsVALUES(7,'Hummer',41400);
INSERT INTO CarsVALUES(8,'Volkswagen',21600);
COMMIT;
BEGINTRANSACTION;
CREATE TABLEOrders(Id integer PRIMARY KEY, OrderPrice integer CHECK(OrderPrice>0),
??????????????????? Customer text);
INSERT INTOOrders(OrderPrice, Customer) VALUES(1200, "Williamson");
INSERT INTOOrders(OrderPrice, Customer) VALUES(200, "Robertson");
INSERT INTOOrders(OrderPrice, Customer) VALUES(40, "Robertson");
INSERT INTOOrders(OrderPrice, Customer) VALUES(1640, "Smith");
INSERT INTOOrders(OrderPrice, Customer) VALUES(100, "Robertson");
INSERT INTOOrders(OrderPrice, Customer) VALUES(50, "Williamson");
INSERT INTOOrders(OrderPrice, Customer) VALUES(150, "Smith");
INSERT INTOOrders(OrderPrice, Customer) VALUES(250, "Smith");
INSERT INTOOrders(OrderPrice, Customer) VALUES(840, "Brown");
INSERT INTOOrders(OrderPrice, Customer) VALUES(440, "Black");
INSERT INTOOrders(OrderPrice, Customer) VALUES(20, "Brown");
COMMIT;
BEGINTRANSACTION;
CREATE TABLEFriends(Id integer PRIMARY KEY, Name text UNIQUE NOT NULL,
????????? ???????????Sex text CHECK(Sex IN ('M', 'F')));
INSERT INTOFriends VALUES(1,'Jane', 'F');
INSERT INTOFriends VALUES(2,'Thomas', 'M');
INSERT INTOFriends VALUES(3,'Franklin', 'M');
INSERT INTOFriends VALUES(4,'Elisabeth', 'F');
INSERT INTOFriends VALUES(5,'Mary', 'F');
INSERT INTOFriends VALUES(6,'Lucy', 'F');
INSERT INTOFriends VALUES(7,'Jack', 'M');
COMMIT;
BEGINTRANSACTION;
CREATE TABLE IFNOT EXISTS Customers(CustomerId integer PRIMARY KEY, Name text);
INSERT INTOCustomers(Name) VALUES('Paul Novak');
INSERT INTOCustomers(Name) VALUES('Terry Neils');
INSERT INTOCustomers(Name) VALUES('Jack Fonda');
INSERT INTOCustomers(Name) VALUES('Tom Willis');
CREATE TABLE IFNOT EXISTS Reservations(Id integer PRIMARY KEY,
????????????????????????? ??????????????CustomerId integer, Day text);
INSERT INTOReservations(CustomerId, Day) VALUES(1, '2009-22-11');
INSERT INTOReservations(CustomerId, Day) VALUES(2, '2009-28-11');
INSERT INTOReservations(CustomerId, Day) VALUES(2, '2009-29-11');
INSERT INTOReservations(CustomerId, Day) VALUES(1, '2009-29-11');
INSERT INTOReservations(CustomerId, Day) VALUES(3, '2009-02-12');
COMMIT;
BEGINTRANSACTION;
CREATE TABLENames(Id integer, Name text);
INSERT INTONames VALUES(1,'Tom');
INSERT INTONames VALUES(2,'Lucy');
INSERT INTONames VALUES(3,'Frank');
INSERT INTONames VALUES(4,'Jane');
INSERT INTONames VALUES(5,'Robert');
COMMIT;
BEGINTRANSACTION;
CREATE TABLEBooks(Id integer PRIMARY KEY, Title text, Author text,
?????????????????? Isbn text default 'notavailable');
INSERT INTOBooks VALUES(1,'War and Peace','Leo Tolstoy','978-0345472403');
INSERT INTOBooks VALUES(2,'The Brothers Karamazov',
???????????????????????? 'FyodorDostoyevsky','978-0486437910');
INSERT INTOBooks VALUES(3,'Crime and Punishment',
???????????????????????? 'FyodorDostoyevsky','978-1840224306');
COMMIT
4埠褪、列出所有的數(shù)據(jù)表:.tables
完成上面所有的工作以后浓利,我們就可以列出所有的數(shù)據(jù)表了
[if !vml]
[endif]
5挤庇、顯示數(shù)據(jù)庫(kù)結(jié)構(gòu):.schema
其實(shí)就是一些 SQL 語句,他們描述了數(shù)據(jù)庫(kù)的結(jié)構(gòu)贷掖,如圖
? [if !vml]
[endif]
6嫡秕、顯示表的結(jié)構(gòu):.schema??? 表名
[if !vml]
[endif]
?7、導(dǎo)出某個(gè)表的數(shù)據(jù):.dump??? 表名
[if !vml]
[endif]
這時(shí)我們可以看到苹威,整個(gè)表以SQL 語句的形式為導(dǎo)出來了昆咽,但是只是顯示在終端上,如何把它導(dǎo)出到文件中呢牙甫?
8掷酗、設(shè)置導(dǎo)出目標(biāo):
.output 文件名
或者
1
.output stdout
先運(yùn)行 .output
cars.sql ,然后再運(yùn)行 .dump 命令試試看窟哺?如果要回復(fù)成導(dǎo)出到終端(標(biāo)準(zhǔn)輸出)泻轰,則運(yùn)行.output stdout
五、數(shù)據(jù)顯示相關(guān)命令
1且轨、設(shè)置分隔符:.separator 分隔符
我們可以首先運(yùn)行SELECT * FROM Names浮声;,可以看到默認(rèn)的分隔符是|
運(yùn)行.separator
: 以后旋奢,再 SELECT * FROM Names泳挥;,可以看到分隔符已經(jīng)變成 : 了
[if !vml]
[endif]
2至朗、設(shè)置顯示模式:.mode??? 模式
有好幾種顯示模式羡洁,默認(rèn)的是list 顯示模式,一般我們使用 column 顯示模式爽丹,還有其他幾種顯示模式可以 .help 看 mode 相關(guān)內(nèi)容⌒廖茫看看下面的圖粤蝎,和上面是不是顯示的不一樣了?
[if !vml]
[endif]
3袋马、顯示標(biāo)題欄:.headers?? on
看看初澎,是不是又不太一樣了?
[if !vml]
[endif]
4虑凛、設(shè)置每一列的顯示寬度:.width???? w1,w2,w3.........
一些內(nèi)容碑宴,默認(rèn)的寬度顯示不下,這個(gè)命令就有用了
5桑谍、設(shè)置 NULL 值顯示成什么樣子:.nullvalue???? 你想要的NULL值格式
默認(rèn)情況下NULL值什么也不顯示延柠,你可以設(shè)置成你自己想要的樣子
[if !vml]
[endif]
6、列出當(dāng)前顯示格式設(shè)置情況:.show
[if !vml]
[endif]
7锣披、配置文件.sqliterc
如果我們每次進(jìn)入命令行都要重新設(shè)置顯示格式贞间,很麻煩贿条,其實(shí) .show 命令列出的所有設(shè)置項(xiàng)都可以保存到一個(gè).sqliterc 文件中,這樣每次進(jìn)入命令行就自動(dòng)設(shè)置好了增热。.sqlterc 文件在 Linux 下保存在用戶的 Home 目錄下整以,在 Windows 下可以保存到任何目錄下,但是需要設(shè)置環(huán)境變量讓數(shù)據(jù)庫(kù)引擎能找到它峻仇,感興趣的可以看看幫助公黑。