MySQL(七)MySQL和Oracle、PostgreSQL的区别

本文详细对比了MySQL、Oracle和PostgreSQL三种数据库。在基本差别上,涉及收费、客户规模、性能等方面;使用区别包括大小写敏感性、字段类型、时间日期处理等。如Oracle适合大企业、高并发场景,MySQL适合中小企业,PostgreSQL功能强大,适合复杂应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本系列文章:
   MySQL(一)SQL语法、数据类型、常用函数、事务
   MySQL(二)MySQL SQL练习题
   MySQL(三)视图、存储过程、索引
   MySQL(四)存储引擎、锁
   MySQL(五)MySQL架构、数据库优化、主从复制
   MySQL(六)SQL语句优化
   MySQL(七)MySQL和Oracle、PostgreSQL的区别

一、MySQL和Oracle

1.1 基本差别(是否收费/单表数据量/Oracle支持的并发量高)

  • 数据库类型
      Oracle数据库是一个对象关系数据库管理系统(ORDBMS),MySQL是一个开源的关系数据库管理系统(RDBMS)。

  对象关系数据库管理系统:基于对象模型,存储数据及其方法,数据存储在对象中。拥有对象类、对象标识、多态、封装和继承等特性。用于存储复杂的数据。
  关系数据库管理系统:基于关系模型, 只存储数据,数据存储在实体里面,以包含特定信息的表格的形式存在。用于处理比较简单的数据。

  • 客户规模
      Oracle主要面向大企业级别的用户,而MySQL则更适合中小型企业和个人
  • 成本
      Oracle付费,MySQL免费
  • 可移植性和兼容性
      MySQL可以很容易地在各种平台上运行,并与其他许多开源软件集成。Oracle虽然也有跨平台支持,但更偏向于使用自己的技术堆栈和产品集成。
  • 安全性
      Oracle使用了许多安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等。MySQL只使用三个参数来验证用户,即用户名,密码和位置。
  • 内存
      Oracle占有内存空间大(因为面对对象,并且还存储数据的方法);MySQL占有内存空间比较小
  • 性能和扩展性
      由于MySQL的精简设计和管理方式,所以其性能通常比Oracle更高,尤其在读取和写入方面。MySQL的扩展性也相对较好,因为其社区活跃,有许多插件和工具可供选择和使用。
  • 支持并发量
      Oracle使用行级别的锁,不依赖索引来锁定某一行,锁资源的粒度小,所以并发性高,支持大并发访问量
      MySQL只有InnoDb支持行锁,而且必须依赖索引才能用到行锁,否则会使用表锁,所以并发性较低,面对大访问量可以做分表分库优化。
  • 数据量
      Oracle单表数据量,可以千万,甚至上亿的规模Mysql单表数据量,最好控制在百万级别
  • 事务隔离级别
      Oracle默认的是 read commited(读已提交)的隔离级别,会有不可重复读+幻读的问题。
      MySQL默认是 repeatable read(可重复度)的隔离级别,只会有幻读的问题。
  • 临时表
      在MySQL中,临时表是仅对当前用户会话可见的数据库对象,并且一旦会话结束,这些表将自动删除。
      Oracle中临时表的定义与MySQL略有不同,因为临时表一旦创建就会存在,直到它们被显式删除,并且对具有适当权限的所有会话都可见。但是,临时表中的数据仅对将数据插入表中的用户会话可见,并且数据可能在事务或用户会话期间持续存在。
  • sql语句的灵活性
      MySQL对sql语句有很多非常实用而方便的扩展,比如limit功能(分页)、insert可以一次插入多行数据;Oracle在这方面感觉更加稳重传统一些,Oracle的分页是通过伪列和子查询完成的,插入数据只能一行行的插入数据。
  • 对于事务的支持
      Mysql对于事务默认是不支持的,只是有某些存储引擎中如:innodb可以支持;而Oracle对于事物是完全支持的。

  适合Oracle的场景:

  对数据库有高级需求:如果企业对数据库的高级需求较高,如存储复杂数据及其方法,要求高可用性、灾备恢复、安全性等,可以考虑用Oracle。
  大型企业应用:Oracle在处理大规模、复杂的企业级应用方面表现出色。它能够处理海量的数据和高并发的访问请求,同时支持复杂的数据模型和关系。
  项目并发量高:使用Oracle,它是是OLTP(联机事务处理)最好的工具。
  安全性要求高:Oracle使用了许多安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等。像金融、银行等对安全性要求高的项目一般都选用Oracle作为数据库。
  高可用性和容灾需求:Oracle提供了强大的高可用性和容灾解决方案,例如集群配置、数据复制和自动故障转移等,能够确保系统的连续性和数据的可靠性。MySQL付费版也支持,但可靠性不如Oracle。

1.2 使用区别(大小写是否敏感/数值类型/)

  • 1、大小写是否敏感
      Oracle:双引号下大小写敏感,大小写不敏感的前提条件是在没有使用双引号 “” 的前提下(表名、字段名)。
      Oracle创建表默认大写,可以设置为小写。
// 如果创建表的时候是这样写的,那么就必须严格区分大小写
CREATE TABLE "TableName"("id" number); 
// 不仅要区分大小写而且要加双引号,以便和上面的第三种查询方式区分开
SELECT * FROM "TableName"; 

   MySQL创建的表名默认小写

  • 2、常用字段类型
      Oracle常用字段类型:

  数值:number。
  字符串:CHAR,NCHAR,VARCHAR2和NVARCHAR2。
   char:使用数据库字符集来存储数据,长度固定,如果存储的数据没有达到指定长度,自动补足空格。
   nchar:使用国家字符集来存储数据,长度固定,如果存储的数据没有达到指定长度,数据库自动补足空格。
   varchar2: 使用数据库字符集存储数据,长度可变,如果存储数据没有达到指定长度,不自动补足空格。
   nvarchar2:使用国家字符集来存储数据,长度可变,如果存储的数据没有达到指定长度,不自动补足空格。
  日期:date、timestamp。

  oracle的varchar,一般不使用,那个是sql标准的类型,允许空串,oracle自己开发了个类型叫varchar2,不允许存空串,而且可以兼容以后的oracle版本。
  MySQL常用字段类型:

  数值:tinyint、smallint、mediumint、int、bigint、decimal。
  字符串:char、varchar。
  日期:date、time、datetime、timestamp。

  • 3、时间日期
      Oracle对于计算前7天,时间减7就行了;计算前1个小时,时间减1/24就行了,加法同理:
select TO_DATE('2021-05-30 15:51:20', 'yyyy-mm-dd hh24:mi:ss') -7 from dual;
-- 计算前7天,结果:2021-05-23 15:51:20

select TO_DATE('2021-05-30 15:51:20', 'yyyy-mm-dd hh24:mi:ss') - 1/24 from dual;
-- 计算前1个小时,结果:2021-05-30 14:51:20

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

select date_sub('2021-05-30 21:00:40' ,interval 7 day)
-- 计算前7天,结果:2021-05-23 21:00:40

select date_sub('2021-05-30 21:00:40' ,interval 1 hour)
-- 计算前1个小时,结果:2021-05-30 20:00:40

  Oracle中timestamp类型的字段,相减,结果是多少天、多少小时,多少分钟,多少秒:

SELECT MIN_T, MAX_T, MAX_T - MIN_T 
FROM "T_TIMESTAMP"
-- 结果:2021-07-06 20:29:20.000000	2021-07-07 20:29:22.000000	+000000001 00:00:02.000000

  MySQL中,2个timestamp类型的值相减,如果想要知道相差多少天、多少秒,需要借助函数:

S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值