一、MySQL
MySQL 在所有大型數據庫服務器中最流行的一個. 它的特性豐富,產品的開源性質使得其驅動了線上大量的網站和應用程序. 要入手 MySQL 相對簡單,開發人員可以在互聯網上面訪問到大量有關這個數據庫的信息.
注意: 由於這個產品的普及性,大量的第三方應用、工具和集成庫對於操作這個RDBCMS的方方面面大有幫助.
Mysql沒有嘗試去實現SQL標準的全部,而是爲用戶提供了很多有用的功能. 作爲一個獨立的數據庫服務器,應用程序同Mysql守護進程的交互,告訴它去訪問數據庫自身 -- 這一點不像 SQLite.
1、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 | 一個集合 |
2、MySQL的優點
容易使用 | 安裝MySQL非常容易。第三方庫,包括可視化(也就是有GUI)的庫讓上手使用數據庫非常簡單 |
功能豐富 | MySQL 支持大部分關係型數據庫應該有的 SQL 功能——有些直接支持,有些間接支持 |
安全 | MYSQL 有很多安全特性,其中有些相當高級 |
靈活而強大 | MySQL 能處理很多數據,此外如有需要,它還能“適應”各種規模的數據 |
快速 | 放棄支持某些標準,讓 MySQL 效率更高並能使用捷徑,因此帶來速度的提升 |
3、MySQL的缺點
已知的侷限 | 從設計之初,MySQL 就沒打算做到全知全能,因此它有一些功能侷限,無法滿足某些頂尖水平應用的需求 |
可靠性問題 | MySQL 對於某些功能的實現方式(例如,引用,事務,數據審覈等) 使得它比其他一些關係型數據庫略少了一些可靠性 |
開發停滯 | 儘管 MySQL 理論上仍是開源產品,也有人抱怨它誕生之後更新緩慢。然而,應該注意到有一些基於 MySQL 並完整集成的數據庫(如 MariaDB),在標準的 MySQL 基礎上帶來了額外價值 |
4、何時使用 MySQL?
分佈式操作 | 當你需要的比SQLite可以提供的更多時,把MySQL包括進你的部署棧,就像任何一個獨立的數據庫服務器,會帶來大量的操作自由和一些先進的功能 |
高安全性 | MySQL的安全功能,用一種簡單的方式爲數據訪問(和使用)提供了可靠的保護 |
Web網站 和 Web應用 | 絕大多數的網站(和Web應用程序)可以忽視約束性地簡單工作在MySQL上。這種靈活的和可擴展的工具是易於使用和易於管理的——這被證明非常有助於長期運行 |
定製解決方案 | 如果你工作在一個高度量身定製的解決方案上,MySQL能夠很容易地尾隨和執行你的規則,這要感謝其豐富的配置設置和操作模式 |
5、何時不用 MySQL?
SQL 服從性 | 因爲 MySQL 沒有[想要]實現 SQL 的全部標準,所以這個工具不完全符合SQL。如果你需要對這樣的關係數據庫管理系統進行整合,從MySQL進行切換是不容易的 |
併發 | 即使MySQL和一些存儲引擎能夠真地很好執行讀取操作,但併發讀寫還是有問題的 |
缺乏特色 | 再次提及,根據數據庫引擎的選擇標準,MySQL會缺乏一定的特性,如全文搜索 |
二、PostgreSQL
PostgreSQL 是一個先進的,開放源代碼的[對象]-關係型數據庫管理系統,它的主要目標是實現標準和可擴展性. PostgreSQL, 或者說是 Postgres, 試圖把對 ANSI/ISO SQL標準的採用與修正結合起來.
對比其他的RDBMS, PostgreSQL以它對於對象-關係和或關係型數據庫功能,比如對於可靠事務,例如原子性,一致性,隔離性和持久性(ACID)的完全支持,這些東西的高度需求和集合的支持,以示其獨特性.
由於強大的底層技術, Postgres對於高效的完成許多處理任務很有一手. 得益於其多版本併發控制 (MVCC)的實現,在沒有讀取鎖的前提下也能達成併發, 這也同樣確保了ACID的實施.
PostgreSQL是高度可編程的, 因而可以使用被稱作“存儲過程”的自定義程序進行擴展. 這些功能可以被創建用來簡化一個寫重複、複雜並且常常需要數據庫操作的任務的執行.
雖然特性強大,但這個 DBMS並沒有MySQL那麼流行, 可還是有許多迷人的第三方工具和庫被設計出來用於使得對PostgreSQL的操作簡化. 如今通過許多操作系統默認的包管理器輕鬆的獲取PostgreSQL已成爲可能.
1、PostgreSQL支持的數據類型
bigint | 有符號的八位整數 |
bigserial | 自增長的八位整數 |
bit [(n)] | 固定長度的位串 |
bit varying [(n)] | 可變長度的位串 |
boolean | 邏輯布爾值(true/false) |
box | 在一個平面上的矩形框 |
bytea | 二進制數據("位數組") |
character varying [(n)] | 可變長度的字符串 |
character [(n)] | 固定長度的字符串 |
cidr | IPv4 或者 IPv6 網絡地址 |
circle | 平面上的一個圓 |
date | 日曆日期 ( 年月日) |
double precision | 雙精度浮點數(8位) |
inet | IPv4 或者 IPv6 主機地址 |
integer | 有符號的四位整數 |
interval [fields] [(p)] | 時間跨度 |
line | 平面上的一個無限長的直線 |
lseg | 平面上的一個線段 |
macaddr | MAC (媒體訪問控制)地址 |
money | 貨幣金額 |
numeric [(p, s)] | 可選精度的精確數字 |
path | 一個平面上的幾何路徑 |
point | 一個平面上的幾何點 |
polygon | 一個平面上的閉合的幾何路徑 |
real | 單精度浮點數(4 位) |
smallint | 有符號的兩位整數 |
serial | 自增長4位整數 |
text | 可變長度字符創 |
time [(p)] [without time zone] | 一天中的時間(無時區) |
time [(p)] with time zone | 一天中的時間,包含時區 |
timestamp [(p)] [without time zone] | 日期和時間(沒有時區) |
timestamp [(p)] with time zone | 日期和時間,包含時區 |
tsquery | 文本搜索查詢 |
tsvector | 文本搜索文檔 |
txid_snapshot | 用戶級事務ID快照 |
uuid | 通用的唯一標識符 |
xml | XML 數據 |
2、PostgreSQL的優點
標準支持 SQL 的開源關係型數據庫 | PostgreSQL 是一個開源的,免費的,同時非常強大的關係型數據管理系統 |
強大的社區 | PostgreSQL 背後有熱忱而經驗豐富的社區,可以通過知識庫和問答網站獲取支持,全天候免費 |
強大的第三方支持 | 即使其本身功能十分強大,PostgreSQL 仍附帶有許多強大的開源第三方工具來輔助系統的設計、管理和使用 |
可擴展性 | 可以用預先存儲的流程來程序性擴展 PostgreSQL ,一個高級的關係型數據庫理應如此 |
面向對象 | PostgreSQL 不只是一個關係型數據庫,還是一個面向對象數據庫——支持嵌套,及一些其他功能 |
3、PostgreSQL的缺點:
性能 | 對於簡單而繁重的讀取操作, 超過了 PostgreSQL 的殺傷力,可能會出現比同行(如MySQL)更低的性能 |
普及 | 按給出的該工具的性質,從普及度來說它還缺乏足夠後臺支撐,儘管有大量的部署——這可能會影響能夠獲得支持的容易程度 |
託管 | 由於上述因素的影響,要讓主機或服務提供商提出使用PostgreSQL實例是很難的 |
4、何時使用PostgreSQL?
數據完整性 | 當可靠性和數據完整性是絕對必要而無需理由時,PostgreSQL是更好的選擇 |
複雜的自定義過程 | 如果你需要你的數據庫執行自定義過程,可擴展的PostgreSQL是更好的選擇 |
整合 | 在將來,如果可能要把整個數據庫系統遷移到另一個適當的解決方案(例如Oracle)中,PostgreSQL對於這種切換將是最兼容和易於操作的 |
複雜的設計 | 相比其他的開源和免費的 RDBMS(關係數據庫管理系統)實現來說,對於複雜的數據庫設計,PostgreSQL提供了大部分的功能和可能性,同時並沒放棄其他有價值的地方 |
5、何時不用 PostgreSQL?
速度 | 如果你需要的只是快速的讀取操作, PostgreSQL 不是爲此而準備的工具 |
簡化體制 | 除非你需要絕對的數據完整性,原子性,一致性,隔離性,耐久性,或複雜的設計,PostgreSQL 對簡化體制來說是殺手 |
複製 | 除非你願意花不少時間,精力和資源,否則對於那些缺乏數據庫和系統管理經驗的人來說,實現與MySQL的(主從)複製可能不容易 |