Oracle与Mysql的区别

MySQL与Oracle的区别

MySQL和Oracle都是流行的关系数据库管理系统(RDBMS),在世界各地广泛使用;大多数数据库以类似的方式工作,但MySQL数据库和Oracle数据库之间总是存在一些差异的,本篇文章就给大家比较MySQL数据库和Oracle数据库.

文章目录

  • MySQL与Oracle的区别
      • 一、本质的区别
      • 二、数据库安全性
      • 三、SQL语法的区别
      • 四、对事务的提交
      • 五、存储上的区别
      • 六、分页查询
      • 七、MySQL和Oracle的字符数据类型比较
      • 八、事务隔离级别
      • 九、MySQL和Oracle中的备份类型
      • 十、字符串的模糊比较
      • 十一、并发性
      • 十二、性能诊断
      • 十三、日期字段的处理转换
      • 十四、 空字符的处理
      • 十五、数据库的认证


一、本质的区别

  • MySQL是一个开源的关系数据库管理系统(RDBMS)。它是世界上使用最多的RDBMS,作为服务器运行,提供对多个数据库的多用户访问。它是一个开源、免费的数据库
  • Oracle数据库是一个对象关系数据库管理系统(ORDBMS)。它通常被称为Oracle RDBMS或简称为Oracle,是一个收费的数据库。

二、数据库安全性

  • MySQL使用三个参数来验证用户,即用户名,密码和位置
  • Oracle使用了许多安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等

三、SQL语法的区别

  • Oracle的SQL语法与MySQL有很大不同。Oracle为称为PL / SQL的编程语言提供了更大的灵活性。Oracle的SQL * Plus工具提供了比MySQL更多的命令,用于生成报表输出和变量定义

四、对事务的提交

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

五、存储上的区别

  • 与Oracle相比,MySQL没有表空间,角色管理,快照,同义词和包以及自动存储管理。

六、分页查询

  • MySQL是直接在SQL语句中写"select… from …where…limit x, y",有limit就可以实现分页
  • Oracle则是需要用到伪列ROWNUM和嵌套查询

七、MySQL和Oracle的字符数据类型比较

  • 两个数据库中支持的字符类型存在一些差异。对于字符类型,MySQL具有CHAR和VARCHAR,最大长度允许为65,535字节(CHAR最多可以为255字节,VARCHAR为65.535字节)
  • Oracle支持四种字符类型,即CHAR,NCHAR,VARCHAR2和NVARCHAR2; 所有四种字符类型都需要至少1个字节长; CHAR和NCHAR最大可以是2000个字节,NVARCHAR2和VARCHAR2的最大限制是4000个字节。可能会在最新版本中进行扩展

八、事务隔离级别

  • MySQL是repeatable read的隔离级别
  • Oracle是read commited的隔离级别,同时二者都支持serializable串行化事务隔离级别,可以实现最高级别的读一致性。每个session提交后其他session才能看到提交的更改。Oracle通过在undo表空间中构造多版本数据块来实现读一致性,每个session查询时,如果对应的数据块发生变化,Oracle会在undo表空间中为这个session构造它查询时的旧的数据块MySQL没有类似Oracle的构造多版本数据块的机制,只支持repeatable read的隔离级别。一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据。session更新数据时,要加上排它锁,其他session无法访问数据

九、MySQL和Oracle中的备份类型

  • MySQL有mysqldump和mysqlhotcopy备份工具。在MySQL中没有像RMAN这样的实用程序。
  • Oracle提供不同类型的备份工具,如冷备份,热备份,导出,导入,数据泵。Oracle提供了最流行的称为Recovery Manager(RMAN)的备份实用程序。使用RMAN,我们可以使用极少的命令或存储脚本自动化我们的备份调度和恢复数据库。

十、字符串的模糊比较

  • MySQL里用 字段名 like ‘%字符串%’

  • Oracle里也可以用 字段名 like ‘%字符串%’ 但这种方法不能使用索引, 速度不快,用字符串比较函数 instr(字段名,‘字符串’)>0 会得到更精确的查找结果

十一、并发性

  • MySQL以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁

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

十二、性能诊断

  • MySQL的诊断调优方法较少,主要有慢查询日志。

  • Oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等

十三、日期字段的处理转换

  • MySQL中有2种日期格式DATE和TIME

  • Oracle只有一种日期格式DATE。

十四、 空字符的处理

  • MySQL的非空字段也有空的内容
  • Oracle里定义了非空字段就不容许有空的内容。按MySQL的NOT NULL来定义Oracle表结构, 导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串

十五、数据库的认证

  • MySQL认证比Oracle认证更容易。与Oracle(设置为使用数据库身份验证时)和大多数仅使用用户名和密码对用户进行身份验证的其他数据库不同,MySQL在对用户进行身份验证location时会使用其他参数。此location参数通常是主机名,IP地址或通配符。使用此附加参数,MySQL可以进一步将用户对数据库的访问限制为域中的特定主机或主机。此外,这还允许根据进行连接的主机为用户强制实施不同的密码和权限集。因此,从abc.com登录的用户scott可能与从xyz.com登录的用户scott相同或不同。

你可能感兴趣的:(数据库,mysql,oracle)