• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            逛奔的蝸牛

            我不聰明,但我會(huì)很努力

               ::  :: 新隨筆 ::  ::  :: 管理 ::
            From: http://www.yuanma.org/data/2008/1212/article_3407.htm

            OS X自從10.4后把SQLite這套相當(dāng)出名的數(shù)據(jù)庫(kù)軟件,放進(jìn)了作業(yè)系統(tǒng)工具集里。OS X包裝的是第三版的SQLite,又稱(chēng)SQLite3。這套軟件有幾個(gè)特色:

            • 軟件屬于公共財(cái)(public domain),SQLite可說(shuō)是某種「美德軟件」(virtueware),作者本人放棄著作權(quán),而給使用SQLite的人以下的「祝福」(blessing):
              • May you do good and not evil. 愿你行善莫行惡
              • May you find forgiveness for yourself and forgive others. 愿你原諒自己寬恕他人
              • May you share freely, never taking more than you give. 愿你寬心與人分享,所取不多于你所施予
            • 支援大多數(shù)的SQL指令(下面會(huì)簡(jiǎn)單介紹)。
            • 一個(gè)檔案就是一個(gè)數(shù)據(jù)庫(kù)。不需要安裝數(shù)據(jù)庫(kù)服務(wù)器軟件。
            • 完整的Unicode支援(因此沒(méi)有跨語(yǔ)系的問(wèn)題)。
            • 速度很快。

            目前在OS X 10.4里,SQLite是以/usr/bin/sqlite3的形式包裝,也就說(shuō)這是一個(gè)命令列工具,必須先從終端機(jī)(Terminal.app或其他程序)進(jìn)入shell之后才能使用。網(wǎng)絡(luò)上有一些息協(xié)助使用SQLite的視覺(jué)化工具,但似乎都沒(méi)有像CocoaMySQL(配合MySQL數(shù)據(jù)庫(kù)使用)那般好用。或許隨時(shí)有驚喜也未可知,以下僅介紹命令列的操作方式。

            SQLite顧名思議是以SQL為基礎(chǔ)的數(shù)據(jù)庫(kù)軟件,SQL是一套強(qiáng)大的數(shù)據(jù)庫(kù)語(yǔ)言,主要概念是由「數(shù)據(jù)庫(kù)」、「資料表」(table)、「查詢(xún)指令」(queries)等單元組成的「關(guān)聯(lián)性數(shù)據(jù)庫(kù)」(進(jìn)一步的概念可參考網(wǎng)絡(luò)上各種關(guān)于SQL及關(guān)聯(lián)性數(shù)據(jù)庫(kù)的文件)。因?yàn)镾QL的查詢(xún)功能強(qiáng)大,語(yǔ)法一致而入門(mén)容易,因此成為現(xiàn)今主流數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言(微軟、Oracle等大廠的數(shù)據(jù)庫(kù)軟件都提供SQL語(yǔ)法的查詢(xún)及操作)。

            以下我們就建立數(shù)據(jù)庫(kù)、建立資料表及索引、新增資料、查詢(xún)資料、更改資料、移除資料、sqlite3命令列選項(xiàng)等幾個(gè)項(xiàng)目做簡(jiǎn)單的介紹。


            目錄

            • 1 建立數(shù)據(jù)庫(kù)檔案
            • 2 在sqlite3提示列下操作
            • 3 SQL的指令格式
            • 4 建立資料表
            • 5 建立索引
            • 6 加入一筆資料
            • 7 查詢(xún)資料
            • 8 如何更改或刪除資料
            • 9 其他sqlite的特別用法
            • 10 小結(jié)

             

            建立數(shù)據(jù)庫(kù)檔案

            用sqlite3建立數(shù)據(jù)庫(kù)的方法很簡(jiǎn)單,只要在shell下鍵入(以下$符號(hào)為shell提示號(hào),請(qǐng)勿鍵入):

            $ sqlite3 foo.db
            

            如果目錄下沒(méi)有foo.db,sqlite3就會(huì)建立這個(gè)數(shù)據(jù)庫(kù)。sqlite3并沒(méi)有強(qiáng)制數(shù)據(jù)庫(kù)檔名要怎么取,因此如果你喜歡,也可以取個(gè)例如foo.icannameitwhateverilike的檔名。


            在sqlite3提示列下操作

            進(jìn)入了sqlite3之后,會(huì)看到以下文字:

            SQLite version 3.1.3
            Enter ".help" for instructions
            sqlite> 
            

            這時(shí)如果使用.help可以取得求助,.quit則是離開(kāi)(請(qǐng)注意:不是quit)


            SQL的指令格式

            所以的SQL指令都是以分號(hào)(;)結(jié)尾的。如果遇到兩個(gè)減號(hào)(--)則代表注解,sqlite3會(huì)略過(guò)去。


            建立資料表

            假設(shè)我們要建一個(gè)名叫film的資料表,只要鍵入以下指令就可以了:

            create table film(title, length, year, starring);
            

            這樣我們就建立了一個(gè)名叫film的資料表,里面有name、length、year、starring四個(gè)字段。

            這個(gè)create table指令的語(yǔ)法為:

            create table table_name(field1, field2, field3, ...);
            

            table_name是資料表的名稱(chēng),fieldx則是字段的名字。sqlite3與許多SQL數(shù)據(jù)庫(kù)軟件不同的是,它不在乎字段屬于哪一種資料型態(tài):sqlite3的字段可以?xún)?chǔ)存任何東西:文字、數(shù)字、大量文字(blub),它會(huì)在適時(shí)自動(dòng)轉(zhuǎn)換。


            建立索引

            如果資料表有相當(dāng)多的資料,我們便會(huì)建立索引來(lái)加快速度。好比說(shuō):

            create index film_title_index on film(title);
            

            意思是針對(duì)film資料表的name字段,建立一個(gè)名叫film_name_index的索引。這個(gè)指令的語(yǔ)法為

            create index index_name on table_name(field_to_be_indexed);
            

            一旦建立了索引,sqlite3會(huì)在針對(duì)該字段作查詢(xún)時(shí),自動(dòng)使用該索引。這一切的操作都是在幕后自動(dòng)發(fā)生的,無(wú)須使用者特別指令。


            加入一筆資料

            接下來(lái)我們要加入資料了,加入的方法為使用insert into指令,語(yǔ)法為:

            insert into table_name values(data1, data2, data3, ...);
            

            例如我們可以加入

            insert into film values ('Silence of the Lambs, The', 118, 1991, 'Jodie Foster');
            insert into film values ('Contact', 153, 1997, 'Jodie Foster');
            insert into film values ('Crouching Tiger, Hidden Dragon', 120, 2000, 'Yun-Fat Chow');
            insert into film values ('Hours, The', 114, 2002, 'Nicole Kidman');
            

            如果該字段沒(méi)有資料,我們可以填NULL。


            查詢(xún)資料

            講到這里,我們終于要開(kāi)始介紹SQL最強(qiáng)大的select指令了。我們首先簡(jiǎn)單介紹select的基本句型:

            select columns from table_name where expression;
            

            最常見(jiàn)的用法,當(dāng)然是倒出所有數(shù)據(jù)庫(kù)的內(nèi)容:

            select * from film;
            

            如果資料太多了,我們或許會(huì)想限制筆數(shù):

            select * from film limit 10;
            

            或是照著電影年份來(lái)排列:

            select * from film order by year limit 10;
            

            或是年份比較近的電影先列出來(lái):

            select * from film order by year desc limit 10;
            

            或是我們只想看電影名稱(chēng)跟年份:

            select title, year from film order by year desc limit 10;
            

            查所有茱蒂佛斯特演過(guò)的電影:

            select * from film where starring='Jodie Foster';
            

            查所有演員名字開(kāi)頭叫茱蒂的電影('%' 符號(hào)便是 SQL 的萬(wàn)用字符):

            select * from film where starring like 'Jodie%';
            

            查所有演員名字以茱蒂開(kāi)頭、年份晚于1985年、年份晚的優(yōu)先列出、最多十筆,只列出電影名稱(chēng)和年份:

            select title, year from film where starring like 'Jodie%' and year >= 1985 order by year desc limit 10;
            

            有時(shí)候我們只想知道數(shù)據(jù)庫(kù)一共有多少筆資料:

            select count(*) from film;
            

            有時(shí)候我們只想知道1985年以后的電影有幾部:

            select count(*) from film where year >= 1985;
            

            (進(jìn)一步的各種組合,要去看SQL專(zhuān)書(shū),不過(guò)你大概已經(jīng)知道SQL為什么這么流行了:這種語(yǔ)言允許你將各種查詢(xún)條件組合在一起──而我們還沒(méi)提到「跨數(shù)據(jù)庫(kù)的聯(lián)合查詢(xún)」呢!)


            如何更改或刪除資料

            了解select的用法非常重要,因?yàn)橐趕qlite更改或刪除一筆資料,也是靠同樣的語(yǔ)法。

            例如有一筆資料的名字打錯(cuò)了:

            update film set starring='Jodie Foster' where starring='Jodee Foster';
            

            就會(huì)把主角字段里,被打成'Jodee Foster'的那筆(或多筆)資料,改回成Jodie Foster。

            delete from film where year < 1970;
            

            就會(huì)刪除所有年代早于1970年(不含)的電影了。


            其他sqlite的特別用法

            sqlite可以在shell底下直接執(zhí)行命令:

            sqlite3 film.db "select * from film;"
            

            輸出 HTML 表格:

            sqlite3 -html film.db "select * from film;"
            

            將數(shù)據(jù)庫(kù)「倒出來(lái)」:

            sqlite3 film.db ".dump" > output.sql
            

            利用輸出的資料,建立一個(gè)一模一樣的數(shù)據(jù)庫(kù)(加上以上指令,就是標(biāo)準(zhǔn)的SQL數(shù)據(jù)庫(kù)備份了):

            sqlite3 film.db < output.sql
            

            在大量插入資料時(shí),你可能會(huì)需要先打這個(gè)指令:

            begin;
            

            插入完資料后要記得打這個(gè)指令,資料才會(huì)寫(xiě)進(jìn)數(shù)據(jù)庫(kù)中:

            commit;
            


            小結(jié)

            以上我們介紹了SQLite這套數(shù)據(jù)庫(kù)系統(tǒng)的用法。事實(shí)上OS X也有諸于SQLiteManagerX這類(lèi)的圖形接口程序,可以便利數(shù)據(jù)庫(kù)的操作。不過(guò)萬(wàn)變不離其宗,了解SQL指令操作,SQLite與其各家變種就很容易上手了。

            至于為什么要寫(xiě)這篇教學(xué)呢?除了因?yàn)镺S X Tiger大量使用SQLite之外(例如:Safari的RSS reader,就是把文章存在SQLite數(shù)據(jù)庫(kù)里!你可以開(kāi)開(kāi)看~/Library/Syndication/Database3這個(gè)檔案,看看里面有什么料),OpenVanilla從0.7.2開(kāi)始,也引進(jìn)了以SQLite為基礎(chǔ)的詞匯管理工具,以及全字庫(kù)的注音輸入法。因?yàn)槭褂肧QLite,這兩個(gè)模塊不管數(shù)據(jù)庫(kù)內(nèi)有多少筆資料,都可以做到「瞬間啟動(dòng)」以及相當(dāng)快速的查詢(xún)回應(yīng)。

            將一套方便好用的數(shù)據(jù)庫(kù)軟件包進(jìn)OS X中,當(dāng)然也算是Apple相當(dāng)相當(dāng)聰明的選擇。再勤勞一點(diǎn)的朋友也許已經(jīng)開(kāi)始想拿SQLite來(lái)記錄各種東西(像我們其中就有一人寫(xiě)了個(gè)程序,自動(dòng)記錄電池狀態(tài),寫(xiě)進(jìn)SQLite數(shù)據(jù)庫(kù)中再做統(tǒng)計(jì)......)了。想像空間可說(shuō)相當(dāng)寬廣。

            目前支援SQLite的程序語(yǔ)言,你能想到的大概都有了。這套數(shù)據(jù)庫(kù)2005年還贏得了美國(guó)O'Reilly Open Source Conference的最佳開(kāi)放源代碼軟件獎(jiǎng),獎(jiǎng)評(píng)是「有什么東西能讓Perl, Python, PHP, Ruby語(yǔ)言團(tuán)結(jié)一致地支援的?就是SQLite」。由此可見(jiàn)SQLite的地位了。而SQLite程序非常小,更是少數(shù)打 "gcc -o sqlite3 *",不需任何特殊設(shè)定就能跨平臺(tái)編譯的程序。小而省,小而美,SQLite連網(wǎng)站都不多贅言,直指SQL語(yǔ)法精要及API使用方法,原作者大概也可以算是某種程序設(shè)計(jì)之道(Tao of Programming)里所說(shuō)的至人了。

            Enjoy /usr/bin/sqlite3 in your OS X Tiger. :)

            posted on 2009-10-28 16:30 逛奔的蝸牛 閱讀(5247) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): Qt其他編程

            評(píng)論

            # re: Qt:SQLite 3入門(mén)教程 2009-11-02 19:57 暗金裝備
            SELECT name FROM sqlite_master
            WHERE type='table'
            ORDER BY name;  回復(fù)  更多評(píng)論
              

            久久夜色精品国产噜噜噜亚洲AV| 久久精品三级视频| 久久综合色之久久综合| 伊人久久大香线焦综合四虎| 俺来也俺去啦久久综合网| 久久人爽人人爽人人片AV| 99久久超碰中文字幕伊人| 久久大香香蕉国产| 欧美日韩中文字幕久久伊人| 91性高湖久久久久| 久久综合伊人77777| 久久久午夜精品| 亚洲国产另类久久久精品黑人| 亚洲狠狠婷婷综合久久久久| 欧美牲交A欧牲交aⅴ久久 | 亚洲国产天堂久久综合网站| 久久91精品国产91久久麻豆 | 久久99中文字幕久久| 亚洲国产精品久久| 一本色综合久久| 久久狠狠高潮亚洲精品| 精品久久久久久99人妻| 亚洲精品乱码久久久久久自慰| 久久久久久久97| 久久久久国产日韩精品网站| 久久综合鬼色88久久精品综合自在自线噜噜| 久久强奷乱码老熟女网站| 久久久久AV综合网成人| 久久99热这里只有精品国产| 久久精品国产色蜜蜜麻豆| Xx性欧美肥妇精品久久久久久| 中文字幕精品久久久久人妻| 久久国产免费观看精品| 久久久久亚洲AV片无码下载蜜桃| 欧美噜噜久久久XXX| 久久久久久国产精品美女| 久久99精品国产自在现线小黄鸭| 久久免费大片| 国产精品久久久天天影视香蕉| 国产亚洲美女精品久久久2020| 国产精品日韩深夜福利久久|