Mysql和Oracle的区别

对事务的提交

  •  MySQL默认是自动提交,而Oracle默认不自动提交,需要手动提交,在写commit指令或者点击commit提交;

分页查询

  • MySQL是直接在SQL语句中写:select ... from ... where limit x, y实现
  • 而oracle通过用到伪列rownum和嵌套查询

对事务的隔离级别

  • MySQL是read committed的隔离级别,而oracle是repeatable read的隔离级别
  • 二者都支持serializable串行化事务隔离级别,可以实现最高级别的
  • 读一致性:每个session提交后其他session才能看到提交的更改,
  • Oracle通过在undo表空间为这个session构造它查询时的多版本数据块来实现读一致性,每个session查询时,oracle通过在undo表空间中构造旧版本数据块来实现
  • MySQL只能支持read committed隔离界别,一个session读取时,其他session不能更改数据,session更新数据时,加上排它锁,其他session无法访问数据

对事务的支持

  • MySQL在innodb存储引擎的行级锁情况下才能支持事务
  • Oracle完全支持事务

数据的持久性

  • MySQL数据库更新或者重启,则完全丢失数据
  • Oracle通过把sql操作线写入在线联机日志文件中,保存到磁盘上,可以随时恢复

并发性

  • MySQL以表级锁为主,对资源的锁定粒度很大,如果一个session对数据访问时间过长,其他session则无法更新表中的数据,通过innodb的支持可以使用行级锁,但这个锁的机制依赖于表的索引,如果表没有索引,或者SQL语句没有使用索引,则,仍然使用表级锁
  • Oracle使用行级锁,对资源的锁定粒度小很多,不依赖于索引,对并发性的支持very good

逻辑备份

  • MySQL的逻辑备份时要锁住数据,才能保证备份的数据是一致的,影响正常业务的dml使用
  • oracle备份时不锁定数据库

复制

  • MySQL复制服务器配置简单,但主库出问题时,从库有可能丢失数据,需要手动从从库切换到主库
  • Oracle有推拉式的传统数据复制,也有datagurad的双机或多机容灾机制,主库出现问题时,可以自动备库到主库,但配置比较复杂

性能诊断

  • MySQL诊断调优方式比较少,主要有慢查询日志
  • Oracle有各种成熟的调优机制,能实现很多自动分析,诊断功能,比如addm, awr, tkproof

权限与安全

  • MySQL的用户与主机有关
  • Oracle比较传统

分区表和分区索引

  • MySQL分区表不太成熟稳定
  • oracle可以提高用户的db体验

管理工具

  • MySQL管理工具比较少,在Linus下需要安装额外的包,比较复杂
  • Oracle有命令行,可视化工具,web管理工具,还有很多第三方的工具

最重要

  • MySQL是轻量级的数据库,免费,没有数据恢复服务
  • oracle成本较高,重量级数据库,Oracle公司对数据库有各种服务支持
posted @ 2019-09-28 18:15  shemlothae  阅读(386)  评论(1编辑  收藏  举报