區別:1、MySQL透過執行指令啟動實例,而PG透過執行進程來啟動;2、PG支援物化視圖、而MySQL不支援物化視圖;3、MySQL不支援拓展性,而PG是高度可擴充的;4、PG預存程序的功能支援比MySQL好,具備本地快取執行計畫的能力。
本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。
MySQL
MySQL相對來說比較年輕,第一次出現在1994年。它聲稱自己是最受歡迎的開源資料庫。 MySQL就是LAMP(用於Web開發的軟體包,包括 Linux、Apache及Perl/PHP/Python)中的M。建構在LAMP堆疊之上的應用程式大多會使用MySQL,包括那些知名的應用,如 WordPress、Drupal、Zend及phpBB等。
一開始,MySQL的設計目標是成為一個快速的Web伺服器後端,使用快速的索引序列存取方法(ISAM),不支援ACID。經過早期快速的發展之 後,MySQL開始支援更多的儲存引擎,並透過InnoDB引擎實現了ACID。 MySQL也支援其他儲存引擎,提供了臨時表的功能(使用MEMORY存 儲引擎),透過MyISAM引擎實現了高速讀取的資料庫,此外還有其他的核心儲存引擎與第三方引擎。
MySQL的文檔非常豐富,有許多品質不錯的免費參考手冊、書籍與線上文檔,還有來自Oracle和第三方廠商的培訓與支援。
MySQL近年來經歷了所有權的變更和一些相當戲劇性的事件。它最初是由MySQL AB開發的,然後在2008年以10億美金的價格賣給了Sun公司,Sun公司又在2010年被Oracle收購。 Oracle支援MySQL的多個版本 本:Standard、Enterprise、Classic、Cluster、Embedded與Community。其中有些是免費下載的,另外一 有些則是收費的。其核心程式碼基於GPL許可,對於不想使用GPL許可的開發者與廠商來說還有商業許可可供使用。
現在,基於最初的MySQL程式碼還有更多的資料庫可供選擇,因為幾個核心的MySQL開發者已經發布了MySQL分支。最初的MySQL創作者之一 Michael “Monty” Widenius貌似後悔將MySQL賣給了Sun公司,於是又開發了他自己的MySQL分支MariaDB,它是免費的,基於GPL許可。由知名的 MySQL開發者Brian Aker所創建的分支Drizzle對其進行了大量的改寫,特別針對多CPU、雲端、網路應用與高並發進行了最佳化。
PostgreSQL
PostgreSQL(簡稱PG)標榜自己是世界上最先進的開源資料庫。 PostgreSQL的一些粉絲說它能與Oracle相媲美,而且沒有那麼昂貴的價格和傲慢的客服。它擁有很長的歷史,最初是1985年在加州大學柏克萊分校開發的,作為Ingres資料庫的後繼。
PostgreSQL是完全由社群驅動的開源項目,由全世界超過1000名貢獻者所維護。它提供了單一完整功能的版本,而不像MySQL那樣提供了 多個不同的社群版、商業版與企業版。 PostgreSQL基於自由的BSD/MIT許可,組織可以使用、複製、修改和重新分發程式碼,只需要提供一個版權聲明。
可靠性是PostgreSQL的最高優先權。它以堅如磐石的品質和良好的工程化而聞名,支援高事務、任務關鍵型應用。 PostgreSQL的文檔非 常精良,提供了大量免費的線上手冊,也針對舊版本提供了歸檔的參考手冊。 PostgreSQL的社群支援是非常棒的,還有來自獨立廠商的商業支援。
資料一致性與完整性也是PostgreSQL的高優先權特性。 PostgreSQL是完全支援ACID特性的,它對於資料庫存取提供了強大的安全性 保證,充分利用了企業安全工具,如Kerberos與OpenSSL等。你可以定義自己的檢查,根據自己的業務規則確保資料品質。
在眾多的管理特性中,point-in-time recovery(PITR)是非常棒的特性,這是個靈活的高可用特性,提供了諸如針對失敗恢復創建熱備份以及快照與恢復的能力。但這並不是 PostgreSQL的全部,專案還提供了幾個方法來管理PostgreSQL以實現高可用、負載平衡與複製等,這樣你就可以使用適合自己特定需求的功能了。
postgresql和mysql的差別
特性 | MySQL | PostgreSQL |
實例 | 透過執行MySQL 指令(mysqld)啟動實例。一個實例可以管理一個或多個資料庫。一台伺服器可以運行多個 mysqld 實例。一個實例管理器可以監視 mysqld 的各個實例。 |
透過執行 Postmaster 程序(pg_ctl)啟動實例。一個實例可以管理一個或多個資料庫,這些資料庫組成一個叢集。叢集是磁碟上的一個區域,這個區域在安裝時初始化並由一個目錄組成,所有資料都儲存在這個目錄中。使用 initdb 建立第一個資料庫。一台機器上可以啟動多個實例。 |
資料庫 | #資料庫是被命名的物件集合,是與實例中的其他資料庫分離的實體。一個 MySQL 實例中的所有資料庫共用同一個系統編目。 | 資料庫是命名的物件集合,每個資料庫是與其他資料庫分離的實體。每個資料庫都有自己的系統編目,但是所有資料庫共用 pg_databases。 |
資料緩衝區 | #透過 innodb_buffer_pool_size 設定參數設定資料緩衝區。這個參數是記憶體緩衝區的位元組數,InnoDB 使用這個緩衝區來快取表的資料和索引。在專用的資料庫伺服器上,這個參數最高可以設定為機器物理記憶體量的 80%。 | Shared_buffers 快取。在預設情況下分配 64 個緩衝區。預設的區塊大小是 8K。可以透過設定 postgresql.conf 檔案中的 shared_buffers 參數來更新緩衝區快取。 |
資料庫連線 | #客戶機使用CONNECT 或USE 語句連接資料庫,這時要指定資料庫名,還可以指定使用者id 和密碼。使用角色管理資料庫中的使用者和使用者群組。 | 客戶機使用 connect 語句連接資料庫,這時要指定資料庫名,也可以指定使用者 id 和密碼。使用角色管理資料庫中的使用者和使用者群組。 |
身份驗證 | #MySQL 在資料庫層級管理驗證。基本上只支援密碼認證。 | PostgreSQL 支援豐富的認證方法:信任認證、口令認證、Kerberos 認證、基於Ident 的認證、LDAP 認證、PAM 認證 |
加密 | 可以在表格級指定密碼來加密資料。也可以使用 AES_ENCRYPT 和 AES_DECRYPT 函數對資料列資料進行加密和解密。可透過 SSL 連線實現網路加密。 | 可以使用 pgcrypto 函式庫中的函式對列進行加密/解密。可透過 SSL 連線實現網路加密。 |
審計 | #可以對 querylog 執行 grep。 | 可以在表上使用 PL/pgSQL 觸發器來進行稽核。 |
備份、還原和日誌 | #InnoDB 使用寫前(write-ahead)日誌記錄。支援線上和離線完全備份以及崩潰和事務復原。需要第三方軟體才能支援熱備份。 | 在資料目錄的一個子目錄中維護寫前日誌。支援線上和離線完全備份以及崩潰、時間點和事務復原。可以支援熱備份。 |
約束 | 支援主鍵、外鍵、惟一和非空約束。對檢查約束進行解析,但是不強制實作。 | 支援主鍵、外鍵、惟一、非空和檢查約束。 |
預存程序和使用者定義函數 | #支援 CREATE PROCEDURE 和 CREATE FUNCTION 語句。預存程序可以用 SQL 和 C 編寫。使用者定義函數可以用 SQL、C 和 C 編寫。 | 沒有單獨的預存過程,都是透過函數實現的。使用者定義函數可以用 PL/pgSQL(專用的過程語言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 編寫。 |
觸發器 | #支援行前觸發器、行後觸發器和語句觸發器,觸發器語句用過程語言複合語句編寫。 | 支援行前觸發器、行後觸發器和語句觸發器,觸發器程序以 C 編寫。 |
系統設定檔 | #my.conf | Postgresql. conf |
資料庫配置 | #my.conf | Postgresql. conf |
客戶機連線檔案 | #my.conf | ## pg_hba.conf |
XML 支援 | 有限的XML 支援。 | 有限的 XML 支援。 |
資料存取與管理伺服器 | #OPTIMIZE TABLE - 回收未使用的空間並且消除資料檔案的碎片 myisamchk -analyze ——更新查詢最佳化器所使用的統計資料(MyISAM 儲存引擎) mysql ——命令列工具 MySQL Administrator — 客戶機GUI 工具 |
Vacuum — 回收未使用的空間 Analyze - 更新查詢最佳化器所使用的統計資料 psql - 命令列工具 pgAdmin - 客戶機GUI 工具 |
並發控制 | 支援表格級和行級鎖定。 InnoDB 儲存引擎支援 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 語句在交易層級設定隔離等級。 | 支援表級和行級鎖定。支援的 ANSI 隔離等級是 Read Committed(預設 —— 能看到查詢啟動時資料庫的快照)和 Serialization(與 Repeatable Read 相似 —— 只能看到在交易啟動之前提交的結果)。使用 SET TRANSACTION 語句在交易層級設定隔離等級。使用 SET SESSION 在會話層級進行設定。 |
VS | PostgreSQL | MySQL |
---|---|---|
開源 | PostgreSQL是一個免費的開源系統,它受PostgreSQL許可證(自由的開源許可證)的約束。 | MySQL屬於Oracle旗下產品,並提供幾個付費版本供用戶使用 |
#管理 | PostgreSQL是全球用戶共同發展的產品 | MySQL是GNU通用公共授權以及各種專有協議條款下的產品 |
#效能 | PostgreSQL適合對讀寫速度要求很高的大型系統中使用 | MySQL主要用於Web應用程序,該Web應用程式僅需要資料庫來進行資料交易。 |
遵循ACID | PostgreSQL從頭到尾都遵循ACID原則,並確保滿足需求 | MySQL只有在使用InnoDB和NDB叢集儲存引擎時才符合ACID要求。 |
SQL 相容性 | 「從文件看,PostgreSQL是相容大部分SQL 的。PostgreSQL支援SQL:2011的大多數功能。在核心一致性所需的179個強制性功能中,PostgreSQL至少相容160個。此外,還有一系列受支援的可選功能。」 | 「從文件看,MySQL在某些版本是相容部分SQL。我們對該產品的主要目標之一是繼續努力達到SQL標準的要求,但又不犧牲速度或可靠性。我們可以添加SQL擴展或對非SQL功能的支持,如果這樣可以大大提高MySQL伺服器在我們大部分用戶群中的可用性。」 |
支援平台 | PostgreSQL可以運行在Linux, Windows (Win2000 SP4 及以上),FreeBSD,OpenBSD,NetBSD , Mac OS X , AIX, IRIX ,Solaris和Tu64. 也支援由科技巨頭惠普開發的HP-UX OS,以及開源的Unix OS。 | MySQL可以運作在Oracle Solaris,Microsoft Windows, Linux Mac OS X。 MySQL擴充了對開源FreeBSD OS的支援 |
程式語言支援 | #PostgreSQL是用C語言寫的,它支援多種程式語言,最突出的C/ C , Delphi, JavaScript, Java, Python, R , Tcl , Go, Lisp, Erlang和.Net. | PostgreSQL是用C和C 寫的,它支援C/C , Erlang,PHP,Lisp,和Go, Perl,Java, Delphi, R ,和Node.js. |
物化視圖 | PostgreSQL支援物化視圖 | ##MySQL不支援物化視圖|
PostgreSQL支援主備複製,並且還可以透過實作第三方擴充功能來處理其他類型的複製 | MySQL支援主備複製,其中每個節點都是主節點,並且有權更新資料 | |
PostgreSQL是高度可擴展的,您可以新增和擁有資料類型,運算符,索引類型和功能語言。 | MySQL不支援拓展性。 | |
PostgreSQL支援所有標準。 | MySQL支援所有標準。 | |
PostgreSQL有一個活躍的社群支持,該社群幫助改善現有功能,其富有創意的提交者竭盡全力確保該資料庫保持最新的功能和最大的安全性,成為最先進的資料庫。 | MySQL也有一個龐大的追隨者社區,這些社區貢獻者,特別是在被Oracle收購之後,主要關註一些偶爾出現的新功能,並維護現有功能。 | |
PostgreSQL為連線提供本機SSL支持,以加密客戶端/伺服器通訊。 PSQL還具有行級安全性。 | MySQL是高度安全的,並且包含多個安全功能。 |
以上是postgresql和mysql有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!