在Unix操作系統中,我們要對數據庫了解很多,因為數據庫很重要,今天,我們就來講解Unix操作系統中一些數據庫方面的工具。Unix操作系統提供多種數據庫,其中許多是開放源碼的,Unix操作系統一些數據庫適用於各種應用程序,Unix操作系統一些數據庫是專用的。但是,Unix操作系統大多數數據庫是很大的獨立應用程序(例如,MySQL 需要單獨的安裝、一些配置和它自己的守護進程),對於許多軟件可能不需要使用這麼復雜的數據庫。
請考慮一個在桌面上使用的地址簿程序:它適合部署 MySQL 來存儲姓名和電話號碼嗎?可能不適合。另外,如果應用程序要在非常小的設備或能力很有限的計算機上運行,那麼應該怎麼辦?這類硬件可能不支持多處理、大量內存占用或對物理存儲的大量需求。
顯然,Unix操作系統可以使用嵌入式數據庫。通常情況下,嵌入式數據庫打包為庫,與應用程序代碼直接鏈接。這種解決方案讓應用程序獨立於外部服務,但是也要付出一定的代價:通常不能用 Structured Query Language (SQL) 表達查詢。
SQLite 結合了這兩方面的優勢:這個軟件很小,可以把它嵌入任何應用程序,同時可以用 SQL 查詢數據。PHP 和 Ruby on Rails 使用 SQLite 作為默認的存儲引擎,Apple iPhone 也是如此。
Unix操作系統為了構建 SQLite,需要從 SQLite 下載頁面下載源代碼集(由所有源代碼組成的單一文件)、解壓它並運行 ./configure && make && sudo make install。
- $ # As of March 2009, the latest version was 3.6.11.
- $ wget http://www.sqlite.org/sqlite-amalgamation-3.6.11.tar.gz
- $ tar xzf sqlite-amalgamation-3.6.11.tar.gz
- $ cd sqlite-3.6.11
- $ ./configure && make
- $ sudo make install
Unix操作系統構建過程生成一個庫和相關聯的應用程序編程接口 (API) 頭文件,以及一個單獨的命令行實用程序 sqlite3,它有助於研究特性。用數據庫名啟動 sqlite3 即可創建數據庫。甚至可以在命令行上直接放上 SQL,這對於腳本編程非常有意義:
- $ sqlite3 comics.db "CREATE TABLE issues \
- (issue INT PRIMARY KEY, \
- title TEXT NOT_NULL)"
- $ sqlite3 comics.db "INSERT INTO issues (issue, title) \
- VALUES ('1', 'Amazing Adventures')"
- $ sqlite3 comics.db "SELECT * FROM issues"
- 1|Amazing Adventures
第一個命令創建數據庫(如果數據庫還不存在的話)和一個表,這個表包含兩列 —— 期號和標題。Unix操作系統第二個命令插入一行,最後一個命令顯示表的內容。
SQLite 提供觸發器、日志記錄和序列。SQLite 還是無類型的,除非您指定類型。例如,這裡聲明的 issues 表沒有類型,但是仍然可以正常工作:
- $ sqlite3 comics.db "create table issues (issue primary key, title)"
- $ sqlite3 comics.db "INSERT INTO issues (issue, title) \
- VALUES (1, 'Amazing Adventures')"
- $ sqlite3 comics.db "SELECT * FROM issues"1|Amazing Adventures
沒有類型是一個特性,而不是 bug,它有許多應用。大家可以看出Unix操作系統中,SQLite能夠適合大多數場合的數據庫。這給我們帶來了很大的方便。讓我們一起運用它吧。