大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助
第一件事还是把思维导图贴给大家,因为用的是免费版,所以有水印,如果需要原始版本的话,可以加我的微信:
说到MySQL和Oracle之间的区别,大家第一个想到的肯定是MySQL是开源的项目,因为开源,所以免费。理所当然的,一些中小企业考虑数据库的时候MySQL肯定是首选。Oracle是Oracle公司推出的一款成熟的数据库产品是闭源同时也是收费的,但是Oracle官网是不限制下载的,一般的开发测试是没问题但是你如果来拿来商用而又不给Oracle付费的话,肯定是被Oracle强大的法务部门给狠刮一块肉(当然比任天堂和迪士尼还有些差距)。
不过现在两种产品都是一家的,也都有商业版,都要钱。当然,技术实现上还有线程的不同实现导致两者还是适合不同的环境的。
select * from table where id > ? order by id limit n;
1.SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE)A
WHERE ROWNUM <= 4
)
WHERE RN >= 1;
2.SELECT * FROM(SELECT ROWNUM RN ,ID,NAME,PASSWORD FROM TABLE WHERE ROWNUM <= 4)TEMP
WHERE RN >= 1;
MySQL和Oracle中都可以使用 like '%字符串%'进行模糊查询,但是在Oracle中,这样查询就无法使用索引进行查询,查询效率会降低。
MySQL中使用concat()函数拼接字符串
like concat('%',#columename#,'%')
Oracle中使用||连接符拼接字符串
like '%'||#columename#||'%'
具体的因为内容太多,大家可以去MySQL与Oracle 差异比较之五存储过程&Function这位大神的文章里看一看
并发性是oltp(On-Line Transaction Processing联机事务处理系统)数据库最重要的特性,并发涉及到资源的获取、共享与锁定。
MySQL以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。
虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么MySQL仍然使用表级锁。
Oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以Oracle对并发性的支持要好很多。
(1)read uncommitted 未提交读
所有事务都可以看到没有提交事务的数据。
(2)read committed 提交读
事务成功提交后才可以被查询到。
(3)repeatable 重复读
同一个事务多个实例读取数据时,可能将未提交的记录查询出来,而出现幻读。mysql默认级别
(4)Serializable可串行化
强制的进行排序,在每个读读数据行上添加共享锁。会导致大量超时现象和锁竞争。
Oracle支持serializable的隔离级别,可以实现最高级别的读一致性。每个session提交后其他session才能看到提交的更改。Oracle通过在undo表空间中构造多版本数据块来实现读一致性。
每个session查询时,如果对应的数据块发生变化,Oracle会在undo表空间中为这个session构造它查询时的旧的数据块。
MySQL默认提交sql语句,但如果更新过程中出现db或主机重启的问题,也许会丢失数据。
Oracle则保证提交的数据均可恢复,因为oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,如果出现数据库或主机异常重启,重启后oracle可以考联机在线日志恢复客户提交的数据。
从大佬那边借来图片,这样方便理解
① 查看源库的数据文件、控制文件、redo日志文件的所在的位置
② 关闭数据库
③ 复制数据文件、控制文件和redo日志文件到指定位置
④ rename 数据文件(rename操作需要数据库状态在mount下进行)
⑤ 重建控制文件(重建控制文件操作需要在nomount状态下进行。)
⑥ 启动数据库
注意事项:
① 源端数据库一定要处于关闭状态
② 复制的数据文件、控制文件一定要全,不能缺失,否则,在启动数据库是会报错。redo日志文件可以不复制,因为在重建control文件时可以指定,但是最好也一起复制过来。
③ 复制完成后,要记得修改数据文件和控制文件的权限,否则,在rename操作时会报错。
④ 要掌握冷备份的原理,要不然,会在某个环节上浪费很多时间。
在Oracle中有一个用户的概念,用来登录到数据库,比如openlab用户。用户拥有一定的权限,可以创建表、视图等。用户名下的数据表,视图等对象的集合叫Schema。Oracle的权限与安全概念比较传统,安全性高于MySQL。
Oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等。
MySQL中对应于Oracle中用户的概念是database。登陆后要先建立database,才能建表。MySQL的用户与主机有关,很容易被仿冒。
MySQL的诊断调优方法较少,主要有慢查询日志。
写这一篇文章的起因是技术选型的时候,公司里大佬说某种风控必须用到MySQL数据库(具体原因没听清),所以要在Oracle的技术上再搭建一个MySQL的集群,于是乎,我就在想,MySQL和Oracle的区别是什么呢?然后一边想一边学,就有了这篇文章文章本天成,妙手偶得之
同时需要思维导图的话,可以联系我,毕竟知识越分享越香!