目录
1 详细示例
1.1自动增量列
1.2 字符串连接
1.3 JSON 支持
2 总结
MySQL 和 PostgreSQL 是两种流行的开源关系数据库管理系统(RDBMS)。尽管它们在许多方面相似,但在 SQL 语法和功能上存在一些显著差异。
以下SQL语句的执行如果需要开发工具支持,可以尝试使用SQLynx或Navicat来执行。
以下是 MySQL 和 PostgreSQL 在 SQL 方面的主要差异的对比表:
类别 | MySQL | PostgreSQL |
---|---|---|
数值类型 | TINYINT , SMALLINT , MEDIUMINT , INT , BIGINT | SMALLINT , INTEGER , BIGINT |
日期和时间类型 | DATE , DATETIME , TIMESTAMP , TIME , YEAR | DATE , TIMESTAMP , TIMESTAMPTZ , TIME , TIMETZ , INTERVAL |
字符串类型 | CHAR , VARCHAR , TEXT , BLOB | CHAR , VARCHAR , TEXT , BYTEA |
自动增量列 | AUTO_INCREMENT | SERIAL , BIGSERIAL |
字符串连接 | CONCAT() | ` |
公共表表达式(CTE) | 从 8.0 版本开始支持 | 长期支持 |
JSON 支持 | 从 5.7 版本开始支持 JSON 类型和函数 | 从 9.2 版本开始支持 JSON,从 9.4 版本开始支持 JSONB,提供丰富的操作函数和操作符 |
索引类型 | B-tree, Full-text, Hash(仅限 MEMORY 引擎) | B-tree, Hash, GiST, SP-GiST, GIN, BRIN,多种索引类型,允许创建自定义索引 |
并发控制 | 默认使用 InnoDB 引擎,支持行级锁和 MVCC | 原生支持 MVCC,高效的并发控制 |
存储过程和函数 | 使用 DELIMITER 命令定义存储过程 | 使用 CREATE FUNCTION 和 PL/pgSQL 定义存储过程 |
高可用性和集群 | 支持主从复制、组复制和 InnoDB 集群 | 支持物理和逻辑复制,提供 pgpool-II 和 Patroni 等工具实现高可用性和自动故障转移 |
1 详细示例
1.1自动增量列
-
MySQL:
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) );
-
PostgreSQL:
CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100) );
1.2 字符串连接
-
MySQL:
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
-
PostgreSQL:
SELECT first_name || ' ' || last_name AS full_name FROM users;
1.3 JSON 支持
-
MySQL:
CREATE TABLE users ( id INT PRIMARY KEY, data JSON ); SELECT JSON_EXTRACT(data, '$.name') FROM users;
-
PostgreSQL:
CREATE TABLE users ( id SERIAL PRIMARY KEY, data JSONB ); SELECT data->>'name' FROM users;
2 总结
选择 MySQL 还是 PostgreSQL 取决于具体的需求和应用场景。MySQL 通常更适用于简单的 Web 应用和频繁读取的场景,而 PostgreSQL 则因其强大的功能和高扩展性更适用于复杂查询和大数据处理的场景。