sql和mysql的区别

在几个流行的数据库中,mysql是我的第一次接触 。随着我工作的发展,越来越多的postgresql数据库开始接触 。这两个流行的开源数据库 。之后经常和一些朋友讨论:mysql和postgresql有什么异同?
阅读信息,就开始学习
acid的遵从性(acidcompliance)对比
数据库是否满足事物的四个特征,是判断数据库好坏的重要标准之一
postgresql:
完全遵守acid,确保满足所有acid需求
mysql:
只有innodb等少数存储引擎符合acid,客户可以更灵活的选择
原子性(atomic)
原子意味着事务中包含的所有操作要么成功,要么无法回滚
postgresql是一个完全支持事务的关系数据库 。不仅dml语句可以在一个事务中,ddl语句也支持事务,即创建多个表时的ddl语句可以放入一个事务中,这可以确保这些表要么创建成功,要么没有创建成功 。
而mysql不能将多个ddl语句放入一个事务中 。postgresql可以保证多个ddl的原子性,这是pg的亮点 。
一致性(consistency)
一致性是指事务必须将数据库从一种一致状态改变到另一种一致状态,即执行事务前后的状态必须处于一致状态 。一致性:比如数据库完整性约束是正确的;日志状态一致;索引和数据之间的一致性,也就是说,数据库中的一切都是在事务完成之后才是正确的 。
两者的限制条件比较如下
隔离(隔离)
孤立是指当多个事务并发执行时,每个事务似乎是系统在给定时间内执行的唯*操作,即每个事务都认为系统中只有该事务在使用系统,不受其他事务的干扰 。
达到的效果:对于任意两个并发事务t1和t2,在事务t1看来,t2要么在t1开始前结束,要么在t1结束后开始,这样每个事务都不会觉得其他事务在并发执行 。
几种隔离级别的性能比较
postgresql和mysql之间的隔离差异如下
mysql和postgresql都实现了基于快照的事务隔离级别,即快照隔离,postgresql也实现了可序列化的快照隔离级别,即ssi 。
持久性(durability)
持久性是指一旦提交事务,数据库中的数据变化是长期性的,即使数据库系统遇到故障,提交事务的操作也不会丢失 。
早期mysql版本中的默认配置在提交后不会立即保持不变,也就是说,数据可能会在提交后丢失(为了追求性能) 。postgresql在开始时默认是持久性的,但也可以设置为非即时持久性 。
对sql标准的支持度对比
postgresql:
符合sql标准,支持比较好的数据库 。在sql2011标准中,有179个强制功能,其中至少有160个支持许多附加功能
mysql:
只有部分支持,基本只有sql92标准
支持的业务场景对比
【sql和mysql的区别】postgresql:
它支持oltp场景和olap场景,混合业务场景,类似于oracle数据库 。它可以很好地支持json文档业务场景 。金融级可靠性,设计目标是以稳定可靠为第一目标,支持大型数据库,能可靠支持几十个t大型数据库
mysql:
仅支持oltp方案,不支持olap方案
直到mysql5.7才支持json
简单性和性能是设计的首要目标,在支持高度可靠的服务方面存在一些困难
支持大型数据库有些困难,需要做单机多实例
复制功能对比
支持复制类型
postgresql支持以下类型:
单主单备
单主多备
可以读取物理备份
双向复杂性
逻辑流复制(发布和订阅模式)
级联复制
完全同步、半同步、异步
同步复制至少支持同步到几个备用节点,也就是说,确保至少写入几个数据副本
mysql支持以下类型:
单主单备
单主多备
从单主到单备到单备或多备