news 2026/8/6 13:37:32

PostgreSQL vs MySQL:从零开始基础命令对比指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PostgreSQL vs MySQL:从零开始基础命令对比指南

背景

据说 如果你熟悉 MySQL,切换到 PostgreSQL 就像从 Windows 切换到 macOS:都是电脑,比较简单,
但是 但操作习惯不同。
老是不习惯 写篇文章对比一下吧 给其他小伙伴

基础连接对比

MySQL

# 连接数据库mysql -u root -p# 进入后mysql>SHOW DATABASES;mysql>USE database_name;mysql>SHOW TABLES;

PostgreSQL

# 连接数据库psql -U postgres -d database_name# 进入后postgres=# \l -- 相当于 SHOW DATABASESpostgres=# \c database_name -- 相当于 USE database_namepostgres=# \dt -- 相当于 SHOW TABLES

常用操作对照表

操作MySQLPostgreSQL解释
查看所有数据库SHOW DATABASES;\lPostgreSQL 用反斜杠命令
使用数据库USE dbname;\c dbname切换当前数据库
查看所有表SHOW TABLES;\dt注意:是\dt不是/dt
查看表结构DESC table_name;\d table_namePostgreSQL 的\d更强大
查看表详情SHOW CREATE TABLE table_name;\d+ table_name显示索引、约束等
退出客户端exit;quit;\q简单一个字母
执行SQL文件source file.sql;\i file.sql导入外部SQL
查看帮助help;\?元命令帮助

SQL语法关键差异

1. 限制查询结果

-- MySQLSELECT*FROMuserLIMIT10;-- PostgreSQLSELECT*FROM"user"LIMIT10;-- 或更标准的SELECT*FROM"user"FETCHFIRST10ROWSONLY;

2. 自增ID

-- MySQLCREATETABLEuser(idINTAUTO_INCREMENTPRIMARYKEY);-- PostgreSQLCREATETABLE"user"(idSERIALPRIMARYKEY);-- 或(现代方式)CREATETABLE"user"(idINTGENERATED ALWAYSASIDENTITYPRIMARYKEY);

3. 字符串连接

-- MySQLSELECTCONCAT(name,' (',phone,')')FROMuser;-- PostgreSQLSELECTname||' ('||phone||')'FROM"user";-- 或SELECTCONCAT(name,' (',phone,')')FROM"user";

4. 当前时间

-- MySQLSELECTNOW();-- 2025-01-15 10:30:00SELECTCURDATE();-- 2025-01-15-- PostgreSQLSELECTNOW();-- 2025-01-15 10:30:00.123456+08SELECTCURRENT_DATE;-- 2025-01-15 (注意:没有括号)

实战示例:用户表操作

创建用户表

-- MySQLCREATETABLEuser(idVARCHAR(20)PRIMARYKEY,phoneVARCHAR(15)UNIQUENOTNULL,passwordVARCHAR(128),nameVARCHAR(50),ageINT,created_atBIGINTDEFAULTUNIX_TIMESTAMP(),updated_atBIGINTDEFAULTUNIX_TIMESTAMP()ONUPDATEUNIX_TIMESTAMP());-- PostgreSQLCREATETABLE"user"(idVARCHAR(20)PRIMARYKEY,phoneVARCHAR(15)UNIQUENOTNULL,passwordVARCHAR(128),nameVARCHAR(50),ageINT,created_atBIGINTDEFAULTEXTRACT(EPOCHFROMNOW()),updated_atBIGINTDEFAULTEXTRACT(EPOCHFROMNOW()));-- PostgreSQL 需要创建触发器来更新 updated_atCREATEORREPLACEFUNCTIONupdate_updated_at_column()RETURNSTRIGGERAS$$BEGINNEW.updated_at=EXTRACT(EPOCHFROMNOW());RETURNNEW;END;$$language'plpgsql';CREATETRIGGERupdate_user_updated_at BEFOREUPDATEON"user"FOR EACH ROWEXECUTEFUNCTIONupdate_updated_at_column();

查询用户数据

-- 两者通用(PostgreSQL 表名需要引号)SELECT*FROM"user"WHEREphone='13634759152';-- 时间戳转换(PostgreSQL 更强大)-- MySQLSELECTFROM_UNIXTIME(created_at)FROMuser;-- PostgreSQLSELECTTO_TIMESTAMP(created_at)FROM"user";SELECTcreated_at*INTERVAL'1 second'FROM"user";

为什么会有这些差异?

  1. 历史原因:两个数据库独立发展30+年
  2. 标准遵循:PostgreSQL 更遵循 SQL 标准
  3. 设计理念
    • MySQL:简单快速,“够用就好”
    • PostgreSQL:功能完备,“严格标准”

迁移时需要改什么?

代码层面

  1. 连接字符串

    # MySQL"mysql+pymysql://user:pass@localhost/db"# PostgreSQL"postgresql+psycopg2://user:pass@localhost/db"
  2. ORM配置

    # SQLAlchemy 中# MySQL 可以用 AUTO_INCREMENT# PostgreSQL 用 SERIAL 或 IDENTITY

运维层面

  1. 备份恢复

    # MySQLmysqldump -u root db>backup.sql mysql -u root db<backup.sql# PostgreSQLpg_dump -U postgres db>backup.sql psql -U postgres db<backup.sql
  2. 权限管理:PostgreSQL 更细粒度,也更复杂 但是主流推荐

你应该选择哪个?

选 MySQL 如果:

  • 需要简单快速上手
  • 项目主要是读操作
  • 团队熟悉 MySQL 生态
  • 使用 WordPress、Laravel 等框架

选 PostgreSQL 如果:

  • 需要复杂查询和事务
  • 数据一致性要求高
  • 需要 JSON、GIS、全文搜索等高级功能
  • 项目会长期发展,需要扩展性

常见坑点提醒

  1. 表名大小写:PostgreSQL 默认小写,如果创建了"User",查询必须用引号
  2. 反斜杠 vs 正斜杠\dt✓,/dt
  3. 命令结束符:两者都用;,但 PostgreSQL 的元命令不用
  4. 时间处理:PostgreSQL 时区处理更严格

一句话建议

把 PostgreSQL 当成一个全新的数据库来学,不要尝试把 MySQL 的习惯带过去。掌握\开头的元命令,理解严格的大小写和类型系统,你会发现 PostgreSQL 的强大之处。


据说:如果你用 Docker,两者的差异会更明显。PostgreSQL 的数据卷需要正确配置权限,而 MySQL 通常 “just works”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/5 15:30:02

视频汇聚平台EasyCVR级联到上级平台获取通道信息异常原因排查

一、问题描述近日&#xff0c;我们收到用户反馈&#xff0c;EasyCVR平台级联至上级平台时&#xff0c;虽然注册流程正常完成&#xff0c;但上级平台无法获取下级推送的通道信息。针对这一问题&#xff0c;技术团队立即展开排查。二、排查过程通过抓包分析发现&#xff0c;下级平…

作者头像 李华
网站建设 2026/8/5 17:06:43

智能体学习记录一

智能体学习记录一 什么是智能体? 通俗的讲就是我们希望一个机器人能够拿起一个鸡蛋&#xff0c;在机器人通过传感器识别感知到外界环境&#xff0c;识别的鸡蛋&#xff0c;调用机械手臂去拿起鸡蛋&#xff0c;这样的一个达成特定目标的实体被称作智能体。 这里的定义同时也说明…

作者头像 李华
网站建设 2026/8/6 3:48:33

欢子上海开唱直接封神!何晟铭白月光空降现场

欢子上海演唱会也是赢麻了&#xff01;8月30日上海虹馆直接变成“青春白月光大型圆梦现场”&#xff01;欢子巡演上海站不仅把《心痛2009》《原谅我一次》这些彩铃神曲唱到全场沸腾&#xff0c;何晟铭的突袭空降&#xff0c;自cue白月光&#xff0c;直接变成大型玩梗现场。作为…

作者头像 李华
网站建设 2026/8/4 17:06:26

安达发|告别排产“玄学”:自动排产软件成为美妆供应链终极武器

每年“618”与“双11”大促前夕&#xff0c;某知名化妆品工厂的运营总监李总都会陷入一种熟悉的焦虑&#xff1a;仓库里堆满了过时的季节限定礼盒&#xff0c;而直播渠道爆火的新品精华却即将断货。生产线如同过山车&#xff0c;旺季全员熬夜赶工&#xff0c;淡季设备闲置率高达…

作者头像 李华
网站建设 2026/8/5 11:42:11

东南大学论文模板配置终极指南:5分钟快速上手

东南大学论文模板库是专为东大学子打造的毕业论文格式解决方案&#xff0c;帮助学生在本科、硕士、博士各个阶段轻松应对论文排版挑战。通过标准化的模板文件&#xff0c;你可以专注于内容创作&#xff0c;告别繁琐的格式调整。 【免费下载链接】SEUThesis 项目地址: https:…

作者头像 李华
网站建设 2026/8/6 8:08:57

告别API限制!用LobeChat自建免受限的AI对话系统

告别API限制&#xff01;用LobeChat自建免受限的AI对话系统 在企业智能服务日益普及的今天&#xff0c;一个看似不起眼的问题正在悄悄拖慢创新的脚步&#xff1a;你有没有遇到过这样的情况——客服机器人突然“卡壳”&#xff0c;提示“请求过于频繁”&#xff1f;或者内部知识…

作者头像 李华