电话:
您当前的位置:首页 > 职场资讯 > 面试技巧

MySQL与Oracle的特点对比:性能、兼容性、可移植性等方面大不同

来源:网络整理 时间:2025-09-15 作者:原作者 浏览量:

一、比较1、MySQL的特点

性能卓越,服务稳定,很少出现异常宕机;

开放源代码无版本制约,自主性及使用成本低;

历史悠久,社区和用户非常活跃,遇到问题及时寻求帮助;

软件占用空间不大,部署过程简便,后续管理也很方便,管理开销不大;该品牌享有良好声誉,深入人心。

兼容多种操作系统平台,开放多种应用程序编程接口,适配多种编程语言环境,对广泛应用的PHP语言和Java语言均具备优良支持能力

2、Oracle的特点

兼容性方面,Oracle产品运用通用SQL语言,同时通过了美国国家计量标准与技术研究所的检测,能够与IBM SQL/DS、DB2、INGRES、IDMS/R等系统互换使用。

可移植性强:Oracle的产品适用性广,能够在众多硬件与操作系统环境中部署。它支持多种大型、中型及小型计算机系统,也能在多种操作系统平台上顺利运行。

可联结性:Oracle能与多种通讯网络相连,支持各种协议。

高效产出:Oracle系列软件配备多样编程资源,可显著协助用户开展后续构建工作。

Oracle数据库凭借其优异的通用能力、跨平台运行特性、广泛的互联支持以及卓越的效率表现,展现出显著的兼容开放特质。

3、MySQL的缺点

MySQL存在一个显著问题,就是它的安全机制,这种机制设计得过于繁琐且不符合规范,而且用户权限的更新,必须借助mysqladmin命令才能重新加载生效。

MySQL存在一个突出的不足之处,那就是没有通用的RI约束,这种约束能够限定特定字段值的范围; RI约束的缺失,可以通过支持丰富的数据类型体系来部分弥补;

MySQL不支持热备份;

4、Oracle的缺点

对硬件要求很高;

价格比较昂贵;

管理维护麻烦一些;

操作比较复杂,需要技术含量高;

5、技术选型Oracle适用场景

企业若对数据库功能有更深层要求,比如处理复杂信息及其存储方式,且对系统稳定运行、灾难恢复能力、数据保护等方面有严格标准,那么选用Oracle数据库是值得思量的选择。

大型公司运用:Oracle对于规模庞大且结构繁复的商业系统运行十分得当。它能应对巨量信息存储和众多用户同时查询的场景,并且可以兼容多种类型的数据架构和相互关联的体系。

系统承载用户请求多:选择Oracle,此数据库于处理即时业务活动最为适宜。

安全性能卓越:Oracle运用了多种安全机制,包含账号,密钥,权限设定,地域验证,外部验证,以及高级别的安全强化措施等。金融业,银行业等对安全性能有严苛标准的项目,通常都采用Oracle作为其数据存储的核心。

高可用性与灾难恢复方面,Oracle具备出色的能力,其解决方案涵盖集群部署、数据镜像以及自动故障切换等机制,旨在保障系统运行不中断,并确保数据稳固可靠。相比之下,MySQL的商业版本虽然也提供类似功能,但在可靠性上则稍逊于Oracle。

MySQL适用场景

中小微公司及个人应用:得益于其开放源码且花费不多,MySQL常被中小微公司用于业务系统,十分普遍

网络软件:凭借其精巧的构造和卓越的运行效率,MySQL常常成为众多网络软件的首选方案,例如信息管理站点、在线交易系统等。

移动端软件与个人电脑软件:均能提供各类移动端软件和个人电脑软件的数据库服务。

二、区别对比1、本质的区别

Oracle数据库属于对象关系型数据库管理系统类别,通称为Oracle RDBMS或简称为Oracle,它是一种需要付费使用的数据库系统。

MySQL属于一种开放源代码的关系型数据库系统。这种系统在全球范围内应用最为广泛,通常以服务器形式运作,能够支持众多用户同时访问不同的数据库。它具备开放源代码的特点,并且使用时无需支付费用。

RDBMS和ORDBMS的区别

标准

RDBMS

ORDBMS

缩写含义

关系数据库管理系统

面型对象数据库管理系统

数据存储方式

数据存储在实体里面,以包含特定信息的表格的形式存在

数据存储在对象中

数据复杂性

处理比较简单的数据

比 RDBMS 处理更大且更复杂的数据

分组

拥有公共定义的实体集合的不同实体类型

用类描述拥有公共的关系、行为和相似的属性的一组对象

数据处理

RDBMS 只存储数据

存储数据以及方法

主要目标

数据独立于应用程序

数据封装

主键

主键可以明显的标识表中的对象

对象识别码具有唯一性,并且不会随时间改变,适用于所有事物和存在

2、基本操作区别(1)、用户名、端口号

Oracle默认端口:1521 默认用户:system

MySQL默认端口:3306 默认用户:root

(2)、登录方式

连接MySQL:

mysql -u root -p
-- 输入密码
-- 查询所有数据库
show databases;
-- 切换到 "test" 这个数据库
use test;
-- 查询该数据库所有表
show tables;
--修改户密码
设置用户名@localhost的密码为新密码

连接Oracle:

sqlplus
-- 输入用户名
-- 输入密码
-- 查询该用户的表
查询用户表中的表名,列出所有表的名称,使用表名字段。
--修改密码
修改指定账号的登录密码为新的凭证,使用以下指令,注意替换相关内容,确保命令准确无误

(3)、数据库安全性

MySQL使用三个参数来验证用户,即用户名,密码和位置;

Oracle具备诸多安全特性,涉及账号名称,密钥验证,参数设定,地域验证,外部验证,以及更高级别的安全强化措施等。

3、语法区别(1)、大小写是否敏感

MySQL:Windows系统里,它的标准设置使得数据表、字段等名称不区分大小写;而在Linux及类UNIX平台上,数据库、数据表名称在初始状态下是有大小写之分的,但字段名和索引名则没有这个区别。不过,这些规则并非一成不变,可以通过调整配置文件(my.cnf)里的相关设定来改变它们。

Oracle中,表名、列名等名称一般不区分大小写。不过,Oracle会以对象创建时设定的格式来保存名称。若引用对象时大小写不正确,Oracle会自动更正为正确格式。

(2)、常用字段类型

MySQL里包含好些种通用的数据规格。整数类有 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT这些。小数类有 FLOAT和DOUBLE这些。文本类有 CHAR、VARCHAR、TEXT这些。时间类有 DATE、TIME、DATETIME、TIMESTAMP这些。该类型会自动记录时间,更新时间标记,在数据变更处理时十分便捷。

Oracle:整数数据类型包含 NUMBER(p),其中 p 指明精确度,能够表示多种数值区间;浮点数同样适用 NUMBER 数据类型,需设定精确值和小数点位数;文本类型主要有 CHAR、VARCHAR2、CLOB 等类别;时间日期数据类型涵盖 DATE(可存日期与时刻)、TIMESTAMP(提供更高精度的时间记录)。Oracle 的 DATE 数据项记录了年份所在世纪,具体年份,月份,日期,小时,分钟和秒数。

(3)、时间日期

MySQL具有便捷的函数用于处理日期时间数据。比如,NOW函数能够取得当前的日期与时间,CURDATE函数用于获取当前日期,CURTIME函数则用于获取当前时刻。对于日期时间的运算,DATE_ADD和DATE_SUB函数可以执行日期的相加或相减操作。

Oracle系统运用SYSDATE函数来取得此刻的日期与时刻,TRUNC函数能够截取当前日期的部分。在日期时刻之间进行运算时,能够借助INTERVAL关键字,比如SYSDATE加上INTERVAL‘1’ DAY意味着在现有日期上增加一天时间。

(4)、创建表空间 / 数据库

MySQL:建立数据库的过程比较容易,可以运用CREATE DATABASE这个指令。

CREATE DATABASE my_database;

在 MySQL 中进行表空间管理,可借助 InnoDB 存储引擎的文件系统功能,利用特定参数配置表空间文件,例如调整 innodb_data_file_path 的值。

Oracle:要建立表空间,需运用创建表空间的指令,同时能够设定数据文件的存放点、容量以及其他各项参数。

建立名为my_tablespace的表空间,其数据文件为my_tablespace.dbf,大小设定为100兆字节。

建立数据库系统必须先设立表空间,再借助数据库配置工具或执行多道繁琐的数据库查询指令来构建数据库,其过程包含确定控制文件、日志文件等要素。

(5)、创建临时表

MySQL:运用 CREATE TEMPORARY TABLE 指令能够建立临时性数据表,这种表格仅在当前会话期间有效。

建立临时表temp_table, 其中包含id和name两个字段, id字段类型为整型, name字段类型为可变长度字符串, 最大长度为20个字符

临时表仅在当前对话期间可见,对话结束后,该表会自行消失。

MySQL与Oracle数据库对比_MySQL和Oracle优缺点分析_oracle和mysql区别面试

Oracle:也能够建立临时表,包含两种类型,分别是会话型临时表和事务型临时表。会话型临时表在单个会话期间持续有效,需要运用CREATE GLOBAL TEMPORARY TABLE指令来构建。

建立临时表temp_table, 包含字段id和name, id为数字类型, name为可容纳20个字符的字符串类型, 当事务提交时, 表中的数据将得以保留, 这种行为体现为会话级别的数据持久性

事务中的临时表在操作完成后会自行消亡,建立时需指定以提交时删除行为。

(6)、创建表和插入记录

MySQL:构建表格的规范格式为 建立表名,包含若干列名及其数据类型,各个列名与数据类型之间用逗号分隔

建立名为users的表格,包含字段id,数据类型为整型,自动增长,为主键,字段name,数据类型为可变字符型,最大长度为五十,字段age,数据类型为整型。

插入记录使用 INSERT INTO 语句,如

向users表中插入数据,名字字段为John,年龄字段为30岁

Oracle:创建表的语法类似,如

建立名为employees的表结构,其中包含编号为employee_id的主键字段,数据类型为数字,员工姓名字段名为employee_name,数据类型为可变长度字符串,最大长度为100个字符,部门编号字段名为department_id,数据类型为数字。

插入记录时

向employees表中插入数据,员工名为Alice,部门编号为101。

Oracle 也能够借助子查询执行数据录入操作,这种方式在处理繁复的数据迁移任务时十分有效。

(7)、事务隔离级别

MySQL:支持四种事务隔离级别,分别是 :

读未提交级别,读已提交级别,可重复读级别,可串行化级别。

系统预设的隔离标准为可重复读,依据此标准,一个工作单元内反复获取相同信息的输出将维持稳定不变。

Oracle系统预设的运作模式,在处理数据变动时,其标准的数据一致性保障程度,属于已提交读级别。

这表明单个操作只能访问其他操作已经完成写入的信息。与 MySQL 类似,Oracle 同样提供多种隔离标准,可以通过调整配置参数,或是在操作过程中运用 SET TRANSACTION ISOLATION LEVEL 命令来切换隔离标准。

(8)、事务提交方式

MySQL操作中,通过提交指令确认事务,比如先启动事务,然后进行若干SQL指令,包括增添或修正数据,接着发出确认指令完成事务。另外,若需取消已进行的操作,可借助撤销指令,使事务恢复到初始状态。

Oracle:数据更新操作完成后也会采用提交指令,并且操作流程基本相同。可以在 SQL*Plus 或其他连接软件里,借助设定自动执行更新功能来调整即时保存状态。AUTOCOMMIT 开启状态下,每条 SQL 命令运行完毕即会自动完成事务提交;若关闭该功能,就必须通过手动执行 COMMIT 或 ROLLBACK 操作来管理事务流程。

(9)、分页

在 MySQL 数据库中,实现数据分页功能常借助 LIMIT 语句来达成目的。其基本语法结构为:SELECT 所有字段 FROM 表名称 LIMIT 起始位置值, 记录条目数。起始位置值表示数据检索的初始行号,且行号从零计数。记录条目数则指明需要获取的数据行数。此方法操作简便,能够满足基础的分页查询要求。

Oracle:分页处理起来比其他方式更麻烦些。可以利用 ROWNUM 伪列来达成分页效果。比如说,

查询所有数据,先从表内数据提取,接着筛选出满足条件的结果,最后为每条记录分配一个唯一编号,编号从1开始递增<= end_row) WHERE rnum >= start_row;

start_row 代表初始行的位置编号,end_row 代表终止行的位置编号。

自Oracle 12C版本起,新增了一种针对行数的限定方式,这种限定方式同样适用于实现数据的分批检索功能。

查询员工表,根据薪资排序,仅获取前五个记录结果。
员工编号是EMPNO,员工姓名是ENAME,管理者的编号是MGR,雇佣日期是HIREDATE,薪资是SAL,佣金是COM,部门编号是DEPTNO
这个句子非常复杂,包含了很多信息,需要仔细分析才能理解,各个部分之间关系密切,不能随意拆分,但整体意思还是比较清晰的,主要表达了某个观点,希望读者能够认真思考,不要错过其中的重点,同时也需要注意一些细节问题,这样才能更好地把握全文的核心内容。
九十二 Bryana Worswick,八十,三月份十八日,两千五百零四,一,十。
九十九  Rufus  McDermott-Row  是一位先生,他的出生日期是六十三年三月二日,编号是两千五百一十二,年龄是六十一岁,身高是十单位。
三十六号选手Jacenta Joust, 比赛日期为二零一七年一月三十一日, 比赛编号为二十五分之一百一十五, 最终得分为九十, 比赛时长为三十分钟。
Blisse Adamoli出生在十二月四日十四年,编号两千五百一十七,编号六十七,年龄二十岁
98  Simona  Shropshire  生于52岁 16-Aug-08  2518年登记  24次记录  88分

(10)、查询语句

MySQL:基本的查询语法是

选取列名一,列名二,等等,从表名中查询,满足条件。

能够处理多种关联查询类型,包括内部关联、外部关联的左侧关联以及右侧关联等,举例来说

查询表table1,与表table2根据id字段进行内连接,并返回所有匹配的记录。

Oracle:查询语法相似,如

选取列名一,列名二,等等,从表名中查询,满足条件的情况。

Oracle 在连接查询方面,既兼容通用的 SQL 连接表达方式,也具备专属的连接写法,例如借助 “(+)” 符号来标示外连接,但这种用法现已不再提倡,应当采用规范的 JOIN 语法进行操作。

(11)、id 递增的处理

MySQL:定义主键列时,能够借助 AUTO_INCREMENT 特性实现自动增长功能。比如

建立表格名为products,包含字段id和product_name,id为整数类型并自动增长,作为主键,product_name为可变长度字符串,最大长度为100

新增数据记录时,无需明确设定编号,MySQL 将自行产生一个独一无二的、按序递增的编号。

Oracle中不存在MySQL的AUTO_INCREMENT属性,一般借助序列机制达成相似作用,先要构建一个序列,比如

建立序列product_seq,初始值为1,每次递增1。

接着在添加数据时,借助序列的下一个数值属性,取得下一个依次增大的数值,将该数值填入编号字段,比如

向products表中插入数据,其中id列使用product_seq序列的下一个值,product_name列的值为'Product A';

(12)、null 值处理

在查询时,可以利用 IS NULL 或 IS NOT NULL 来检测字段值是否为空值。比如说,

查询表中的所有数据,其中指定列的值不存在,返回结果。

函数运用时,部分函数碰上空值会得出固定值,比如求和运算针对含空值的字段会舍弃空值。

Oracle 也同样借助 IS NULL 和 IS NOT NULL 来检测空值,这两种方法可以用来判定是否为空。Oracle 的函数在处理空值时有其特定的方法,比如 NVL 函数能够将空值替换成预设的数值,NVL (列名, 0) 这个用法会把列名中的空值换成数字零。

(13)、小数格式化

MySQL 提供了多种方式来处理数字,比如用四舍五入法调整小数部分,其方法是运用 ROUND 函数,格式为 ROUND (原始数值,精确位数),原始数值代表需要调整的数字,精确位数表明要保留的小数点位数。除此之外,还可以借助 CONVERT 函数,将数据类型进行转换,以此达成特定的小数格式化效果。

Oracle 也具备 ROUND 函数,其调用方法与同类功能相似。此外,Oracle 能够借助 TO_CHAR 函数把数值转变为文本类型,以便达成更自由的格式化目的。比如 TO_CHAR (number, ‘FM9999.99’) 这个表达式,能够将数值调整为预设的小数规格,并且其中 ‘FM’ 的含义是消除数值前部的空白部分。

(14)、多条件判断

MySQL中,在条件筛选部分,能够运用与、或这类逻辑指令来合并好几个筛选要求,比如

查询整个表格,要求同时满足第一个标准,并且符合第二个条件。

也可以使用 CASE 语句在查询结果中进行多条件判断,例如

查询列名,根据条件判断,如果满足第一种情况就取第一个值,如果满足第二种情况就取第二个值,否则取第三个值,把这个结果命名为新列,查询的数据来源是某个表。

Oracle:逻辑运算符的运用手法跟 MySQL 一致。Oracle 也接纳 CASE 语句,并且还具备 DECODE 函数用来执行基础的多情形判定,比如

选取列名,根据条件判断,若等于值一,则结果为值一对应结果,若等于值二,则结果为值二对应结果,否则结果为默认结果,将此结果命名为新列,从表名中获取数据。

(15)、单引号的处理

MySQL规定,语句里的文本值常需以单引号包围。倘若文本内含单引号,则须用反斜杠加以处理,譬如

向table_name表中column_name列插入值,该值为字符串'It's a sample';

Oracle:同样,字符串常量需要用单引号括起来,如果字符串中包含单引号,那么应该使用两个单引号来表示一个单引号

往表里插入数据,字段名是column_name,值是字符串内容,内容为It's a sample

(16)、模糊查询

MySQL:借助 LIKE 关键词能够实现模糊检索,该操作支持两种通配字符,一种是指代任意连续字符序列的特殊符号,另一种是象征任意单个字符的特殊符号。比如,

查询表名中的所有数据,条件是列名包含指定关键词,格式为百分号前缀加关键词加百分号

Oracle 同样借助 LIKE 关键词来执行近似检索,其通配符的运用方式与 MySQL 一致。不仅如此,Oracle 内置了若干进阶的文本检索工具,比如借助 CONTAINS 函数(前提是安装并设置好 Oracle Text 模块)开展更为精密的文本检索工作。

(17)、时间相减

对于计算过去七天,时间数值减去七即可,若要计算前一个小时,时间数值减去四分之一即可,时间增加的计算方式与此相同

将日期字符串'2023-03-28 15:51:20'按照格式'yyyy-mm-dd hh24:mi:ss'解析为日期值,然后减去7天,从虚拟表dual中查询这个计算结果
统计过去七天,得出:二零二三年三月二十一日十五时五十一分二十秒
将日期'2023-03-28 15:51:20'按照格式'yyyy-mm-dd hh24:mi:ss'解析,然后减去一天的四分之一,最终结果从dual表中获取,用逗号分隔各个部分
统计先前一个时段,数据如下:2023年3月28日14点51分20秒

mysql计算前7天,或者前1个小时,需要用不同的关键字:

取2023年3月28日15时51分20秒,减去七天,得到具体时间
-- 计算前7天,结果:2023-03-21 15:51:20
计算 2023-03-28 15:51:20 减去 1 个小时的时间结果,可以得到新的日期和时间值
-- 计算前1个小时,结果:2023-03-28 14:51:20

分享到:
相关推荐
暂无相关推荐
客服服务热线
关于我们
产品与服务
收费与推广
网站特色
咨询反馈
微信公众号
手机浏览

Copyright © 2018 All Rights Reserved 版权所有 宁国人才网 苏ICP备2024139598号-6

地址:安徽省合肥市瑶海区 EMAIL:

Powered by PHPYun.

用微信扫一扫