這篇“postgresql和MySQL有哪些區(qū)別”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“postgresql和mysql有哪些區(qū)別”文章吧。
在福貢等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計、做網(wǎng)站 網(wǎng)站設(shè)計制作定制網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),營銷型網(wǎng)站,外貿(mào)網(wǎng)站建設(shè),福貢網(wǎng)站建設(shè)費用合理。
區(qū)別:1、MySQL通過執(zhí)行命令啟動實例,而PG通過執(zhí)行進程來啟動;2、PG支持物化視圖、而MySQL不支持物化視圖;3、MySQL不支持拓展性,而PG是高度可擴展的;4、PG存儲過程的功能支持要比MySQL好,具備本地緩存執(zhí)行計劃的能力。
本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。
MySQL
MySQL相對來說比較年輕,首度出現(xiàn)在1994年。它聲稱自己是最流行的開源數(shù)據(jù)庫。MySQL就是LAMP(用于Web開發(fā)的軟件包,包括 Linux、Apache及Perl/PHP/Python)中的M。構(gòu)建在LAMP棧之上的大多數(shù)應(yīng)用都會使用MySQL,包括那些知名的應(yīng)用,如 WordPress、Drupal、Zend及phpBB等。
一開始,MySQL的設(shè)計目標(biāo)是成為一個快速的Web服務(wù)器后端,使用快速的索引序列訪問方法(ISAM),不支持ACID。經(jīng)過早期快速的發(fā)展之 后,MySQL開始支持更多的存儲引擎,并通過InnoDB引擎實現(xiàn)了ACID。MySQL還支持其他存儲引擎,提供了臨時表的功能(使用MEMORY存 儲引擎),通過MyISAM引擎實現(xiàn)了高速讀的數(shù)據(jù)庫,此外還有其他的核心存儲引擎與第三方引擎。
MySQL的文檔非常豐富,有很多質(zhì)量不錯的免費參考手冊、圖書與在線文檔,還有來自于Oracle和第三方廠商的培訓(xùn)與支持。
MySQL近幾年經(jīng)歷了所有權(quán)的變更和一些頗具戲劇性的事件。它最初是由MySQL AB開發(fā)的,然后在2008年以10億美金的價格賣給了Sun公司,Sun公司又在2010年被Oracle收購。Oracle支持MySQL的多個版 本:Standard、Enterprise、Classic、Cluster、Embedded與Community。其中有一些是免費下載的,另外一 些則是收費的。其核心代碼基于GPL許可,對于那些不想使用GPL許可的開發(fā)者與廠商來說還有商業(yè)許可可供使用。
現(xiàn)在,基于最初的MySQL代碼還有更多的數(shù)據(jù)庫可供選擇,因為幾個核心的MySQL開發(fā)者已經(jīng)發(fā)布了MySQL分支。最初的MySQL創(chuàng)建者之一 Michael “Monty” Widenius貌似后悔將MySQL賣給了Sun公司,于是又開發(fā)了他自己的MySQL分支MariaDB,它是免費的,基于GPL許可。知名的 MySQL開發(fā)者Brian Aker所創(chuàng)建的分支Drizzle對其進行了大量的改寫,特別針對多CPU、云、網(wǎng)絡(luò)應(yīng)用與高并發(fā)進行了優(yōu)化。
PostgreSQL
PostgreSQL(簡稱PG)標(biāo)榜自己是世界上最先進的開源數(shù)據(jù)庫。PostgreSQL的一些粉絲說它能與Oracle相媲美,而且沒有那么昂貴的價格和傲慢的客服。它擁有很長的歷史,最初是1985年在加利福尼亞大學(xué)伯克利分校開發(fā)的,作為Ingres數(shù)據(jù)庫的后繼。
PostgreSQL是完全由社區(qū)驅(qū)動的開源項目,由全世界超過1000名貢獻(xiàn)者所維護。它提供了單個完整功能的版本,而不像MySQL那樣提供了 多個不同的社區(qū)版、商業(yè)版與企業(yè)版。PostgreSQL基于自由的BSD/MIT許可,組織可以使用、復(fù)制、修改和重新分發(fā)代碼,只需要提供一個版權(quán)聲明即可。
可靠性是PostgreSQL的最高優(yōu)先級。它以堅如磐石的品質(zhì)和良好的工程化而聞名,支持高事務(wù)、任務(wù)關(guān)鍵型應(yīng)用。PostgreSQL的文檔非 常精良,提供了大量免費的在線手冊,還針對舊版本提供了歸檔的參考手冊。PostgreSQL的社區(qū)支持是非常棒的,還有來自于獨立廠商的商業(yè)支持。
數(shù)據(jù)一致性與完整性也是PostgreSQL的高優(yōu)先級特性。PostgreSQL是完全支持ACID特性的,它對于數(shù)據(jù)庫訪問提供了強大的安全性 保證,充分利用了企業(yè)安全工具,如Kerberos與OpenSSL等。你可以定義自己的檢查,根據(jù)自己的業(yè)務(wù)規(guī)則確保數(shù)據(jù)質(zhì)量。
在眾多的管理特性 中,point-in-time recovery(PITR)是非常棒的特性,這是個靈活的高可用特性,提供了諸如針對失敗恢復(fù)創(chuàng)建熱備份以及快照與恢復(fù)的能力。但這并不是 PostgreSQL的全部,項目還提供了幾個方法來管理PostgreSQL以實現(xiàn)高可用、負(fù)載均衡與復(fù)制等,這樣你就可以使用適合自己特定需求的功能了。
postgresql和mysql的區(qū)別
特性 | MySQL | PostgreSQL |
實例 | 通過執(zhí)行 MySQL 命令(mysqld)啟動實例。一個實例可以管理一個或多個數(shù)據(jù)庫。一臺服務(wù)器可以運行多個 mysqld 實例。一個實例管理器可以監(jiān)視 mysqld 的各個實例。 | 通過執(zhí)行 Postmaster 進程(pg_ctl)啟動實例。一個實例可以管理一個或多個數(shù)據(jù)庫,這些數(shù)據(jù)庫組成一個集群。集群是磁盤上的一個區(qū)域,這個區(qū)域在安裝時初始化并由一個目錄組成,所有數(shù)據(jù)都存儲在這個目錄中。使用 initdb 創(chuàng)建第一個數(shù)據(jù)庫。一臺機器上可以啟動多個實例。 |
數(shù)據(jù)庫 | 數(shù)據(jù)庫是命名的對象集合,是與實例中的其他數(shù)據(jù)庫分離的實體。一個 MySQL 實例中的所有數(shù)據(jù)庫共享同一個系統(tǒng)編目。 | 數(shù)據(jù)庫是命名的對象集合,每個數(shù)據(jù)庫是與其他數(shù)據(jù)庫分離的實體。每個數(shù)據(jù)庫有自己的系統(tǒng)編目,但是所有數(shù)據(jù)庫共享 pg_databases。 |
數(shù)據(jù)緩沖區(qū) | 通過 innodb_buffer_pool_size配置參數(shù)設(shè)置數(shù)據(jù)緩沖區(qū)。這個參數(shù)是內(nèi)存緩沖區(qū)的字節(jié)數(shù),InnoDB 使用這個緩沖區(qū)來緩存表的數(shù)據(jù)和索引。在專用的數(shù)據(jù)庫服務(wù)器上,這個參數(shù)最高可以設(shè)置為機器物理內(nèi)存量的 80%。 | Shared_buffers緩存。在默認(rèn)情況下分配 64 個緩沖區(qū)。默認(rèn)的塊大小是 8K??梢酝ㄟ^設(shè)置 postgresql.conf 文件中的 shared_buffers 參數(shù)來更新緩沖區(qū)緩存。 |
數(shù)據(jù)庫連接 | 客戶機使用 CONNECT 或 USE 語句連接數(shù)據(jù)庫,這時要指定數(shù)據(jù)庫名,還可以指定用戶 id 和密碼。使用角色管理數(shù)據(jù)庫中的用戶和用戶組。 | 客戶機使用 connect 語句連接數(shù)據(jù)庫,這時要指定數(shù)據(jù)庫名,還可以指定用戶 id 和密碼。使用角色管理數(shù)據(jù)庫中的用戶和用戶組。 |
身份驗證 | MySQL 在數(shù)據(jù)庫級管理身份驗證。 基本只支持密碼認(rèn)證。 | PostgreSQL 支持豐富的認(rèn)證方法:信任認(rèn)證、口令認(rèn)證、Kerberos 認(rèn)證、基于 Ident 的認(rèn)證、LDAP 認(rèn)證、PAM 認(rèn)證 |
加密 | 可以在表級指定密碼來對數(shù)據(jù)進行加密。還可以使用 AES_ENCRYPT 和 AES_DECRYPT 函數(shù)對列數(shù)據(jù)進行加密和解密??梢酝ㄟ^ SSL 連接實現(xiàn)網(wǎng)絡(luò)加密。 | 可以使用 pgcrypto 庫中的函數(shù)對列進行加密/解密??梢酝ㄟ^ SSL 連接實現(xiàn)網(wǎng)絡(luò)加密。 |
審計 | 可以對 querylog 執(zhí)行 grep。 | 可以在表上使用 PL/pgSQL 觸發(fā)器來進行審計。 |
備份、恢復(fù)和日志 | InnoDB 使用寫前(write-ahead)日志記錄。支持在線和離線完全備份以及崩潰和事務(wù)恢復(fù)。需要第三方軟件才能支持熱備份。 | 在數(shù)據(jù)目錄的一個子目錄中維護寫前日志。支持在線和離線完全備份以及崩潰、時間點和事務(wù)恢復(fù)。 可以支持熱備份。 |
約束 | 支持主鍵、外鍵、惟一和非空約束。對檢查約束進行解析,但是不強制實施。 | 支持主鍵、外鍵、惟一、非空和檢查約束。 |
存儲過程和用戶定義函數(shù) | 支持 CREATE PROCEDURE 和 CREATE FUNCTION 語句。存儲過程可以用 SQL 和 C++ 編寫。用戶定義函數(shù)可以用 SQL、C 和 C++ 編寫。 | 沒有單獨的存儲過程,都是通過函數(shù)實現(xiàn)的。用戶定義函數(shù)可以用 PL/pgSQL(專用的過程語言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 編寫。 |
觸發(fā)器 | 支持行前觸發(fā)器、行后觸發(fā)器和語句觸發(fā)器,觸發(fā)器語句用過程語言復(fù)合語句編寫。 | 支持行前觸發(fā)器、行后觸發(fā)器和語句觸發(fā)器,觸發(fā)器過程用 C 編寫。 |
系統(tǒng)配置文件 | my.conf | Postgresql.conf |
數(shù)據(jù)庫配置 | my.conf | Postgresql.conf |
客戶機連接文件 | my.conf | pg_hba.conf |
XML 支持 | 有限的 XML 支持。 | 有限的 XML 支持。 |
數(shù)據(jù)訪問和管理服務(wù)器 | OPTIMIZE TABLE—— 回收未使用的空間并消除數(shù)據(jù)文件的碎片 myisamchk -analyze—— 更新查詢優(yōu)化器所使用的統(tǒng)計數(shù)據(jù)(MyISAM 存儲引擎) mysql—— 命令行工具 MySQL Administrator—— 客戶機 GUI 工具 | Vacuum—— 回收未使用的空間 Analyze—— 更新查詢優(yōu)化器所使用的統(tǒng)計數(shù)據(jù) psql—— 命令行工具 pgAdmin—— 客戶機 GUI 工具 |
并發(fā)控制 | 支持表級和行級鎖。InnoDB 存儲引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 語句在事務(wù)級設(shè)置隔離級別。 | 支持表級和行級鎖。支持的 ANSI 隔離級別是 Read Committed(默認(rèn) —— 能看到查詢啟動時數(shù)據(jù)庫的快照)和 Serialization(與 Repeatable Read 相似 —— 只能看到在事務(wù)啟動之前提交的結(jié)果)。使用 SET TRANSACTION 語句在事務(wù)級設(shè)置隔離級別。使用 SET SESSION 在會話級進行設(shè)置。 |
VS | PostgreSQL | MySQL |
---|---|---|
開源 | PostgreSQL是一個免費的開源系統(tǒng),它受PostgreSQL許可證(自由的開源許可證)的約束。 | MySQL屬于Oracle旗下產(chǎn)品,并提供幾種付費版本供用戶使用 |
管理 | PostgreSQL是全球用戶共同發(fā)展的產(chǎn)品 | MySQL是GNU通用公共許可以及各種專有協(xié)議條款下的產(chǎn)品 |
性能 | PostgreSQL適合對讀寫速度要求很高的大型系統(tǒng)中使用 | MySQL主要用于Web應(yīng)用程序,該Web應(yīng)用程序僅需要數(shù)據(jù)庫來進行數(shù)據(jù)交易。 |
遵循ACID | PostgreSQL從頭到尾都遵循ACID原則,并確保滿足需求 | MySQL只有在使用InnoDB和NDB集群存儲引擎時才符合ACID要求。 |
SQL 兼容性 | “從文檔看,PostgreSQL是兼容大部分SQL的。 PostgreSQL支持SQL:2011的大多數(shù)功能。在核心一致性所需的179個強制性功能中,PostgreSQL至少兼容160個。此外,還有一系列受支持的可選功能。” | “從文檔看,MySQL在某些版本是兼容部分SQL。 我們對該產(chǎn)品的主要目標(biāo)之一是繼續(xù)努力達(dá)到SQL標(biāo)準(zhǔn)的要求,但又不犧牲速度或可靠性。我們可以添加SQL擴展或?qū)Ψ荢QL功能的支持,如果這樣可以極大地提高MySQL服務(wù)器在我們大部分用戶群中的可用性?!?/td> |
支持平臺 | PostgreSQL可以運行在Linux, Windows (Win2000 SP4 及以上),F(xiàn)reeBSD,OpenBSD,NetBSD , Mac OS X, AIX, IRIX ,Solaris和 Tu64. 也支持由技術(shù)巨頭惠普開發(fā)的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不支持物化視圖 |
數(shù)據(jù)備份 | PostgreSQL支持主備復(fù)制,并且還可以通過實現(xiàn)第三方擴展來處理其他類型的復(fù)制 | MySQL支持主備復(fù)制,其中每個節(jié)點都是主節(jié)點,并且有權(quán)更新數(shù)據(jù) |
可拓展性 | PostgreSQL是高度可擴展的,您可以添加和擁有數(shù)據(jù)類型,運算符,索引類型和功能語言。 | MySQL不支持拓展性。 |
訪問方法 | PostgreSQL支持所有標(biāo)準(zhǔn)。 | MySQL支持所有標(biāo)準(zhǔn)。 |
社區(qū)支持 | PostgreSQL有一個活躍的社區(qū)支持,該社區(qū)幫助改善現(xiàn)有功能,其富有創(chuàng)造力的提交者竭盡全力確保該數(shù)據(jù)庫保持最新的功能和最大的安全性,成為最先進的數(shù)據(jù)庫。 | MySQL也有一個龐大的追隨者社區(qū),這些社區(qū)貢獻(xiàn)者,特別是在被Oracle收購之后,主要關(guān)注一些偶爾出現(xiàn)的新功能,并維護現(xiàn)有功能。 |
安全性 | PostgreSQL為連接提供本機SSL支持,以加密客戶端/服務(wù)器通信。 PSQL還具有行級安全性。 | MySQL是高度安全的,并且包含多個安全功能。 |
PostgreSQL相對于MySQL的優(yōu)勢
在SQL的標(biāo)準(zhǔn)實現(xiàn)上要比MySQL完善,而且功能實現(xiàn)比較嚴(yán)謹(jǐn);
存儲過程的功能支持要比MySQL好,具備本地緩存執(zhí)行計劃的能力;
對表連接支持較完整,優(yōu)化器的功能較完整,支持的索引類型很多,復(fù)雜查詢能力較強;
PG主表采用堆表存放,MySQL采用索引組織表,能夠支持比MySQL更大的數(shù)據(jù)量。
PG的主備復(fù)制屬于物理復(fù)制,相對于MySQL基于binlog的邏輯復(fù)制,數(shù)據(jù)的一致性更加可靠,復(fù)制性能更高,對主機性能的影響也更小。
MySQL的存儲引擎插件化機制,存在鎖機制復(fù)雜影響并發(fā)的問題,而PG不存在。
MySQL相對于PG的優(yōu)勢:
innodb的基于回滾段實現(xiàn)的MVCC機制,相對PG新老數(shù)據(jù)一起存放的基于XID的MVCC機制,是占優(yōu)的。新老數(shù)據(jù)一起存放,需要定時觸 發(fā)VACUUM,會帶來多余的IO和數(shù)據(jù)庫對象加鎖開銷,引起數(shù)據(jù)庫整體的并發(fā)能力下降。而且VACUUM清理不及時,還可能會引發(fā)數(shù)據(jù)膨脹;
MySQL采用索引組織表,這種存儲方式非常適合基于主鍵匹配的查詢、刪改操作,但是對表結(jié)構(gòu)設(shè)計存在約束;
MySQL的優(yōu)化器較簡單,系統(tǒng)表、運算符、數(shù)據(jù)類型的實現(xiàn)都很精簡,非常適合簡單的查詢操作;
MySQL分區(qū)表的實現(xiàn)要優(yōu)于PG的基于繼承表的分區(qū)實現(xiàn),主要體現(xiàn)在分區(qū)個數(shù)達(dá)到上千上萬后的處理性能差異較大。
MySQL的存儲引擎插件化機制,使得它的應(yīng)用場景更加廣泛,比如除了innodb適合事務(wù)處理場景外,myisam適合靜態(tài)數(shù)據(jù)的查詢場景。
以上就是關(guān)于“postgresql和mysql有哪些區(qū)別”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。