我们类比mysql
1.架构部署层面
2.创建库,选择引擎
3.sql语法层面
3.1创建表阶段
数据类型的不同
3.2创建索引,主键
3.3 crud阶段的语法不同
🏛️ 1. 架构部署层面
| 对比项 | MySQL | PostgreSQL | SQLite | MariaDB |
|---|---|---|---|---|
| 架构模式 | 客户端-服务器 (C/S) 服务器监听端口接收客户端请求。 | 客户端-服务器 (C/S) 类似MySQL,但采用进程模型,每个连接会启动一个后端进程。 | 嵌入式 (Embedded) 无服务器架构,直接集成到应用中。 | 客户端-服务器 (C/S) 与 MySQL 基本相同,可看作其"增强版"。 |
| 数据存储 | 数据存储在服务器管理的多个文件中。 | 类似 MySQL。 | 单文件 ,所有数据(表、索引等)存放在一个 .db 文件中。 |
同 MySQL。 |
| 部署与资源 | 需要安装、配置、启动服务,资源占用较高。 | 部署步骤与 MySQL 类似,但优化配置不同。 | 零配置、开箱即用,库文件大小约 600KB-2MB,资源占用极低。 | 与 MySQL 高度相似,通常可无缝替换。 |
| 适用场景 | 通用Web应用、高并发OLTP、中小型系统、读写分离架构。 | 企业级应用、复杂数据分析,数据完整性和SQL标准要求高的场景。 | 移动应用、桌面软件、IoT设备,嵌入式设备和低并发场景。 | 同 MySQL,适合希望使用 MySQL 但又担心闭源风险 、追求更多开源特性的用户。 |
⚙️ 2. 创建库,选择引擎
| 对比项 | MySQL | PostgreSQL | SQLite | MariaDB |
|---|---|---|---|---|
| 核心设计 | 插件式存储引擎架构 | 一体化架构 + 丰富扩展机制 | 嵌入式、零配置 | 同 MySQL,但增强/新增了多种存储引擎 |
| 存储引擎 | InnoDB (默认) ,支持事务、行级锁、外键 。 另有 MyISAM (无事务,读多写少)、MEMORY 等。 | 统一存储引擎,所有功能集中优化,无插件引擎概念。 | 单一存储引擎,无引擎可选概念。 | 除 MySQL 支持的引擎外,还有: Aria (MyISAM的增强版,更稳定)。 ColumnStore (列式存储,适用OLAP)。 MyRocks (基于RocksDB,高压缩比)。 支持同一张表使用不同引擎。 |
📝 3. SQL语法层面
3.1 常见数据类型对比
| 数据类型 | MySQL | PostgreSQL | SQLite | MariaDB |
|---|---|---|---|---|
| 整数 | TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT | SMALLINT, INTEGER, BIGINT 9†L20-L21 | INTEGER (可自动识别类型) | 与 MySQL 完全兼容 |
| 浮点数/精确数 | FLOAT, DOUBLE, DECIMAL9†L21-L23 | REAL, DOUBLE PRECISION, DECIMAL/NUMERIC9†L21-L23 | REAL, NUMERIC20†L8 | 同 MySQL |
| 字符串 | CHAR, VARCHAR, TEXT (含 TINYTEXT, MEDIUMTEXT, LONGTEXT) | CHAR, VARCHAR, TEXT 10†L27-L30 | TEXT (无长度限制区分) | 同 MySQL |
| 布尔值 | BOOLEAN/BOOL (实际是 TINYINT(1) 别名) | 原生 BOOLEAN 类型 | 无原生类型 (通常用0/1) | 同 MySQL |
| 日期时间 | DATE, TIME, DATETIME, TIMESTAMP, YEAR | DATE, TIME, TIMESTAMP, TIMESTAMPTZ | TEXT/INTEGER/REAL | 同 MySQL |
| JSON | MySQL 5.7+ 支持 JSON 类型,支持有限索引 | 支持 JSON 和高效的 JSONB (二进制) 类型,支持 GIN 索引高效检索 | 无原生支持 | 存储为 TEXT,无二进制 JSONB 类型 |
| 高级类型 | 有限支持 (无数组、UUID等) | 支持 数组、UUID、HSTORE、网络地址、几何类型、范围类型等 | 不支持 | 基本与 MySQL 相同 |
3.2 创建索引与主键
| 索引维度 | MySQL (InnoDB) | PostgreSQL | SQLite | MariaDB |
|---|---|---|---|---|
| 索引类型 | B-Tree (默认), Hash , Full-Text , R-Tree (空间索引) | B-Tree (默认), Hash, GIN, GiST, SP-GiST, BRIN | B-Tree 5†L8 | 与 MySQL 类似,新增了更多索引算法的支持 |
| 主键实现 | 聚簇索引。数据和主键索引存储在一起,表本身就是索引组织表 | 堆表 + 二级索引。没有专门的"主键索引",所有索引都指向元组ID (TID) | 与 PostgreSQL 类似,是一个隐藏的 ROWID |
同 MySQL (InnoDB引擎) |
| 函数/部分索引 | 8.0+ 支持函数索引;不支持部分索引 | 支持函数索引和部分索引 (带WHERE条件的索引) | 不支持 | 8.0+ 支持函数索引;不支持部分索引 |
| 索引并发创建 | 不支持并发创建,会阻塞写操作 | 支持 CREATE INDEX CONCURRENTLY,不阻塞写操作 |
不支持 | 同 MySQL |
3.3 CRUD语法差异
| SQL操作 | MySQL | PostgreSQL | SQLite | MariaDB |
|---|---|---|---|---|
| 字符串连接 | CONCAT('Hello', 'World') |
`'Hello' | 'World'` | |
| 分页查询 | SELECT ... LIMIT offset, count 或 LIMIT count OFFSET offset |
SELECT ... LIMIT count OFFSET offset (标准语法) |
同 PostgreSQL (推荐标准语法) | 同 MySQL |
| 自增列/序列 | AUTO_INCREMENT,用 LAST_INSERT_ID() 获取最后ID |
SERIAL 或 IDENTITY,用 RETURNING 子句或 CURRVAL() 获取ID |
AUTOINCREMENT 关键字 |
同 MySQL,也支持 AUTO_INCREMENT |
| 字符串引号 | 支持单引号 和双引号表示字符串 | 仅支持单引号表示字符串 | 仅支持单引号 | 同 MySQL |
| 注释语法 | # 单行注释 和 -- 单行注释 |
-- 单行注释 (需跟空格) |
同 PostgreSQL | 同 MySQL |