SQLite與MySQL區別

原文連接:https://blog.csdn.net/zbw1185/article/details/47975965
簡單來講,SQLITE功能簡約,小型化,追求最大磁盤效率;MYSQL功能全面,綜合化,追求最大併發效率。若是隻是單機上用的,數據量不是很大,須要方便移植或者須要頻繁讀/寫磁盤文件的話,就用SQLite比較合適;若是是要知足多用戶同時訪問,或者是網站訪問量比較大是使用MYSQL比較合適。sql


下面詳細介紹二者的區別和應用:數據庫

SQLite安全

SQLite是非凡的數據庫,他能夠進程在使用它的應用中。做爲一個自包含、基於文件的數據庫,SQLite提供了出色的工具集,能夠處理全部類型的數據,沒有什麼限制,並且比起服務器運行的進程型服務器使用起來輕鬆許多。性能優化

一個應用使用SQLite時,它的功能直接被集成在其中,應用會直接訪問包含數據的文件(即SQLite數據庫),而不是經過一些端口(port, socket)來交互。感謝這種底層技術,這使SQLite變得很是快速和高效,而且十分強大。服務器

SQLite支持的數據類型併發

NULL:socket

NULL值。分佈式

INTEGER:工具

有符號整數,按照設置用一、二、三、四、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會缺少必定的特性,如全文搜索。

相關文章
相關標籤/搜索