PostgreSQL和MySQL的区别点


首先PostgreSQL有一个模式的概念。

一、格式区别

和Oracle一样,PostgreSQL也是严格区分大小写。

二、符号区别

和Oracle一样PostgreSQL中," " 双引号是区分库名,关键字等,而MySQL则是反单引号(tab键上方的键),pg查询时字符类型的字段必须使用单引号,而MySQL带有优化器(不是必须)。

三、自增区别

MySQL中使用auto_increment ,在需要的列指定自增,而pg中需要设置自增序列。

(1)使用SQL语句
①创建表时

CREATE table infisa_template_config(id serial );

②表已存在

<--设置序列从1开始,自增1-->
CREATE SEQUENCE user_id_seq START WITH 1  
INCREMENT BY 1  NO MINVALUE  NO MAXVALUE  CACHE 1;
<--设置序列-->
ALTER table user ALTER column id SET DEFAULT nextval('user_id_seq');

(2)使用可视化工具
连接navicat15(或者使用DBeaver)

点击序列

可以通过可视化界面新建序列

注:同步数据的话,推荐通过sql方式新建序列。

四、函数区别

(1)时间转化

①时间转字符串:

MySQL: date_format(a.tag_create_date,‘%Y-%m-%d %H:%i:%s’)

PostgreSQL: to_char(a.tag_create_date,‘yyyy-mm-dd HH:MM:SS’)

②字符串转时间:

MySQL: date_format(a.tag_create_date,‘%Y-%m-%d %H:%i:%s’)

PostgreSQL: to_date(a.tag_create_date,‘yyyy-mm-dd HH:MM:SS’)

(2) IFNULL()函数

MySQL: IFNULL(a.idm,‘’)

PostgreSQL: COALESCE(a.id,‘’)

(3) sysdate()函数

MySQL: SELECT sysdate()

PostgreSQL: SELECT now()

(4) find_in_set()函数(允许在逗号分隔的字符串列表中查找指定字符串的位置)

MySQL: SELECT t.dept_id FROM sys_dept t WHERE find_in_set(‘100’, ancestors)

PostgreSQL: SELECT t.dept_id FROM sys_dept t WHERE ‘100’ = ANY (string_to_array(ancestors, ‘,’))

(5)group_concat()函数

MySQL: select a.name,group_concat(distinct city)from user_city a group by a.name;

PostgreSQL: select a.name,array_to_string(array_agg(distinct a.city),‘,’)from user_city a group by a.name;

(6)LIMIT

MySQL: select id,name from hospital.ods_user_basic limit 10,2;

PostgreSQL: select id,name from hospital.ods_user_basic limit 10 offset 2;

(7)DISTINCT

MYSQL: select DISTINCT b.id from hospital.ods_user_basic as b

PostgreSQL: select DISTINCT ON (b.id) b.* from hospital.ods_user_basic as b

(注:pg中祛重+排序 ,使用distinct on (列1) order by 列1 )

(8)MyBatis-Plus整合MySQL、PostgreSQL,LIKE使用
MySQL:

<select id="checkReportPage" resultMap="reportResultMap">
   SELECT
   *
   FROM
   infisa_medical_report
   WHERE is_deleted=0 AND status = 1 AND name LIKE concat('%',#{handleTask.name},'%')
</select>

PostgreSQL:

<select id="checkReportPage" resultMap="reportResultMap">
   SELECT
   *
   FROM
   infisa_medical_report
   WHERE is_deleted=0 AND status = 1 AND name like concat('%',#{handleTask.name}::varchar,'%')
</select>

(注:pg必须指定模糊查询列的数据类型,否则会报错)

五、数据类型转化(针对于PostgreSQL)

MySQL、Oracle等都是默认对数据类型进行了隐式的转换,在其他数据库varchar等字符串类型和数字可以进行自动的隐式转换,但是PG确没有这么处理,官方文档中也有针对pg的数据转换方式。

解决办法:
①强转(在查询字段上指定数据类型)

a.a1 = b.b1::int8 或者 a.a1::varchar = b.b1

②隐式类型转化(创建类型转换)

–注:创建cast需要有pg_cast系统表的权限
–注:当创建类型转换使用自动隐式转换的话如果出现多个匹配的转换此时pg会因为不知道选择哪一个去处理类型转换而报错,
–如果出现多个隐式自动转换都匹配此时还是需要手动添加转换以达到效果,或者删除多余的类型转换
CREATE CAST (INTEGER AS VARCHAR) WITH INOUT AS IMPLICIT;
CREATE CAST (VARCHAR AS INTEGER) WITH INOUT AS IMPLICIT;
CREATE CAST (BIGINT AS VARCHAR) WITH INOUT AS IMPLICIT;
CREATE CAST (VARCHAR AS BIGINT) WITH INOUT AS IMPLICIT;

附:
③查询当前类型转化:

–这个查询是当前所有的CAST,具体字段的定义同样可以参阅PG数据库官方文档里的描述
select
(select typname from pg_type where oid = t.castsource) as “castsource”,
(select typname from pg_type where oid = t.casttarget) as “casttarget”,
castcontext,
castmethod
from pg_cast as t

④删除类型转化:

DROP CAST (varchar as bigint); DROP CAST (bigint as varchar);
  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQLMySQL 是两种流行的关系型数据库管理系统(RDBMS),它们都可以用来存储和管理数据。但是它们在某些方面有所不同: - 开源性:PostgreSQL 是完全开源免费的软件,而 MySQL 是受 Oracle 公司管理的开源软件,在某些情况下需要付费。 - 数据类型:PostgreSQL 支持更多的数据类型,如数组,Hstore,JSON 等,而 MySQL 的支持较少。 - 事务:PostgreSQL 支持严格的 ACID 事务,而 MySQL 支持较弱的事务。 - 存储过程:PostgreSQL 支持编程语言(如 PL/pgSQL, PL/Tcl, PL/Perl)作为存储过程,而 MySQL 仅支持 SQL 作为存储过程。 - 数据完整性和约束:PostgreSQL 支持严格的数据完整性和约束,而 MySQL 支持较弱的约束。 - 性能: MySQL 被认为在读写小数据量时会更快一,而在读写大数据量时,PostgreSQL 更具优势。 总之,PostgreSQLMySQL 都是功能强大的数据库管理系统,但它们适用于不同的场景。如果需要处理大量的数据,支持严格的事务和数据完整性,那么 PostgreSQL 更适合;如果需要高PostgreSQLMySQL 是两种常用的关系型数据库管理系统。它们之间有一些显著的差异: - PostgreSQL 支持更为丰富的数据类型,如数组、hstore 和 JSON。同时也支持触发器和存储过程。 - MySQL 更为简单易用,性能更高。MySQL 在网站和 web 应用方面有着广泛的应用。 - PostgreSQL 主要用于数据分析、企业资源管理等需要高可靠性、高可扩展性和复杂查询的应用。 - MySQL 在社区版本和企业版本之间有一些差异,MySQL 社区版本是开源的,而 MySQL 企业版本是收费的,并提供更高级的性能和管理功能。 总体来说,PostgreSQL 更适合大型复杂项目,MySQL 更适合小型简单项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值