导言

大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助


有需要的同学可以加我的公众号,以后的最新的文章第一时间都在里面,也可以找我要思维导图

说到MySQL和Oracle之间的区别,大家第一个想到的肯定是MySQL是开源的项目,因为开源,所以免费。理所当然的,一些中小企业考虑数据库的时候MySQL肯定是首选。Oracle是Oracle公司推出的一款成熟的数据库产品是闭源同时也是收费的,但是Oracle官网是不限制下载的,一般的开发测试是没问题但是你如果来拿来商用而又不给Oracle付费的话,肯定是被Oracle强大的法务部门给狠刮一块肉(当然比任天堂和迪士尼还有些差距)。

不过现在两种产品都是一家的,也都有商业版,都要钱。当然,技术实现上还有线程的不同实现导致两者还是适合不同的环境的。

一、MySQL和Oracle在操作上的一些区别

1、主键

  • MySQL 一般使用自动增长类型主键,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,MySQL将自动增长。
  • Oracle没有自动增长类型,需要自增主键时一般使用的序列,插入记录时将 序列号的下一个值付给该字段即可。如果不需要使用自增主键,一般会选择使用全剧唯一的流水号作为Oracle数据库的主键。

2、分页查询

  • MySQL一般使用limit关键字进行分页查询,有时候也可以利用自增主键加order by 命令加 limit进行分页查询
select * from table where id > ? order by id limit n;
  • Oracle处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用ROWNUM<?, 不能用ROWNUM>?,需要大于则要用到别名来进行处理
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;

3、长字符串的处理

  • Oracle在处理长字符串的时候有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串,则需要考虑字段用CLOB类型,方法借用Oracle里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长 度字段值都应该提出警告,返回上次操作。

4、空字符串的处理

  • MySQL中定义了的非空字段也可以有空的内容。而Oracle里定义了非空字段就不容许有空的内容,如果Oracle中字段为NULL或空字符,需要把它改成一个空格的字符串。

5、模糊查询

MySQL和Oracle中都可以使用 like '%字符串%'进行模糊查询,但是在Oracle中,这样查询就无法使用索引进行查询,查询效率会降低。

MySQL中使用concat()函数拼接字符串
like concat('%',#columename#,'%')
Oracle中使用||连接符拼接字符串like '%'||#columename#||'%'

6、存储过程

  • 1、创建存储过程语句不同
  • 2、创建函数语句不同
  • 3、传入参数写法不同
  • 4、包的声明方式不同
  • 5、存储过程返回语句不一样
  • 6、存储过程异常处理不一样
  • 7、过程和函数的声明变量的位置不同
  • 8、NO_DATA_FOUND异常处理
  • 9、在存储过程中调用存储过程方式的不同
  • 10、抛异常的方式不同

具体的因为内容太多,大家可以去MySQL与Oracle 差异比较之五存储过程&Function这位大神的文章里看一看

二、MySQL和Oracle的并发能力

1、并发性

并发性是oltp(On-Line Transaction Processing联机事务处理系统)数据库最重要的特性,并发涉及到资源的获取、共享与锁定

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

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


2、一致性

  • MySQL支持四种隔离级别,可以实现各种级别的读一致性

(1)read uncommitted 未提交读

所有事务都可以看到没有提交事务的数据。

(2)read committed 提交读

事务成功提交后才可以被查询到。

(3)repeatable 重复读

同一个事务多个实例读取数据时,可能将未提交的记录查询出来,而出现幻读。mysql默认级别

(4)Serializable可串行化

强制的进行排序,在每个读读数据行上添加共享锁。会导致大量超时现象和锁竞争。

  • Oracle支持 READ COMMITTEDSERIALIZABLE这两种事务隔离级别。

Oracle支持serializable的隔离级别,可以实现最高级别的读一致性。每个session提交后其他session才能看到提交的更改。Oracle通过在undo表空间中构造多版本数据块来实现读一致性。

每个session查询时,如果对应的数据块发生变化,Oracle会在undo表空间中为这个session构造它查询时的旧的数据块


3、数据持久性

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

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

三、MySQL和Oracle的备份与安全

1、备份

从大佬那边借来图片,这样方便理解

  • 1、Oracle逻辑备份时不锁定数据,且备份的数据是一致的。
  • 2、Oracle有成熟的热备工具rman,热备时,不影响用户使用数据库。即使备份的数据库不一致,也可以在恢复时通过归档日志和联机重做日志进行一致的恢复。
  • 3、Oracle冷备份主要步骤:
 ① 查看源库的数据文件、控制文件、redo日志文件的所在的位置② 关闭数据库③ 复制数据文件、控制文件和redo日志文件到指定位置④ rename 数据文件(rename操作需要数据库状态在mount下进行)⑤ 重建控制文件(重建控制文件操作需要在nomount状态下进行。)⑥ 启动数据库
注意事项:
① 源端数据库一定要处于关闭状态
② 复制的数据文件、控制文件一定要全,不能缺失,否则,在启动数据库是会报错。redo日志文件可以不复制,因为在重建control文件时可以指定,但是最好也一起复制过来。
③ 复制完成后,要记得修改数据文件和控制文件的权限,否则,在rename操作时会报错。
④ 要掌握冷备份的原理,要不然,会在某个环节上浪费很多时间。

  • 1、MySQL逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常的dml使用。
  • 2、MySQL中的myisam的引擎,用MySQL自带的mysqlhostcopy热备时,需要给表加读锁,影响dml操作。innodb的引擎,它会备份innodb的表和索引,但是不会备份.frm文件。用ibbackup备份时,会有一个日志文件记录备份期间的数据变化,因此可以不用锁表,不影响其他用户使用数据库。但此工具是收费的。
    innobackup是结合ibbackup使用的一个脚本,他会协助对.frm文件的备份

2、权限与安全

在Oracle中有一个用户的概念,用来登录到数据库,比如openlab用户。用户拥有一定的权限,可以创建表、视图等。用户名下的数据表,视图等对象的集合叫Schema。Oracle的权限与安全概念比较传统,安全性高于MySQL。

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

MySQL中对应于Oracle中用户的概念是database。登陆后要先建立database,才能建表。MySQL的用户与主机有关,很容易被仿冒。

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

结语

写这一篇文章的起因是技术选型的时候,公司里大佬说某种风控必须用到MySQL数据库(具体原因没听清),所以要在Oracle的技术上再搭建一个MySQL的集群,于是乎,我就在想,MySQL和Oracle的区别是什么呢?然后一边想一边学,就有了这篇文章文章本天成,妙手偶得之

同时需要思维导图的话,可以联系我,毕竟知识越分享越香!

【进阶之路】Mysql与Oracle的区别相关推荐

  1. MySQL与Oracle的区别

    MySQL与Oracle的区别 1.收费区别 MySQL是轻量型数据库,开源免费.Oracle是收费的而且价格非常高: 2.实例区别 MySQL一个实例可以操作多个库,而Oracle一个实例只能对应一 ...

  2. 关于mysql和oracle错误的有_关于MySQL与Oracle的区别

    0 查询分组时的区别 Oracle数据库中使用Group By分组时 select 后面的列必须是分组的列(group by(列))或者是用了聚合函数的lie 但是 MySQL中 不需要如此 随便分组 ...

  3. Mysql 和oracle的区别

    (1)对事务的提交 MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮 (2) 分页查询 MySQL是直接在SQL语句中写&q ...

  4. Mysql和Oracle语句区别

    Mysql语句: select substr(a.createtime, 1, 4) as statisticsName from defect1 a; select substr(a.createt ...

  5. sql和mysql和oracle的区别吗_sql和oracle的语法上有什么区别

    sql和oracle语法上的区别有:1.数据类型不同:2.获得当前系统时间的函数不同:3.创建用户的方式不同:4.连接变量和字符串的方式不一样:5.条件语句"if-else-"的语 ...

  6. oracle 和mysql语法上的区别,Mysql和Oracle的一些语法区别

    作为一个有追求的程序猿,当然要不断的学习,巴拉巴拉巴拉...好了,贴一个网址给大家,哈哈 MySQL与Oracle 差异比较:http://www.cnblogs.com/HondaHsu/p/364 ...

  7. Mysql与Oracle区别

    Mysql与Oracle区别 文章分类:数据库 周五去一家公司去面试,那公司经理问了关于Mysql与Oracle的区别问题,以前没有总结,回答也不是很好,只是凭感觉,先总结如下: 1. Oracle是 ...

  8. SQLplus 和mysql区别_mysql和oracle的区别有哪些

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

  9. oracle 和mysql有什么区别_mysql和oracle的区别有哪些

    原标题:mysql和oracle的区别有哪些 MySQL和Oracle都是流行的关系数据库管理系统(RDBMS),在世界各地广泛使用:大多数数据库以类似的方式工作,但MySQL和Oracle的这里和那 ...

最新文章

  1. js学习总结----轮播图之渐隐渐现版
  2. CodeForce 534C Polycarpus' Dice (数学推理)
  3. indexzero/http-server-2-使用
  4. internetreadfile读取数据长度为0_YOLOV3的TensorFlow2.0实现,支持在自己的数据集上训练...
  5. php 如何下载,php的包怎么下载
  6. 微计算机原理与接口半期考试,最新南京邮电大学微型计算机原理与接口技术期末考试试卷...
  7. 最新Win10离线安装.NET Framework 3.5的方法(附离线包2022/3/22)
  8. 【IT之路】Docker拉取镜像查看版本
  9. 人际关系中的万有引力
  10. STM32C8T6+LORA(SX1278)
  11. 2020年全国大学生数学建模竞赛赛题 选题建议
  12. Excel基本操作 上篇
  13. 用 Java 实现一个远程控制客户端
  14. linux配置iscsi无账号密码,linux iscsi Initiator配置CHAP认证
  15. E500 TLB miss 及 DSI处理分析(2)
  16. ue unreal 虚幻 invalid HTTP response code received 问题
  17. 雅虎通8.3版本发布!
  18. 【非常好英文】非常好用英文怎么说
  19. JavaFX实现三个风扇、每个风扇有按钮控制、一个总按钮控制三个风扇
  20. soundtouch分析

热门文章

  1. 隐马尔可夫模型 #博学谷IT学习技术支持#
  2. push button 与 tool button的用法_详解Vue的slot新用法
  3. Caché File
  4. 一维地震子波合成记录c语言,地震子波波形显示及一维地震合成记录
  5. 微网站分享微信朋友圈和分享给朋友图标显示问题
  6. HTML是什么?—零基础自学网页制作
  7. Mysql 存储引擎
  8. SSR(服务端渲染)于CSR(客户端渲染)
  9. 随手记高管专访之CEO谷风专访——随手记理财安全吗
  10. python少儿趣味编程视频教程全套-Python少儿趣味编程