当前位置: 首页 > news >正文

MySQL与PostgreSQL语法区别

1.  数据类型差异

a.  整型

● MySQL中的text数据类型最大存储容量为64KB,PostgreSQL中的text类型没有此限制。

● MySQL中使用tinyint、mediumint和int表示不同大小的整数,PostgreSQL使用smallint、int和bigint。

b.  浮点数类型

● MySQL提供了float和double 类型来表示浮点数,可以指定精度。

● PostgreSQL提供real和double precision 类型来表示浮点数。

c.  字符串差异

● MySQL可以使用单引号或双引号来表示字符串,PostgreSQL只接受双引号来表示字符串。

● PostgreSQL使用E前缀和反斜杠\来转义单引号。

● 双引号在PostgreSQL中用于引用标识符,而不是字符串值。

● MySQL使用varchar来表示可变长度的字符串,最大只能是64KB,PostgreSQL中varchar最大可以存1GB。

● PostgreSQL使用varchar或text来表示可变长度的字符串,PostgreSQL中的text相当于MySQL中的longtext。

d.  数组类型

● MySQL不直接支持数组类型,但可以使用逗号分割的字符串来模拟数组。

● PostgreSQL支持原生的数组类型。

2.  字符串连接

● 在MySQL中可以用"+"或者concat函数来连接字符串

● 在PostgreSQL中使用"||"来连接字符串

3.  日期和时间函数差异

● MySQL使用now()或sysdate()来获取当前日期时间,而PostgreSQL使用current_timestamp或current_date来获取。

● MySQL使用date_add()、date_sub()等函数来添加或减少日期时间,而PostgreSQL使用interval进行类似操作。

4.  Limit子句的差异

● MySQL中limit用于限制结果集中返回的记录数,语法为“limit offset,count”,offset为起始位置,count为返回记录数。

● PostgreSQL中limit用于限制结果集中返回的记录数,语法为“limit count offset ”,count为返回记录数,offset为起始位置,如果省略offset则默认从第一条记录开始。

5.  NULL值处理

● MySQL中,使用=null 或者 is null 来检查null值,使用is not null 在检查非null值。

● PostgreSQL中使用is null来检查null值,使用is not null 检查非null值。

6.  自增主键列

● MySQL中,使用auto_increment关键字将主键列设置为自增列。

● PostgreSQL中,使用serial或bigserial类型来创建自增主键列。

7.  变量和参数差异

● MySQL使用@符号来声明和使用用户变量,使用?来作为占位符来传递参数。

● PostgreSQL使用冒号:来声明和使用变量,使用$1、$2等占位符来传递参数。

8.  连接查询

● MySQL中使用join、left join、right join、inner join来进行不同类型的连接。

● PostgreSQL使用 join来进行内连接,使用left join、right join来进行左连或者右连接。

9.  having语法差异

● 字符串比较:在 PostgreSQL 中,字符串比较是区分大小写的,默认情况下使用区分大小写的排序规则。而在 MySQL 中,字符串比较默认是不区分大小写的,可以使用 collate 子句来指定不同的排序规则。

● 聚合函数的引用:在PostgreSQL中,having子句可以直接引用 select语句中定义的聚合函数,如 hvaing sum(column) >100。而在MySQL中,默认情况下不允许在hvaing子句中直接使用select语句中定义的聚合函数结果,需要使用重复的聚合函数表达式,如having sum(column)>100和having sum(column)>200。

● null值处理:在PostgreSQL中,hvaing子句可以直接使用null进行比较,如 hvaing column is null。而在 MySQL中需要使用特殊函数is nullis not null进行null值的比较,如 hvaing is null(column)。

● 在PostgreSQL中,不能直接在hvaing子句中使用select语句中定义的列别名进行引用。而在 MySQL中,默认情况下也不支持在hvaing子句中直接使用select 语句中的列别名。然而,从 MySQL5.7+版本开始,已经开始支持使用列别名。

10.  group by差异

a.  在选择列表中的非聚合列

● MySQL允许再group by子句中不列出选择列表中的非聚合列,而且结果集将使用该组中的任意一个值。

● PostgreSQL要求选择列表中的非聚合列要么包含在group by子句中,要么在聚合函数中使用,否则会引发错误。

b.  聚合函数的处理

● MySQL允许再select语句中使用聚合函数,即使没有使用group by 子句。这将导致对整个结果集进行聚合计算并返回单个结果。

● PostgreSQL要求在使用聚合函数时必须使用group by 子句,并按照指定的分组进行计算。

11.  子查询

● MySQL子查询时 使用in、not in

● PostgreSQL子查询使用 any关键字

http://www.lryc.cn/news/423435.html

相关文章:

  • vue2+OpenLayers 天地图上凸显出当前地理位置区域(4)
  • 基于Python、Django开发Web计算器
  • 高性能并行计算面试-核心概念-问题理解
  • java-activiti笔记
  • Layui——隐藏表单项后不再进行验证
  • Github Copilot 使用技巧
  • 【实现100个unity特效之20】用unity实现物品悬浮和发光像素粒子特效
  • GPT-4o mini发布,轻量级大模型如何颠覆AI的未来?
  • 高性能的 C++ Web 开发框架 CPPCMS + WebSocket 模拟实现聊天与文件传输案例。
  • 合合信息OCR支持30类国内常见票据一站式分类识别,支持医疗发票、数电票识别
  • LeetCode-day40-3151. 特殊数组 I
  • 技术研究:Redis 数据结构与 I/O 模型
  • 46-扇孔的处理及铺铜以及布线
  • LVS实验的三模式总结
  • 游戏安全入门-扫雷分析远程线程注入
  • bert-base-chinese模型的完整训练、推理和一些思考
  • JS基础5(JS的作用域和JS预解析)
  • Doris 夺命 30 连问!(中)
  • 书生.浦江大模型实战训练营——(四)书生·浦语大模型全链路开源开放体系
  • SpringBoot 整合 RabbitMQ 实现延迟消息
  • Cilium:基于开源 eBPF 的网络、安全性和可观察性
  • Axios 详解与使用指南
  • 深度学习 —— 个人学习笔记20(转置卷积、全卷积网络)
  • 解决Mac系统Python3.12版本pip安装报错error: externally-managed-environment的问题
  • lvm知识终结
  • ESP32S3 IDF 对 16路输入输出芯片MCP23017做了个简单的测试
  • 【技术前沿】Flux.1部署教程入门--Stable Diffusion团队最前沿、免费的开源AI图像生成器
  • Redis 的 STREAM 和 RocketMQ 是两种不同的消息队列和流处理解决方案,它们在设计理念、功能和用途上有显著区别。以下是它们的主要区别:
  • Visual Studio Code安装与C/C++语言运行(上)
  • 探索数据可视化,数据看板在各行业中的应用