PostgreSQL 教程: PostgreSQL 对比 MySQL

九月 16, 2023

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

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

下表比较了 PostgreSQL 与 MySQL 的功能:

PostgreSQL vs. MySQL

PostgreSQL MySQL
口号 世界上最先进的开源数据库。 世界上最受欢迎的开源数据库。
开发 PostgreSQL 是一个开源项目 MySQL 是一个开源产品
发音 post gress queue ell my ess queue ell
许可 BSD 风格的许可证 GNU 通用公共许可证
实现编程语言 C C/C++
图形用户界面工具 PgAdmin MySQL Workbench
ACID 支持 支持
存储引擎 单一存储引擎 多种存储引擎,例如 InnoDB 和 MyISAM
全文检索 支持 支持(有限)
删除临时表 DROP TABLE语句中没有TEMP或者TEMPORARY关键字 DROP TABLE语句中支持TEMPTEMPORARY关键字,允许只删除临时表
DROP TABLE 支持带CASCADE选项删除表的依赖对象,例如表和视图 不支持CASCADE选项
TRUNCATE TABLE PostgreSQL 的TRUNCATE TABLE支持更多功能,如CASCADERESTART IDENTITYCONTINUE IDENTITY、事务安全等。 MySQL 的TRUNCATE TABLE不支持CASCADE和事务安全。数据一旦删除,就无法回滚。
自动递增列 SERIAL AUTO_INCREMENT
标识列 支持 不支持
分析函数 支持 不支持
数据类型 支持许多高级类型,例如 arrayhstore用户定义类型 SQL 标准类型
无符号整数 不支持 支持
布尔类型 支持 内部使用TINYINT(1)实现布尔值
IP 地址数据类型 支持 不支持
设置列的默认值 默认值同时支持常量和函数调用 默认值必须是常量,对于TIMESTAMPDATETIME类型的列也可以使用CURRENT_TIMESTAMP
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支持覆盖索引,允许仅通过扫描索引来检索数据,而不需要接触表数据。这对于具有数百万行的大型表来说是有利的。
触发器 支持可以在大多数类型的命令上触发的触发器,但影响实例级数据库对象的命令除外,例如角色和表空间。 仅限于某些命令
分区 范围、列表 范围、列表、HASH、KEY 以及使用范围或列表与 HASH 或 KEY 子分区组合的复合分区
任务调度 pgAgent 调度事件
连接扩展性 每个新连接都是一个操作系统进程 每个新连接都是一个操作系统线程