您当前的位置:首页 > 电脑百科 > 数据库 > 百科

作为一名数据库管理员,应该知道MySQL和Oracle的区别

时间:2019-11-06 09:38:07  来源:  作者:

作为一名数据库管理员,应该知道MySQL和Oracle的区别

 

由于SQL Server不常用,所以这里只针对MySQL数据库和Oracle数据库的区别

(1) 对事务的提交

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

(2) 分页查询

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

(3) 事务隔离级别

MySQL是read commited的隔离级别,而Oracle是repeatable read的隔离级别,同时二者都支持serializable串行化事务隔离级别,可以实现最高级别的

读一致性。每个session提交后其他session才能看到提交的更改。Oracle通过在undo表空间中构造多版本数据块来实现读一致性,每个session

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

MySQL没有类似Oracle的构造多版本数据块的机制,只支持read commited的隔离级别。一个session读取数据时,其他session不能更改数据,但

可以在表最后插入数据。session更新数据时,要加上排它锁,其他session无法访问数据

(4) 对事务的支持

MySQL在innodb存储引擎的行级锁的情况下才可支持事务,而Oracle则完全支持事务

(5) 保存数据的持久性

MySQL是在数据库更新或者重启,则会丢失数据,Oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,可以随时恢复

(6) 并发性

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

虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。

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

发性的支持要好很多。

(7) 逻辑备份

MySQL逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常的dml使用,Oracle逻辑备份时不锁定数据,且备份的数据是一致

(8) 复制

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

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

(9) 性能诊断

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

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

(10)权限与安全

MySQL的用户与主机有关,感觉没有什么意义,另外更容易被仿冒主机及ip有可乘之机。

Oracle的权限与安全概念比较传统,中规中矩。

(11)分区表和分区索引

MySQL的分区表还不太成熟稳定。

Oracle的分区表和分区索引功能很成熟,可以提高用户访问db的体验。

(12)管理工具

MySQL管理工具较少,在linux下的管理工具的安装有时要安装额外的包(phpmyadmin, etc),有一定复杂性。

Oracle有多种成熟的命令行、图形界面、web管理工具,还有很多第三方的管理工具,管理极其方便高效。

(13)最重要的区别

MySQL是轻量型数据库,并且免费,没有服务恢复数据。

Oracle是重量型数据库,收费,Oracle公司对Oracle数据库有任何服务。

(13) 自动增长的数据类型处理

MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。

CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;

其中最大的值按字段的长度来定, 如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999

INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL

(14) 单引号的处理

MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

(15) 翻页的SQL语句的处理

MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;PHP里还可以用SEEK定位到结果集的位置。ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用ROWNUM<100, 不能用ROWNUM>80。

(16) 长字符串的处理

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

(17) 日期字段的处理

MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE, 精确到秒,或者用字符串转换成日期型函数TO_DATE(‘<st1:chsdate isrocdate="False" islunardate="False" day="1" month="8" year="2001">2001-08-01</st1:chsdate>’,’YYYY-MM-DD’)年-月-日 24小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC.日期型字段转换成字符串函数TO_CHAR(‘<st1:chsdate isrocdate="False" islunardate="False" day="1" month="8" year="2001">2001-08-01</st1:chsdate>’,’YYYY-MM-DD HH24:MI:SS’)

日期字段的数学运算公式有很大的不同。MYSQL找到离当前时间7天用 DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到离当前时间7天用 DATE_FIELD_NAME >SYSDATE - 7;

(18) 空字符的处理

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

(19)字符串的模糊比较

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

(20)程序和函数里,操作数据库的工作完成后请注意结果集和指针的释放。



Tags:MySQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关推荐
前言在之前我们已经讲解了一主一从,双主双从的mysql集群搭建,在单机应用的时候看起来没有问题,但是在企业的生产环境中,在很多情况下都会有复制延迟的问题。所以我来了!!!​ 主从复...【详细内容】
2021-07-15  Tags: MySQL  点击:(2)  评论:(0)  加入收藏
集群服务部署1、配置主库映射文件 键名mysqld.cnf## The Percona Server 5.7 configuration file.### * IMPORTANT: Additional settings that can override those from...【详细内容】
2021-07-15  Tags: MySQL  点击:(3)  评论:(0)  加入收藏
一、开启IIS全部功能。二、部署PHP1.官网下载并解压PHP: https://windows.php.net/downloads/releases/2.将php.ini-development文件改为php.ini3.修改php.ini(1)去掉注释,并修...【详细内容】
2021-07-15  Tags: MySQL  点击:(3)  评论:(0)  加入收藏
数据库MYSQL的查询一、单表查询1、条件查询select *from test where name=&#39;libai&#39;①查询名字为李白且年龄为18:select *from test where name=&#39;libai&#39; and a...【详细内容】
2021-07-14  Tags: MySQL  点击:(3)  评论:(0)  加入收藏
这篇文章主要给大家介绍了关于MySQL 8.0新特性之隐藏字段的相关资料,文中通过示例代码介绍得非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编...【详细内容】
2021-07-12  Tags: MySQL  点击:(3)  评论:(0)  加入收藏
【目标】本文介绍了MySQL数据库命令规范、数据库基本设计规范、数据库字段设计规范、索引设计规范、常见索引列建议、如何选择索引列的顺序、以及数据库SQL开发规范等。一...【详细内容】
2021-07-08  Tags: MySQL  点击:(3)  评论:(0)  加入收藏
安装mysqlsudo apt-get updatesudo apt-get install mysql-server输出:Reading package lists... DoneBuilding dependency treeReading state information... DoneThe follo...【详细内容】
2021-07-05  Tags: MySQL  点击:(10)  评论:(0)  加入收藏
1 背景介绍我们在数据库运维的过程中.会遇到不同版本的数据库部署需求.同时测试环境数据库需求更是不同.有时为了节省资源.我们需要进行多实例的部署.或者在我们自己学习的...【详细内容】
2021-07-05  Tags: MySQL  点击:(10)  评论:(0)  加入收藏
为什么需要索引? 一句话概括:索引的出现其实就是为了提高数据查询的效率。一、索引常见模型模型: 哈希表、有序数组和搜索树哈希表 哈希表是一种以键 - 值(key-value)存储数据的...【详细内容】
2021-07-04  Tags: MySQL  点击:(12)  评论:(0)  加入收藏
不想把mysql端口暴露在公网?在naviCat里可以通过ssh连接mysql。连接设置: 使用SSH通道,主机名或IP地址填写该mysql服务器地址 验证方式:公钥。注:在此之前,需要在服务器上设置好用...【详细内容】
2021-07-03  Tags: MySQL  点击:(5)  评论:(0)  加入收藏
▌简易百科推荐
初学者的数据库索引简介> Congratulations今天在ORM的时代,我们作为开发人员不必经常触摸数据库。我自己自己建立了我的第一个项目而不在项目内写一行的原始SQL。它起初工作...【详细内容】
2021-07-12  闻数起舞    Tags:SQL查询   点击:(5)  评论:(0)  加入收藏
如果一切似乎都在控制下,你就不会够快”> Photo by Christina Morillo (original). Thank you!几乎所有用于最终用户的Web服务都需要存储数据。它们几乎所有所有人都将它们存...【详细内容】
2021-07-12  闻数起舞    Tags:数据库性能   点击:(5)  评论:(0)  加入收藏
系统数据库和用户数据库数据库有两种:系统数据库,另一种是需要用户创建的数据库,右键新建数据库(称之为用户数据库) 创建数据库必须了解的概念要创建自己的数据库,首先要弄清楚两...【详细内容】
2021-07-09  技术小菜    Tags:数据库   点击:(6)  评论:(0)  加入收藏
分库分表介绍:分库分表的目的是为了系统高并发、高可用。分库和年发表是两回事,两个概念,都是为了防止数据库服务因为同一时间内访问量过大导致宕机而设计的一种应对策略。一、...【详细内容】
2021-06-28  从孩子开始学编程    Tags:分库分表   点击:(16)  评论:(0)  加入收藏
本文讲解窗口函数的概念,窗口函数与数据分组的功能相似,可以指定数据窗口进行统计分析,但窗口函数与数据分组又有所区别,窗口函数对每个组返回多行,而数据分组对每个组只返回一行...【详细内容】
2021-06-25  大话数据分析    Tags:SQL数据分析   点击:(15)  评论:(0)  加入收藏
MongoDB 简介MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。它的最大特点是:&bull;特别适合存储大量的无结...【详细内容】
2021-06-25  锐玩道    Tags:MongoDB   点击:(25)  评论:(0)  加入收藏
class Integration(Base, ModelBase, ModelSerializer): __tablename__ = &#39;integration&#39; id = Column(Integer, primary_key=True) domain = relationship...【详细内容】
2021-06-24  lizhihua0625    Tags:sqlalchemy   点击:(16)  评论:(0)  加入收藏
我们渴望通过数据来增强和改善商业和生活的各个方面,这驱使我们在大规模管理数据方面进行范式转变。 尽管过去十年的技术进步已解决了数据量和数据处理计算的规模问题,但它们无法解决其他方面的规模问题:数据格局的变化,...【详细内容】
2021-06-23  ThoughtWorks  今日头条  Tags:Data Mesh   点击:(19)  评论:(0)  加入收藏
一. 前台管理1. 轮播图(5张),首页头部大图,注册登录页左侧大图,logo图,导航条广告二. 后台管理1. 站点用户管理1. 系统用户 SystemUser 列名 数据类型 ...【详细内容】
2021-06-23  大壮二壮学剪辑    Tags:数据库表   点击:(15)  评论:(0)  加入收藏
阿里云Tair云原生内存数据库线上名字为阿里云数据库Redis企业版(又称阿里云Tair),从2009年开始正式承载集团业务,是一款历经磨练的企业级产品。它完全兼容Redis的数据结构和通讯协议,包括API接口,并且在内部逐步打磨的过程...【详细内容】
2021-06-21  数据库技术达摩院    Tags:Tair云   点击:(18)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条