暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

通过Oracle DB了解MySQL

Oracle数据库是业界的翘楚,各行各业拥有大量的Oracle DB的DBA,本文尝试通过将Oracle与MySQL数据库的架构、安全、模式对象、数据类型及数据存储进行对比,以方便熟悉Oracle数据库的人可以快速了解MySQL。

数据库架构

MySQL与Oracle架构上不同,Oracle数据库是一个多进程的架构,MySQL是一个多线程的架构。架构的不同导致两种数据库对服务器资源的开销存在在很大的差异。


数据安全

OracleMySQL也由数据管理。MySQL使用一表来跟踪用及其所有的权限MySQL使用些授户执行身份验证,授访问控制。

  • 数据身份验证

Oracle和大多数其他使用用名和密码对户进行身份验证的数据不同,MySQL使用location参数来户进行身份验证location参数通常是主机名,IP地址或通配符()。MySQL可以使用参数将用户对数据访问限制域中的特定主机。它根据接的不同主机,使用不同的密和权限。

MySQL的权限系是通过继承起作用的分。在授予的限将传递到所有,但是在置的相同限可能先。MySQL许用户按照以下权限范的降序授予五个不同的权限:

  • 全局

  • 每个主机

  • 数据库级

  • 特定表

  • 特定列(一个表中的一列)

数据中的每个都有一个对应的授表。当行权限检查时MySQL按照权限范的降序检查每个表,在授予的权限先于在授予的相同权限。

MySQL支持的权限分两种:管理权限和每个象权限。管理权限是影响整个服器并与MySQL功能相关的全局权限。些管理权限包括FILEPROCESSREPLICATIONSHUTDOWNSUPER权限。每个象的权限会影响数据库对象,例如表,列,索引和存储过程,并且可以在不同程度上行授予。

模式

模式包含表,视图,索引,用束,存储过程,触器和其他特定于数据象的定。大多数关系数据都使用相似的象。

  • 模式象的相似性

OracleMySQL模式象有多相似之下表显示了OracleMySQL的区

Oracle

MySQL

AFTER触发器

触发器

BEFORE触发器

触发器

检查约

检查约

列默认值

列默认值

数据库

数据库

索引

索引

不适用

PL  / SQL函数

存储程序

PL  / SQL程序

存储程序

角色

角色

模式

模式

顺序

列的AUTO_INCREMENT

快照

不适用

不适用

表空

表空间

临时

临时

发器每一行

发器每一行

唯一

唯一

视图

视图

 

  • 模式象名称

Oracle忽略象名称的大小写。Oracle模式象名称以大写形式存

OracleMySQL列名称,索引名称,存储过程名称,触器名称和列名在所有平台上都不区分大小写。但是,MySQL的数据名称和表名称的情况与Oracle的情况不同。MySQL的数据库对应于数据目中的目,而表对应于数据中的一个或多个文件。因此,数据和表名的区分大小写取决于操作系的大小写。意味着数据和表名在Windows上不区分大小写,但在大多数UNIX体上都区分大小写。但是,MySQL使用系统变lower_case_table_names来确定数据和表名如何存在磁

OracleMySQL许将保留字加上引号用作象名。但是,在MySQL中,一些保留字(例如DATETIMESTAMP)可以不使用引号。在Oracle中不允许这样做。

MySQLOracle标识符定有一些微的差异。在MySQL中,未加引号的标识符可以以数字开,并且引号的标识符可以使用双引号。但是,Oracle标识符均不允MySQL的引号字符是反引号(`)。如果置了SQL模式ANSI_QUOTES则还可以使用双引号将标识符引起来。Oracle标识符用双引号引起来。

另外需要注意的是,MySQL里面没有模式所有者的概念,即使是删除了用户,该用户创建的对象也不会被删除。

  • 设计注意事

  • 字符数据

MySQLOracle在支持的字符型以及存索字符的方式之存在一些差异。

于小于65,535的字符型,MySQL支持CHARVARCHARCHAR型的最大255个字VARCHAR型的最大65,535Oracle支持四种字符型(CHARNCHARNVARCHAR2VARCHAR2)。可以所有Oracle字符型声明的最小1个字CHARNCHAR的最大大小2,000NVARCHAR2VARCHAR2的最大大小4,000

储时MySQLCHAR将在右用空格填充到指定的度,而在将尾随空格除(SQL模式PAD_CHAR_TO_FULL_LENGTH除外)。另一方面,VARCHAR是使用指定的确切字符数存的。如果小于列度,Oracle会将CHARNCHAR用空格填充,直到该值小于列度,并且在不修剪尾随空白。NVARCHAR2VARVHAR2数据型的列,Oracle将存索指定的,包括尾随空格。

如果字符型列分配的指定的度,MySQL将截断该值,并产生警告,如果置了STRICT SQL模式,会生成错误。如果分配字符型列的指定的度,Oracle会报错

MySQL所有字符型(CHARVARCHARTEXT)的列都有列的字符集和排序规则。如果未在列定中明确定字符集或排序规则,它将使用表的字符集或排序规则。如果未指定表的字符集或排序规则,则选择数据字符或排序规则OracleCHARVARCHAR2字符集由数据字符集定,而NCHARNVARCHAR字符集由各个国家字符集定

MySQL中声明CHARVARCHAR,默度是字符而不是字Oracle中的默度,CHARVARCHAR2型是字NCHARNVARCHAR2型是字符。

  • 列的默认值

MySQLOracle理列的默认值为NOT NULL方式不同

MySQL将数据插入表中确定列默认值认值是列数据型的式默认值。但是,如果启用了STRICT模式,MySQL会生成错误,回INSERT句。

Oracle在将数据插入表中,必须为所有NOT NULL的列指定数据。Oracle不会具有NOT NULL束的列生成默认值

  • 临时

MySQL中,临时表是一个数据库对象,仅对当前用,并且在用话结会自动删除。

Oracle对临时表的定MySQL稍有不同,因一旦临时表,表将一直存在直到被除,并且具有适当权限的所有会都是可的。但是,临时表中的数据仅对将数据插入表中的用,并且在事或用的整个生命周期内都可以保留数据。

数据

  • 数据型映射

MySQL数据

Oracle数据

BIGINT

NUMBER(19, 0)

BIT

RAW

BLOB

BLOBRAW

CHAR

CHAR

DATE

DATE

DATETIME

DATE

DECIMAL

FLOAT(24)

DOUBLE

FLOAT(24)

DOUBLE  PRECISION

FLOAT(24)

ENUM

VARCHAR2

FLOAT

FLOAT

INT

NUMBER(10, 0)

INTEGER

NUMBER(10, 0)

LONGBLOB

BLOBRAW

LONGTEXT

CLOBRAW

MEDIUMBLOB

BLOBRAW

MEDIUMINT

NUMBER(7, 0)

MEDIUMTEXT

CLOBRAW

NUMERIC

NUMBER

REAL

FLOAT(24)

SET

VARCHAR2

SMALLINT

NUMBER(5, 0)

TEXT

VARCHAR2CLOB

TIME

DATE

TIMESTAMP

DATE

TINYBLOB

RAW

TINYINT

NUMBER(3, 0)

TINYTEXT

VARCHAR2

VARCHAR

VARCHAR2CLOB

YEAR

NUMBER

 

  • 数据型比 

下表比MySQLOracle数字型。

MySQL

大小

Oracle

BIGINT

8

NUMBER(19,0)

BIT

(M+7)/8

RAW

DECIMAL(M,D)

D > 0时M+2D = 0时M+1(M < D时D+2)

FLOAT(24)BINARY_FLOAT

DOUBLE

8

FLOAT(24)BINARY_FLOATBINARY_DOUBLE

DOUBLE  PRECION

8

FLOAT(24)BINARY_DOUBLE

FLOAT(25<=X  <=53)

8

FLOAT(24)BINARY_FLOAT

FLOAT(X<=24)

4

FLOATBINARY_FLOAT

INT

4

NUMBER(10,0)

INTEGER

4

NUMBER(10,0)

MEDIUMINT

3

NUMBER(7,0)

NUMERIC

D > 0时M+2D = 0时M+1(M < D时D+2)

NUMBER

REAL

8

FLOAT(24)BINARY_FLOAT

SMALLINT

2

NUMBER(5,0)

TINYINT

1

NUMBER(3,0)

 

  • 日期和时间

下表比MySQLOracle日期时间型。

MySQL

大小

Oracle

DATE

3

DATE

DATETIME

8

DATE

TIMESTAMP

4

DATE

TIME

3

DATE

YEAR

1

NUMBER

 

  • 字符串

下表比MySQLOracle字符串型。

 

注意事

M表示最大示尺寸。最大有效示尺寸255L是浮点型,表示小数点后的位数。

 

MySQL

大小

Oracle

BLOB

L + 2(L<2^16)

RAWBLOB

CHAR(m)

M(1<=M<=255)

CHAR

ENUM (VALUE1,  VALUE2, ...)

对应ENUM值的数量(上限65535)1或者2


LONGBLOB

L + 4(L < 2 ^ 32)

RAWBLOB

LONGTEXT

L + 4(L < 2 ^ 32)

RAWCLOB

MEDIUMBLOB

L + 3(L < 2^ 24)

RAWBLOB

MEDIUMTEXT

L + 3(L < 2^ 24)

RAWCLOB

SET (VALUE1,  VALUE2, ...)

对应成员的数量(上限64),1,2,3,4或者8


TEXT

L + 2(L<2^16)

VARCHAR2CLOB

TINYBLOB

L + 4(L <2 ^8)

RAWBLOB

TINYTEXT

L + 4(L <2 ^8)

VARCHAR2

VARCHAR(m)

MySQL 5.0.3之前L+1(L<=M0<=M<=255)(MySQL  5.0.3之后0 <= M  <= 65535最大有效字节65,532)

VARCHAR2CLOB

 

数据存概念

数据存MySQL与几乎所有数据(包括Oracle)不同的方面。在MySQL中,数据库对应于服器数据目中的目。数据中的表对应于数据中的一个或多个文件,具体取决于表所使用的存引擎。

数据可以包含来自不同存引擎的表。存引擎负责索表数据。

MySQL提供了多种存引擎(以前称型),可以足各种境的不同要求。

MySQL支持的存引擎

存引擎

内容描述

MyISAM

的非事性存引擎,提供全文索引并且可移植。

MERGE

一种非事性存引擎,可以使用一MyISAM表,些表的列和索引信息相同。

MEMORY(HEAP)

一种非事性存引擎,用于将数据存在内存中。

BDB(Berkeley DB)

第一个事务安全的存引擎。

InnoDB

一个事安全的存引擎,旨在在理大量数据最大化性能。提供行级锁定。MySQL5.5之后的默认存储引擎。

FEDERATED

用于访问远程数据而不是本地表中的数据。

ARCHIVE

可以在很小的空内存大量未索引的数据。

CSV

使用逗号分隔的格式将数据存在文本文件中。

BLACKHOLE

一种似于黑洞的存引擎,它接受数据但不存它。

MySQL存储引擎的职能包括保管数据、索引、使用内存 (数据缓存、缓冲)事务处理(ACID、XA、MVCC、隔离级别)和并发性(锁、排他控制)。

Oracle数据由一个或多个表空间组成。表空提供逻辑,并将数据与保存数据的物理磁盘链接。表空是从一个或多个数据文件建的。数据文件是文件系中的文件或原始设备指定的磁区域。可以通添加数据文件来大表空

Oracle数据由一个或多个存Oracle表的SYSTEM表空间组成。也可以使用用的表空间进行配置。表空是数据库对象的逻辑位置。例如,用户可以指定在表空中的哪个位置建特定的表或索引。


希望以上内容,能够帮助熟悉Oracle数据库的人快速了解MySQL。

感谢关注“MySQL解决方案工程师”


 


最后修改时间:2020-03-09 14:57:50
文章转载自MySQL解决方案工程师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论