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公司对数据库有各种服务支持