NO IMAGE

簡單來說,SQLITE功能簡約,小型化,追求最大磁碟效率;MYSQL功能全面,綜合化,追求最大併發效率。如果只是單機上用的,資料量不是很大,需要方便移植或者需要頻繁讀/寫磁碟檔案的話,就用SQLite比較合適;如果是要滿足多使用者同時訪問,或者是網站訪問量比較大是使用MYSQL比較合適。


下面詳細介紹兩者的區別和應用:

SQLite

SQLite是非凡的資料庫,他可以程序在使用它的應用中。作為一個自包含、基於檔案的資料庫,SQLite提供了出色的工具集,可以處理所有型別的資料,沒有什麼限制,而且比起伺服器執行的程序型伺服器使用起來輕鬆許多。

一個應用使用SQLite時,它的功能直接被整合在其中,應用會直接訪問包含資料的檔案(即SQLite資料庫),而不是通過一些埠(port, socket)來互動。感謝這種底層技術,這使SQLite變得非常快速和高效,並且十分強大。

SQLite支援的資料型別

NULL:

NULL值。

INTEGER:

有符號整數,按照設定用1、2、3、4、6或8位元組儲存。

REAL:

浮點數,使用8位元組IEEE浮點數方式儲存。

TEXT:

文字字串,使用資料庫編碼儲存(UTF-8, UTF-16BE 或 UTF-16LE)。

BLOB:

二進位制大物件,怎麼輸入就怎麼儲存。

注: 想了解更多有關SQLite資料型別的資訊,可以檢視這一主題的 官方文件 。

SQLite 的優點

基於檔案:

整個資料庫都包含在磁碟上的一個檔案中,因此它有很好的遷移性。

標準化:

儘管它看起來像個“簡化版”的資料庫,SQLite 確實支援 SQL。它略去了一些功能(RIGHT OUTER JOIN 和 FOR EACH STATEMENT),但是,又同時增加了一些其他功能。

對開發乃至測試都很棒:

在絕大多數應用的開發階段中,大部分人都非常需要解決方案能有併發的靈活性。SQLite 含有豐富功能基礎,所能提供的超乎開發所需,並且簡潔到只需一個檔案和一個 C 連結庫。

SQLite的缺點

沒有使用者管理:

高階資料庫都能支援使用者系統,例如,能管理資料庫連線對資料庫和表的訪問許可權。但由於 SQLite 產生的目的和本身性質(沒有多使用者併發的高層設計),它沒有這個功能。

缺乏額外優化效能的靈活性:

仍然是從設計之初,SQLite 就不支援使用各種技巧來進行額外的效能優化。這個庫容易配置,容易使用。既然它並不複雜,理論上就無法讓它比現在更快,其實現在它已經很快了。

何時使用 SQLite ?

嵌入式應用:

所有需要遷移性,不需要擴充套件的應用,例如,單使用者的本地應用,移動應用和遊戲。

代替磁碟訪問:

在很多情況下,需要頻繁直接讀/寫磁碟檔案的應用,都很適合轉為使用 SQLite ,可以得益於 SQLite 使用 SQL 帶來的功能性和簡潔性。

測試:

它能秒殺大部分專門針對應用業務邏輯(也就是應用的主要目的:能完成功能)的測試。

何時不用 SQLite ?

多使用者應用:

如果你在開發的應用需要被多使用者訪問,而且這些使用者都用同一個資料庫,那麼相比 SQLite 最好還是選擇一個功能完整的關係型資料庫(例如 MySQL)。

需要大面積寫入資料的應用:

SQLite 的缺陷之一是它的寫入操作。這個資料庫同一時間只允許一個寫操作,因此吞吐量有限。

MySQL

MySQL 在所有大型資料庫伺服器中最流行的一個. 它的特性豐富,產品的開源性質使得其驅動了線上大量的網站和應用程式. 要入手 MySQL 相對簡單,開發人員可以在網際網路上面訪問到大量有關這個資料庫的資訊.

注意: 由於這個產品的普及性,大量的第三方應用、工具和整合庫對於操作這個RDBCMS的方方面面大有幫助.

Mysql沒有嘗試去實現SQL標準的全部,而是為使用者提供了很多有用的功能. 作為一個獨立的資料庫伺服器,應用程式同Mysql守護程序的互動,告訴它去訪問資料庫自身 — 這一點不像 SQLite.

MySQL支援的資料型別

TINYINT:

一個非常小的整數.

SMALLINT:

一個小整數.

MEDIUMINT:

一箇中間大小的整數.

INT or INTEGER:

一個正常大小的整數.

BIGINT:

一個大的整數.

FLOAT:

一個小的 (單精度) 浮點數,不能是無符號的那種.

DOUBLE, DOUBLE PRECISION, REAL:

一個正常大小 (雙精度) 的浮點數,不能使無符號的那種.

DECIMAL, NUMERIC:

沒有被包裝的浮點數。不能使無符號的那種.

DATE:

一個日期.

DATETIME:

一個日期和時間的組合.

TIMESTAMP:

一個時間戳.

TIME:

一個時間.

YEAR:

一個用兩位或者4位數字格式表示的年份(預設是4位).

CHAR:

一個固定長度的字串,儲存時總是在其固定長度的空間裡右對齊.

VARCHAR:

一個可變長度的字串.

TINYBLOB, TINYTEXT:

一個BLOB或者TEXT列,最大長度255 (2^8 – 1)個字元.

BLOB, TEXT:

一個BLOB或者TEXT列,最大長度 65535 (2^16 – 1)個字元.

MEDIUMBLOB, MEDIUMTEXT:

一個BLOB或者TEXT列,最大長度 16777215 (2^24 – 1)個字元.

LONGBLOB, LONGTEXT:

一個BLOB或者TEXT列,最大長度4294967295 (2^32 – 1) 個字元.

ENUM:

一個列舉型別.

SET:

一個集合.

MySQL的優點

容易使用:

安裝MySQL非常容易。第三方庫,包括視覺化(也就是有GUI)的庫讓上手使用資料庫非常簡單。

功能豐富:

MySQL 支援大部分關係型資料庫應該有的 SQL 功能——有些直接支援,有些間接支援。

安全:

MYSQL 有很多安全特性,其中有些相當高階。

靈活而強大:

MySQL 能處理很多資料,此外如有需要,它還能“適應”各種規模的資料。

快速:

放棄支援某些標準,讓 MySQL 效率更高並能使用捷徑,因此帶來速度的提升。

MySQL的缺點

已知的侷限:

從設計之初,MySQL 就沒打算做到全知全能,因此它有一些功能侷限,無法滿足某些頂尖水平應用的需求。

可靠性問題:

MySQL 對於某些功能的實現方式(例如,引用,事務,資料稽核等) 使得它比其他一些關係型資料庫略少了一些可靠性。

開發停滯:

儘管 MySQL 理論上仍是開源產品,也有人抱怨它誕生之後更新緩慢。然而,應該注意到有一些基於 MySQL 並完整整合的資料庫(如 MariaDB),在標準的 MySQL 基礎上帶來了額外價值。

何時使用 MySQL?

分散式操作:

當SQLite所提供的不能滿足你的需要時,可以把MySQL包括進你的部署棧,就像任何一個獨立的資料庫伺服器,它會帶來大量的操作自由性和一些先進的功能。

高安全性:

MySQL的安全功能,用一種簡單的方式為資料訪問(和使用)提供了可靠的保護。

Web網站 和 Web應用:

絕大多數的網站(和Web應用程式)可以忽視約束性地簡單工作在MySQL上。這種靈活的和可擴充套件的工具是易於使用和易於管理的——這被證明非常有助於長期執行。

定製解決方案:

如果你工作在一個高度量身定製的解決方案上,MySQL能夠很容易地尾隨和執行你的規則,這要感謝其豐富的配置設定和操作模式。

何時不用 MySQL?

SQL 服從性:

因為 MySQL 沒有[想要]實現 SQL 的全部標準,所以這個工具不完全符合SQL。如果你需要對這樣的關聯式資料庫管理系統進行整合,從MySQL進行切換是不容易的。

併發:

即使MySQL和一些儲存引擎能夠真地很好執行讀取操作,但併發讀寫還是有問題的。

缺乏特色:

再次提及,根據資料庫引擎的選擇標準,MySQL會缺乏一定的特性,如全文搜尋。