PostgreSQL 与 MySQL

在选择开源关系数据库管理系统时,PostgreSQL 与 MySQL 是一个重要的决定。PostgreSQL 和 MySQL 都是久经考验的解决方案,可以与 Oracle 和 SQL Server 等企业解决方案竞争。

MySQL 以易用性和速度着称,而 PostgreSQL 拥有更多高级功能,这也是 PostgreSQL 经常被描述为 Oracle 的开源版本的原因。

下表比较了 PostgreSQL 与 MySQL 的特性:

PostgreSQL 与 MySQL

PostgreSQL MySQL
作为。而被知道 世界上最先进的开源数据库。 世界上最流行的开源数据库。
发展 PostgreSQL 是一个开源项目。 MySQL 是一个开源产品。
发音 后 gress 队列 ell 我的 ess 队列
许可 MIT 风格的许可证 GNU 通用公共许可证
实现编程语言 C C/C++
图形用户界面工具 管理员 MySQL 工作台
酸 是的 是的
存储引擎 单一存储引擎 多个 存储引擎,例如 InnoDB 和 MyISAM
全文检索 是的 是(有限)
删除临时表 语句中没有 TEMP 或 TEMPORARY 关键字 DROP TABLE 在只允许删除临时表的语句中支持 TEMPorTEMPORARY 关键字 DROP TABLE 。
DROP TABLE 支持 CASCADE 删除表的依赖对象(例如表和视图)的选项。 不支持 CASCADE 选项。
TRUNCATE TABLE PostgreSQLTRUNCATE TABLE 支持更多功能,如 CASCADE 、 RESTART IDENTITY 、 CONTINUE IDENTITY 、 事务安全等。 MySQLTRUNCATE TABLE 不支持 CASCADE 事务安全,即。数据一旦删除,将无法回滚。
自动递增列 SERIAL AUTO_INCREMENT
身份栏 是的 不
解析函数 是的 不
数据类型 支持多种高级类型,例如array、hstore和user-defined type。 SQL 标准类型
无符号整数 不 是的
布尔型 是的 在 TINYINT(1) 内部用于布尔值
IP 地址数据类型 是的 不
设置列的默认值 支持常量和函数调用 必须是常量或 CURRENT_TIMESTAMP for TIMESTAMP 或 DATETIME 列
CTE 是的 是(从 MySQL 8.0 开始支持CTE)
EXPLAIN 输出 更详细 不太详细
物化视图 是的 不
检查约束 是的 是(从 MySQL 8.0.16 开始支持,在此之前 MySQL 只是忽略了CHECK 约束)
表继承 是的 不
存储过程的编程语言 Ruby、Perl、Python、TCL、PL/pgSQL、SQL、JavaScript 等。 SQL:2003存储过程语法
FULL OUTER JOIN 是的 不
INTERSECT 是的 不
EXCEPT 是的 不
部分索引 是的 不
位图索引 是的 不
表达式索引 是的 不
覆盖索引 是(从 9.2 版开始) 是的。MySQL 支持覆盖索引,允许通过单独扫描索引而不接触表数据来检索数据。这在具有数百万行的大表的情况下是有利的。
触发器 支持可以触发大多数类型命令的触发器,但影响全局数据库的触发器除外,例如角色和表空间。 仅限于某些命令
分区 范围,列表 RANGE、LIST、HASH、KEY 和复合分区,使用 RANGE 或 LIST 与 HASH 或 KEY 子分区的组合
任务计划 代理 预定活动
连接可扩展性 每个新连接都是一个操作系统进程 每个新连接都是一个操作系统线程