成功與自信--TianJin

          上善若水。水善利萬物而不爭,處眾人之所惡,故幾于道。居善地,心善淵,與善仁,言善信,政善治,事善能,動善時。 Where there is a will,there is a way.

          sqlite使用手冊(轉)

          OS X自從10.4后把SQLite這套相當出名的數據庫軟件,放進了作業系統工具集里。OS X包裝的是第三版的SQLite,又稱SQLite3。這套軟件有幾個特色:

          • 軟件屬于公共財(public domain),SQLite可說是某種「美德軟件」(virtueware),作者本人放棄著作權,而給使用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. 愿你寬心與人分享,所取不多于你所施予
          • 支援大多數的SQL指令(下面會簡單介紹)。
          • 一個檔案就是一個數據庫。不需要安裝數據庫服務器軟件。
          • 完整的Unicode支援(因此沒有跨語系的問題)。
          • 速度很快。

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

          SQLite顧名思議是以SQL為基礎的數據庫軟件,SQL是一套強 大的數據庫語言,主要概念是由「數據庫」、「資料表」(table)、「查詢指令」(queries)等單元組成的「關聯性數據庫」(進一步的概念可參考 網絡上各種關于SQL及關聯性數據庫的文件)。因為SQL的查詢功能強大,語法一致而入門容易,因此成為現今主流數據庫的標準語言(微軟、Oracle等 大廠的數據庫軟件都提供SQL語法的查詢及操作)。

          以下我們就建立數據庫、建立資料表及索引、新增資料、查詢資料、更改資料、移除資料、sqlite3命令列選項等幾個項目做簡單的介紹。


          目錄

          [隱藏]

          建立數據庫檔案

          sqlite3建立數據庫的方法很簡單,只要在shell下鍵入(以下$符號為shell提示號,請勿鍵入):

          $ sqlite3 foo.db

          如果目錄下沒有foo.db,sqlite3就會建立這個數據庫。sqlite3并沒有強制數據庫檔名要怎么取,因此如果你喜歡,也可以取個例如foo.icannameitwhateverilike的檔名。


          sqlite3提示列下操作

          進入了sqlite3之后,會看到以下文字:

          SQLite version 3.1.3Enter ".help" for instructionssqlite> 

          這時如果使用.help可以取得求助,.quit則是離開(請注意:不是quit)


          SQL的指令格式

          所以的SQL指令都是以分號(;)結尾的。如果遇到兩個減號(--)則代表注解,sqlite3會略過去。


          建立資料表

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

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

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

          這個create table指令的語法為:

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

          table_name是資料表的名稱,fieldx則是字段的名字。sqlite3與許多SQL數據庫軟件不同的是,它不在乎字段屬于哪一種資料型態:sqlite3的字段可以儲存任何東西:文字、數字、大量文字(blub),它會在適時自動轉換。


          建立索引

          如果資料表有相當多的資料,我們便會建立索引來加快速度。好比說:

          create index film_title_index on film(title);

          意思是針對film資料表的name字段,建立一個名叫film_name_index的索引。這個指令的語法為

          create index index_name on table_name(field_to_be_indexed);

          一旦建立了索引,sqlite3會在針對該字段作查詢時,自動使用該索引。這一切的操作都是在幕后自動發生的,無須使用者特別指令。


          加入一筆資料

          接下來我們要加入資料了,加入的方法為使用insert into指令,語法為:

          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');

          如果該字段沒有資料,我們可以填NULL。


          查詢資料

          講到這里,我們終于要開始介紹SQL最強大的select指令了。我們首先簡單介紹select的基本句型:

          select columns from table_name where expression;

          最常見的用法,當然是倒出所有數據庫的內容:

          select * from film;

          如果資料太多了,我們或許會想限制筆數:

          select * from film limit 10;

          或是照著電影年份來排列:

          select * from film order by year limit 10;

          或是年份比較近的電影先列出來:

          select * from film order by year desc limit 10;

          或是我們只想看電影名稱跟年份:

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

          查所有茱蒂佛斯特演過的電影:

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

          查所有演員名字開頭叫茱蒂的電影('%' 符號便是 SQL 的萬用字符):

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

          查所有演員名字以茱蒂開頭、年份晚于1985年、年份晚的優先列出、最多十筆,只列出電影名稱和年份:

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

          有時候我們只想知道數據庫一共有多少筆資料:

          select count(*) from film;

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

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

          (進一步的各種組合,要去看SQL專書,不過你大概已經知道SQL為什么這么流行了:這種語言允許你將各種查詢條件組合在一起──而我們還沒提到「跨數據庫的聯合查詢」呢!)


          如何更改或刪除資料

          了解select的用法非常重要,因為要在sqlite更改或刪除一筆資料,也是靠同樣的語法。

          例如有一筆資料的名字打錯了:

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

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

          delete from film where year < 1970;

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


          其他sqlite的特別用法

          sqlite可以在shell底下直接執行命令:

          sqlite3 film.db "select * from film;"

          輸出 HTML 表格:

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

          將數據庫「倒出來」:

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

          利用輸出的資料,建立一個一模一樣的數據庫(加上以上指令,就是標準的SQL數據庫備份了):

          sqlite3 film.db < output.sql

          在大量插入資料時,你可能會需要先打這個指令:

          begin;

          插入完資料后要記得打這個指令,資料才會寫進數據庫中:

          commit;


          小結

          以上我們介紹了SQLite這套數據庫系統的用法。事實上OS X也有諸于SQLiteManagerX這類的圖形接口程序,可以便利數據庫的操作。不過萬變不離其宗,了解SQL指令操作,SQLite與其各家變種就很容易上手了。

          至 于為什么要寫這篇教學呢?除了因為OS X Tiger大量使用SQLite之外(例如:Safari的RSS reader,就是把文章存在SQLite數據庫里!你可以開開看~/Library/Syndication/Database3這個檔案,看看里面有 什么料),OpenVanilla從0.7.2開始,也引進了以SQLite為基礎的詞匯管理工具,以及全字庫的注音輸入法。因為使用SQLite,這兩 個模塊不管數據庫內有多少筆資料,都可以做到「瞬間啟動」以及相當快速的查詢回應。

          將一套方便好用的數據庫軟件包進OS X中,當然也算是Apple相當相當聰明的選擇。再勤勞一點的朋友也許已經開始想拿SQLite來記錄各種東西(像我們其中就有一人寫了個程序,自動記錄 電池狀態,寫進SQLite數據庫中再做統計......)了。想像空間可說相當寬廣。

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



          一個駐扎在天津的普通程序員,當個PM,TL,CODER 就是沒有當過CEO。
          My idiom:Where there is a will,there is a way!
          注:加班寫作,轉載請著名出處!!

          posted on 2008-06-09 18:48 EugeneCao 閱讀(588) 評論(0)  編輯  收藏 所屬分類: Open Source


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          My Links

          Blog Stats

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          新聞分類

          新聞檔案

          收藏夾

          Java Blogs

          WorkFlow

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          Get Free Shots from Snap.com
          主站蜘蛛池模板: 剑阁县| 安陆市| 沙河市| 郸城县| 连平县| 菏泽市| 阜宁县| 图片| 张北县| 宜阳县| 扶沟县| 灵宝市| 怀柔区| 枞阳县| 突泉县| 宝山区| 固安县| 临汾市| 临猗县| 台湾省| 巨鹿县| 嘉峪关市| 昭苏县| 泸西县| 永定县| 牙克石市| 青海省| 屯昌县| 固阳县| 水富县| 泰宁县| 千阳县| 郎溪县| 白朗县| 土默特右旗| 轮台县| 铜山县| 即墨市| 信宜市| 邛崃市| 佛山市|