常見的關系型數據庫比較
比較項 |
mysql |
postgresql |
oracle |
sqlserver |
access |
sqllite |
mariadb |
實例 |
通過執行 MySQL 命令(mysqld)啟動實例。一個實例可以管理一個或多個數據庫。一台服務器可以運行多個 mysqld 實例。一個實例管理器可以監視 mysqld 的各個實例。
|
通過執行 Postmaster 進程(pg_ctl)啟動實例。一個實例可以管理一個或多個數據庫,這些數據庫組成一個集群。集群是磁盤上的一個區域,這個區域在安裝時初始化並由一個目錄組成,所有數據都存儲在這個目錄中。使用 initdb 創建第一個數據庫。一台機器上可以啟動多個實例。
|
oracle的內存結構和進程合並起來叫實例。管理oracle數據庫,同時提供服務。 通過sqlplus 啟動一個實例。一個實例可以管理一個或多個數據庫,
|
SQL Server(MSSQLSERVER),它就標志着一個實例,這個實例的名字叫MSSQLSERVER,也叫默認實例
|
|
QtSql模塊提供了與平台以及數據庫種類無關的訪問SQL數據庫的接口,這個接口由利用Qt的模型視圖結構將數據庫與用戶界面集成的一套類來支持。 QSqlDatabase對象象征了數據庫的關聯。Qt使用驅動程序與各種數據庫的應用編程接口進行通信
|
同mysql |
數據庫 |
數據庫是命名的對象集合,是與實例中的其他數據庫分離的實體。一個 MySQL 實例中的所有數據庫共享同一個系統編目。
|
數據庫是命名的對象集合,每個數據庫是與其他數據庫分離的實體。每個數據庫有自己的系統編目,但是所有數據庫共享 pg_databases。
|
|
|
|
|
|
數據庫緩沖區 |
通過 innodb_buffer_pool_size 配置參數設置數據緩沖區。這個參數是內存緩沖區的字節數,InnoDB 使用這個緩沖區來緩存表的數據和索引。在專用的數據庫服務器上,這個參數最高可以設置為機器物理內存量的 80%。
|
Shared_buffers 緩存。在默認情況下分配 64 個緩沖區。默認的塊大小是 8K。可以通過設置 postgresql.conf 文件中的 shared_buffers 參數來更新緩沖區緩存。
|
|
|
|
|
|
數據庫鏈接 |
客戶機使用 CONNECT 或 USE 語句連接數據庫,這時要指定數據庫名,還可以指定用戶 id 和密碼。使用角色管理數據庫中的用戶和用戶組。
|
客戶機使用 connect 語句連接數據庫,這時要指定數據庫名,還可以指定用戶 id 和密碼。使用角色管理數據庫中的用戶和用戶組。
|
|
|
|
|
|
加密方法 |
可以在表級指定密碼來對數據進行加密。還可以使用 AES_ENCRYPT 和 AES_DECRYPT 函數對列數據進行加密和解密。可以通過 SSL 連接實現網絡加密。
|
可以使用 pgcrypto 庫中的函數對列進行加密/解密。可以通過 SSL 連接實現網絡加密。
|
|
|
|
|
|
審計 |
可以對 querylog 執行 grep。
|
可以在表上使用 PL/pgSQL 觸發器來進行審計。
|
|
|
|
|
|
查詢解釋 |
使用 EXPLAIN 命令查看查詢的解釋計划。
|
使用 EXPLAIN 命令查看查詢的解釋計划。
|
|
|
|
|
|
備份,恢復和日志 |
InnoDB 使用寫前(write-ahead)日志記錄。支持在線和離線完全備份以及崩潰和事務恢復。需要第三方軟件才能支持熱備份
|
在數據目錄的一個子目錄中維護寫前日志。支持在線和離線完全備份以及崩潰、時間點和事務恢復。 可以支持熱備份。
|
|
|
|
|
|
表類型 |
取決於存儲引擎。例如,NDB 存儲引擎支持分區表,內存引擎支持內存表。
|
支持臨時表、常規表以及范圍和列表類型的分區表。不支持哈希分區表。 由於PostgreSQL的表分區是通過表繼承和規則系統完成了,所以可以實現更復雜的分區方式。
|
|
|
|
|
|
索引類型 |
取決於存儲引擎。MyISAM:BTREE,InnoDB:BTREE。
|
支持 B-樹、哈希、R-樹和 Gist 索引。
|
|
|
|
|
|
約束 |
支持主鍵、外鍵、惟一和非空約束。對檢查約束進行解析,但是不強制實施。
|
支持主鍵、外鍵、惟一、非空和檢查約束。
|
|
|
|
|
|
存儲過程和函數 |
支持 CREATE PROCEDURE 和 CREATE FUNCTION 語句。存儲過程可以用 SQL 和 C++ 編寫。用戶定義函數可以用 SQL、C 和 C++ 編寫。
|
沒有單獨的存儲過程,都是通過函數實現的。用戶定義函數可以用 PL/pgSQL(專用的過程語言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 編寫。
|
|
|
|
|
|
觸發器 |
支持行前觸發器、行后觸發器和語句觸發器,觸發器語句用過程語言復合語句編寫。
|
支持行前觸發器、行后觸發器和語句觸發器,觸發器過程用 C 編寫。
|
|
|
|
|
|
並發控制 |
支持表級和行級鎖。InnoDB 存儲引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 語句在事務級設置隔離級別
|
支持表級和行級鎖。支持的 ANSI 隔離級別是 Read Committed(默認 —— 能看到查詢啟動時數據庫的快照)和 Serialization(與 Repeatable Read 相似 —— 只能看到在事務啟動之前提交的結果)。使用 SET TRANSACTION 語句在事務級設置隔離級別。使用 SET SESSION 在會話級進行設置。
|
|
|
|
|
|
xml支持 |
有限的 XML 支持。
|
有限的 XML 支持。
|
|
|
|
|
|
特性 |
|
|
|
|
|
|
|
劣性 |
|
|
|
|
|
|
|
優點 |
|
|
|
|
|
|
|
缺點 |
|
|
|
|
|
|
|