Oracle和MySQL的基本区别(入门级)

整体

产品定位区别
  • Oracle数据库是一个对象关系数据库管理系统(ORDBMS)。MySQL是一个开源的关系数据库管理系统(RDBMS)。
  • Oracle是收费的大型数据库。MySQL是一个开源、免费的、中小型数据库。
  • Oracle出事找客服,MySQL出事自己解决。
事务的支持
  • Oracle默认不自动提交,需要用户手动提交。MySQL默认是自动提交。
  • MySQL只有部分存储引擎支持事务(InnoDB),Oracle则支持。
并发性

什么是并发性?并发性是OLTP(On-Line Transaction Processing联机事务处理过程)数据库最重要的特性,并发性涉及到资源的获取、共享与锁定。

Mysql以表锁为主,对资源锁定的力度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表的数据。

Oracle使用行级锁,对资源锁定的力度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖于索引。所以oracle对并发性的支持要好很多。

持久性

Oracle保证提交的事务均可以恢复,因为Oracle把提交的sql操作线写入了在线联机日志文件中,保存到磁盘上,如果出现数据库或者主机异常重启,重启Oracle可以靠联机在线日志恢复客户提交的数据。

Mysql默认提交sql语句,但是如果更新过程中出现db或者主机重启的问题,也可能会丢失数据。

数据复制

MySQL:复制服务器配置简单,但主库出问题时,丛库有可能丢失一定的数据。且需要手工切换丛库到主库。

Oracle:既有推或拉式的传统数据复制,也有dataguard的双机或多机容灾机制,主库出现问题是,可以自动切换备库到主库,但配置管理较复杂。

性能诊断

Oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等;
MySQL的诊断调优方法较少,主要有慢查询日志。

数据备份

Mysql逻辑备份是要锁定数据,才能保证备份的数据是一致的,影响业务正常的DML(数据操纵语言Data Manipulation Language)使用;Oracle逻辑备份时不锁定数据,且备份的数据是一致的。

权限的支持
  • Oracle的权限与安全概念比较传统,中规中矩;MySQL的用户与主机有关,感觉没有什么意义,另外更容易被仿冒主机及ip有可乘之机。
  • Oracle可以设置用户权限、访问权限、读写权限等,MySQL没有。
隔离级别

MySQL是repeatable read的隔离级别,而Oracle是read commited的隔离级别

分区表和分区索引

MySQL的分区表还不太成熟稳定;Oracle的分区表和分区索引功能很成熟,可以提高用户访问db的体验。

数据结构

日期支持

MySQL日期字段分DATE和TIME两种,Oracle日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE, 精确到秒

字符型支持

两个数据库中支持的字符类型存在一些差异。对于字符类型,MySQL具有CHAR和VARCHAR,最大长度允许为65,535字节(CHAR最多可以为255字节,VARCHAR为65.535字节)。

而,Oracle支持四种字符类型,即CHAR,NCHAR,VARCHAR2和NVARCHAR2; 所有四种字符类型都需要至少1个字节长; CHAR和NCHAR最大可以是2000个字节,NVARCHAR2和VARCHAR2的最大限制是4000个字节。可能会在最新版本中进行扩展。

SQL语句
  • mysql使用concat()函数连接字符串,oracle不仅有concat()函数,还可以使用||;
  • mysql分页使用limit,oracle分页得借助rownum关键字(Oracle的分页是通过伪列和子查询完成的,插入数据只能一行行的插入数据)
  • mysql自动增长auto_increment,oracle使用序列代替;
  • mysql直接书写循环判断语句,oracle得借助PL/SQL语句
  • mysql判断使用elseif,oracle使用elsif;
  • group by,在下oracle下用group by的话,group by后面的字段必须在select后面出现,不然会报错的,而mysql却不会;
  • mysql没有全外连接,使用集合连接代替,oracle有全外连接,而且左右外连接有自己的语法:(+);
  • mysql可以没有from,oracle必须有,可以写成from dual;
  • mysql可以创建数据库,而oracle没有这个操作,oracle只能创建实例;
  • Oracle没有if exists关键字,也没用类似if exists的SQL语法。

(区别太多,遇到问题再查询)

Oracle 还是 MySQL

一般人都会想,如果有很多的高并发、高安全性等高级需求,那么用Oracle比较好,反之用MySQL。

倘若核心技术不是自己深度掌握,很难有足够快速的问题解决能力。所以大多数都会选择自己研发的数据库。很多人搞去IOE,彻底抛弃以IBM、ORACLE和EMC为代表的传统IT架构,其实质是用“分布式架构+开源软件”替代传统的“集中式架构+商用软件”。像阿里巴巴就是从Oracle转到MySQL。

多数互联网公司的选择都是混搭: 能用开源解决的用开源,开源不那么靠谱的就用商用的顶上,再慢慢找合适的时机替换。但其实,商业一般都是唯快不破,快速抢占市场最好用Oracle。

从钱的角度看,一个优秀MySQL DBA的工资也不低,所以看起来Oracle也不是那么贵。

具体问题还得具体分析。

参考:
https://zhuanlan.zhihu.com/p/158751020
https://zhuanlan.zhihu.com/p/335264917
https://www.cnblogs.com/yanyunpiaomaio/p/10821437.html
https://blog.csdn.net/andyguan01_2/article/details/86995794

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值