Mysql
MySQL 和 PostgreSQL 在編寫 SQL 查詢方面有什麼區別?
除了性能和安全性之外,MySQL 和 Postgres 之間真的有什麼區別嗎,比如 SQL 查詢、內置函式、過程等等?
我問這個是因為我熟悉 PHP 和 MySQL (phpMyAdmin) 但不熟悉 Postgres (phpPgAdmin)
(關於 PostgreSQL 9.3 和 MySQL 5.6,寫於 2014 年;如果您正在查看其他版本,這可能已經過時了):
更多功能。
CHECK
約束- 真正的
SERIALIZABLE
隔離- 數組(包括對數組的索引支持)
- 視窗函式 (
lead
,lag
,row_number
, 等)- 公共表表達式(
WITH
查詢),包括遞歸 CTE 和可寫 CTE- 雜湊
hstore
類型及其索引支持- SQL/XML 支持
json
支持- 適用於多種類型的豐富函式和運算符
- 部分和函式/表達式索引,包括部分唯一索引和唯一表達式索引
- 複合類型
- 使用者定義的聚合和運算符
- 設置返回使用者定義的函式
- 使用者定義類型
- 事務性 DDL(這太棒了)
- 用於復雜索引需求的 GIN 和 GiST 索引,包括 K-最近鄰索引
- 地理資訊系統
UNLOGGED
表(儘管 MyISAM 在 MySQL 中滿足了這種需求)有關詳細資訊,請參閱綜合使用者手冊。
然而:
- 與 MySQL 不同,PostgreSQL 中沒有會話變數。(您可以為此濫用 GUC,但不能做與 MySQL 會話變數相同的事情)。
- PostgreSQL 沒有
INSERT ... ON DUPLICATE KEY UPDATE
(“upsert”)- 目前,PostgreSQL 具有與 MySQL 不同的複制選項。MySQL 沒有時間點恢復,但 PostgreSQL 沒有邏輯複製(但我們正在努力)。
GROUP BY ... ROLLUP
用於分組摘要。在 PostgreSQL 中做同樣的事情需要一個聯合,通常是在一個 CTE 上的兩個查詢上。- PostgreSQL 沒有內置的事件調度程序。您通常只使用 cron 或 Windows 任務計劃程序;還有來自 PgAdmin-III 的 PgAgent。