SQLite 入門教程一 基本控制臺(tái)(終端)命令

一酗钞、基本簡(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ù)引擎能找到它峻仇,感興趣的可以看看幫助公黑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市摄咆,隨后出現(xiàn)的幾起案子凡蚜,更是在濱河造成了極大的恐慌,老刑警劉巖豆同,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件番刊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡影锈,警方通過查閱死者的電腦和手機(jī)芹务,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸭廷,“玉大人枣抱,你說我怎么就攤上這事×敬玻” “怎么了佳晶?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)讼载。 經(jīng)常有香客問我轿秧,道長(zhǎng),這世上最難降的妖魔是什么咨堤? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任菇篡,我火速辦了婚禮,結(jié)果婚禮上一喘,老公的妹妹穿的比我還像新娘驱还。我一直安慰自己,他們只是感情好凸克,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布议蟆。 她就那樣靜靜地躺著,像睡著了一般萎战。 火紅的嫁衣襯著肌膚如雪咐容。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天撞鹉,我揣著相機(jī)與錄音疟丙,去河邊找鬼颖侄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛享郊,可吹牛的內(nèi)容都是我干的览祖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼炊琉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼展蒂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起苔咪,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤锰悼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后团赏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箕般,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年舔清,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丝里。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡体谒,死狀恐怖杯聚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抒痒,我是刑警寧澤幌绍,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站故响,受9級(jí)特大地震影響傀广,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜彩届,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一主儡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惨缆,春花似錦、人聲如沸丰捷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)病往。三九已至捣染,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間停巷,已是汗流浹背耍攘。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工榕栏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蕾各。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓扒磁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親式曲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妨托,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容