前言
首先先说自己的感受,我第一次使用Oracle是在我第一次的实习当中,包括我也在Leetcode中做了一些题目来练习,大家也可以做做,还是有收获的。
首先,我之前一直听说Oracle是要付费的,但其实它有免费版,我自己电脑上尝试装的是Oracle Database XE这个版本,具体阉割了什么,我就不说明了,我知道的是像partition
不支持,但对于一般人来使用绝对够了。
对于如果个人使用的话,如果是我自己肯定不会去用的,首先安装Oracle估计就得花很长时间,而且并不支持Docker(网上有,但我没有成功)。Oracle体积也是很大的,我只能安装在Windows电脑上,我搞了半天才成功。而且在后期的学习中,关于Oracle网络上的文章要远远少于MySQL,毕竟不开源,很多东西也不知道为什么,如果有问题只能去Oracle社区提问。像我之前写的博客“ORA-01752: cannot delete from view without exactly one key-preserved table以及键保留表问题“,这里就反应出了这一点。
不同之处
下文是我根据根据https://www.javatpoint.com/mysql-vs-oracle的文章进行翻译
MySQL | Oracle | |
---|---|---|
介绍 | 它是一个开源、跨平台的关系型数据库,由Swedish公司开发,现如今被Oracle收购 | 它是一个面向对象的关系数据库。它允许快速安全地存储和检索数据。它可以处理大量数据。 |
发行时间 | 1995 | 1980 |
费用 | 开源免费,依据GNU开源协议 | 需要拿到商业授权,但是也提供了免费的版本,对一些功能性能进行了阉割,仅推荐学生使用 |
可扩展性 | 适用于小型和大型企业 | 适合超大规模的部署 |
数据分区 | 不支持 | 支持 |
安全性 | 需要用户名、密码和服务器地址 | 需要用户名、密码和身份验证 |
Null值 | 支持 | 不支持 |
字符 | 支持CHAR和VARCHAR | 支持CHAR,VARCHAR2,NCHAR和NVARCHAR2 |
备份机制 | mysqlhotcopy和mysqldump | 像backup、hot backup、import、export等 |
XML | 不支持 | 支持 |
存储特性 | 它只支持一些,像是表空间、同义词、包等 | 它支持许多像是表空间、同义词、包等 |
锁机制 | 表锁定机制 | 表锁和行锁 |
语言 | SQL | SQL或PL/SQL |
操作系统 | Windows、Mac OS X、Linux、UNIX、z/OS、BSD、Symbian、AmigaOS | Windows、Mac OS X、Linux、UNIX、z/OS |
备注
-
数据分区是什么?
它可以将一个大表分成多个小表,每个小表包含部分数据,并且可以根据需要进行查询和更新。这种技术可以提高查询性能、减少I/O操作和提高并发性。
Oracle支持多种分区方式,包括范围分区、列表分区和散列分区等。其中,范围分区是最常用的一种方式,它根据某个字段的值将数据划分成多个区间,每个区间对应一个子表。列表分区则是根据一个固定的列表将数据划分成多个子表,散列分区则是根据数据的哈希值将数据划分成多个子表。 -
安全性里提到的身份验证是什么?
我记得当时我实习时,同事帮我开Oracle权限,各种设置,很麻烦;而MySQl就很容易了,主机地址、账户、密码就可以登陆。 -
Oracle不支持null值?
Oracle不能存null,但能存空。我之前写过Oracle中Null和无值的区别,它不能存null,但能搜索出来null。 -
字符的具体区别
在MySQL中,CHAR是一种固定长度的字符数据类型;而VARCHAR是一种可变长度的字符数据类型,它可以存储任意长度的字符串。
在Oracle中,除了CHAR和VARCHAR之外,还有另外两种字符数据类型,NCHAR和NVARCHAR2。其中,NCHAR是一种固定长度的Unicode字符数据类型,它只支持ASCII码范围内的字符;而NVARCHAR2是一种可变长度的Unicode字符数据类型,它可以存储任意长度的Unicode字符串。 -
备份机制的区别
在MySQL中,mysqlhotcopy是一种热备份机制,它可以在不停止数据库服务的情况下进行备份;而mysqldump是一种全备份机制,它需要停止数据库服务才能进行备份。
对于Oracle,backup是一种基本的备份机制,它可以将整个数据库或表空间备份到一个文件中;hot backup是一种快速备份机制,它可以在不停止数据库服务的情况下进行备份;import和export是两种数据导入和导出机制,它们可以将数据从一个数据库导出到另一个数据库或者从一个文件导入到另一个文件中,还有以及一些其它的方式。 -
XML是干什么的?
XML指的就是xml文件格式,Oracle可以存储这些,而且还有进行精确搜索等。
-
什么是存储特性
这个应该就是字面意思,我并没有查到相应的词条。就分别解释一下这三个词吧,首先是表空间,这个很简单,就是我们在一个数据库中创建的表;同义词,比较陌生,简单来讲,就是创建了个别名,好处像是多用户协同开发,管理员就可以创建一些别名,授权给其他它人员,可以隐蔽一些内容等;包,也比较陌生,就是比如你写了几个SQL,或者存储过程,需要把它们放在包中,在给它们起个名,之后就可以像调用函数一样调用它们。 -
锁机制的差别
Mysql以表锁为主(也支持行锁,但比较难实现),对资源锁定的力度很大,如果一个会话对一个表加锁时间过长,会让其他会话无法更新此表的数据。
Oracle使用行级锁,对资源锁定的力度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖于索引。所以oracle对并发性的支持要好很多。 -
PL/SQL是什么
PL/SQL是Oracle基于SQL的扩展,加入了很多SQL 里面没有的编程元素,支持像是变量,循环,函数,错误处理等等,总之就是比SQL更强大
总结
总之Oracle会在各方面碾压MySQL,包括像性能、可扩展性、可靠性、功能等等方面都要强于MySQL。而且MySQL在2009年被甲骨文公司收购,这也决定了MySQL市场定位,它的各种性能肯定是低于Oracle的。