PostgreSQL 与 MySQL
在选择开源关系数据库管理系统时,PostgreSQL 与 MySQL 是一个重要的决定。PostgreSQL 和 MySQL 都是久经考验的解决方案,可以与 Oracle 和 SQL Server 等企业解决方案竞争。
MySQL 以易用性和速度着称,而 PostgreSQL 拥有更多高级功能,这也是 PostgreSQL 经常被描述为 Oracle 的开源版本的原因。
下表比较了 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 子分区的组合 |
| 任务计划 | 代理 | 预定活动 |
| 连接可扩展性 | 每个新连接都是一个操作系统进程 | 每个新连接都是一个操作系统线程 |