Mysql和oracle数据库分析.docx

上传人:b****2 文档编号:733872 上传时间:2023-04-29 格式:DOCX 页数:33 大小:27.94KB
下载 相关 举报
Mysql和oracle数据库分析.docx_第1页
第1页 / 共33页
Mysql和oracle数据库分析.docx_第2页
第2页 / 共33页
Mysql和oracle数据库分析.docx_第3页
第3页 / 共33页
Mysql和oracle数据库分析.docx_第4页
第4页 / 共33页
Mysql和oracle数据库分析.docx_第5页
第5页 / 共33页
Mysql和oracle数据库分析.docx_第6页
第6页 / 共33页
Mysql和oracle数据库分析.docx_第7页
第7页 / 共33页
Mysql和oracle数据库分析.docx_第8页
第8页 / 共33页
Mysql和oracle数据库分析.docx_第9页
第9页 / 共33页
Mysql和oracle数据库分析.docx_第10页
第10页 / 共33页
Mysql和oracle数据库分析.docx_第11页
第11页 / 共33页
Mysql和oracle数据库分析.docx_第12页
第12页 / 共33页
Mysql和oracle数据库分析.docx_第13页
第13页 / 共33页
Mysql和oracle数据库分析.docx_第14页
第14页 / 共33页
Mysql和oracle数据库分析.docx_第15页
第15页 / 共33页
Mysql和oracle数据库分析.docx_第16页
第16页 / 共33页
Mysql和oracle数据库分析.docx_第17页
第17页 / 共33页
Mysql和oracle数据库分析.docx_第18页
第18页 / 共33页
Mysql和oracle数据库分析.docx_第19页
第19页 / 共33页
Mysql和oracle数据库分析.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Mysql和oracle数据库分析.docx

《Mysql和oracle数据库分析.docx》由会员分享,可在线阅读,更多相关《Mysql和oracle数据库分析.docx(33页珍藏版)》请在冰点文库上搜索。

Mysql和oracle数据库分析.docx

Mysql和oracle数据库分析

数据库分析

1.MySQL

  MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQLAB开发、发布和支持。

MySQLAB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。

MySQL是MySQLAB的注册商标。

  MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。

MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去。

  与其他数据库管理系统相比,MySQL具有以下优势:

  

(1)MySQL是一个关系数据库管理系统。

  

(2)MySQL是开源的。

  (3)MySQL服务器是一个快速的、可靠的和易于使用的数据库服务器。

  (4)MySQL服务器工作在客户/服务器或嵌入系统中。

  (5)有大量的MySQL软件可以使用。

2.Oracle

  提起数据库,第一个想到的公司,一般都会是Oracle(甲骨文)。

该公司成立于1977年,最初是一家专门开发数据库的公司。

Oracle在数据库领域一直处于领先地位。

1984年,首先将关系数据库转到了桌面计算机上。

然后,Oracle5率先推出了分布式数据库、客户/服务器结构等崭新的概念。

Oracle6首创行锁定模式以及对称多处理计算机的支持……最新的Oracle8主要增加了对象技术,成为关系—对象数据库系统。

目前,Oracle产品覆盖了大、中、小型机等几十种机型,Oracle数据库成为世界上使用最广泛的关系数据系统之一。

  Oracle数据库产品具有以下优良特性。

  

(1)兼容性

  Oracle产品采用标准SQL,并经过美国国家标准技术所(NIST)测试。

与IBMSQL/DS、DB2、INGRES、IDMS/R等兼容。

  

(2)可移植性

  Oracle的产品可运行于很宽范围的硬件与操作系统平台上。

可以安装在70种以上不同的大、中、小型机上;可在VMS、DOS、UNIX、Windows等多种操作系统下工作。

  (3)可联结性

  Oracle能与多种通讯网络相连,支持各种协议(TCP/IP、DECnet、LU6.2等)。

  (4)高生产率

  Oracle产品提供了多种开发工具,能极大地方便用户进行进一步的开发。

  (5)开放性

  Oracle良好的兼容性、可移植性、可连接性和高生产率使OracleRDBMS具有良好的开放性。

相同点

1.都是关系型数据库管理系统

2.目前最流行的数据库

不同点

优点

a.mysql的优点是开源免费、简单易用、稳定可靠、易于扩展都是非常不错的。

实际上,用MySQL支撑的google的数据库、Facebook的数据库、中移动飞信的数据库够大了吧,MySQL还是完成能够支撑一些大规模的应用的,尤其在互联网行业,MySQL的复制功能可以很方便的实现读写分离后的水平扩展

b.oracle的优点是有甲骨文公司强大的技术后盾,功能丰富和完善、安全、性能优异、人性化

缺点

a.mysql的缺点就是相对功能少,面向的对象是一般的小型网站或者系统,大型数据库很少用mysql;

b.oracle的缺点是对硬件的要求十分高,对管理人员的技术要求高。

基本上是这样了。

其他

a.MySQL是用C++; Oracle系统核心应该是用C写,从Oracle9i开始,Oracle正式采用java做为主要程序开发语言,很多Oracle客户端应用程序都将采用java来编写.

1.Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。

2.Oracle支持大并发,大访问量,是OLTP最好的工具。

3.安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。

1.组函数用法规则

mysql中组函数在select语句中可以随意使用,但在oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是groupby子句中的列否则报错

eg:

selectname,count(money)fromuser;这个放在mysql中没有问题在oracle中就有问题了。

2.自动增长的数据类型处理

MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。

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

CREATESEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENTBY1STARTWITH1MAXVALUE99999CYCLENOCACHE;

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

INSERT语句插入这个字段值为:

序列号的名称.NEXTVAL

3.单引号的处理

MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。

在插入和修改字符串前必须做单引号的替换:

把所有出现的一个单引号替换成两个单引号。

4.翻页的SQL语句的处理

MYSQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;PHP里还可以用SEEK定位到结果集的位置。

ORACLE处理翻页的SQL语句就比较繁琐了。

每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80。

以下是经过分析后较好的两种ORACLE翻页SQL语句(ID是唯一关键字的字段名):

语句一:

SELECTID,[FIELD_NAME,...]FROMTABLE_NAMEWHEREIDIN(SELECTIDFROM(SELECTROWNUMASNUMROW,IDFROMTABLE_NAMEWHERE条件1ORDERBY条件2)WHERENUMROW>80ANDNUMROW<100)ORDERBY条件3;

语句二:

SELECT*FROM((SELECTROWNUMASNUMROW,c.*from(select[FIELD_NAME,...]FROMTABLE_NAMEWHERE条件1ORDERBY条件2)c)WHERENUMROW>80ANDNUMROW<100)ORDERBY条件3;

5.长字符串的处理

长字符串的处理ORACLE也有它特殊的地方。

INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。

插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。

6.日期字段的处理

MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE,精确到秒,或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)年-月-日24小时:

分钟:

秒的格式YYYY-MM-DDHH24:

MI:

SSTO_DATE()还有很多种日期格式,可以参看ORACLEDOC.日期型字段转换成字符串函数TO_CHAR(‘2001-08-01’,’YYYY-MM-DDHH24:

MI:

SS’)

日期字段的数学运算公式有很大的不同。

MYSQL找到离当前时间7天用DATE_FIELD_NAME>SUBDATE(NOW(),INTERVAL7DAY)ORACLE找到离当前时间7天用DATE_FIELD_NAME>SYSDATE-7;

MYSQL中插入当前时间的几个函数是:

NOW()函数以`'YYYY-MM-DDHH:

MM:

SS'返回当前的日期时间,可以直接存到DATETIME字段中。

CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。

CURTIME()以’HH:

MM:

SS’的格式返回当前的时间,可以直接存到TIME字段中。

例:

insertintotablename(fieldname)values(now())

而oracle中当前时间是sysdate

7.空字符的处理

MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。

按MYSQL的NOTNULL来定义ORACLE表结构,导数据的时候会产生错误。

因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。

8.字符串的模糊比较

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

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

mysql与oracle表字段定义比较

说明

mysql

oracle

VARCHAR

变长字符串

VARCHAR[0-65535]

定义长度默认按字符长度计算,如果是GBK编码的汉字将占用2个字节

VARCHAR2[1-4000]

VARCHAR是VARCHAR2的同义词

定义默认按字节长度计算

TINYINT

SMALLINT

MEDIUMINT

INT

BIGINT

整数

TINYINT(-128-127)

SMALLINT(-32768-32767)

MEDIUMINT(-8388608-8388607)

INT(-2147483648-2147483647)

BIGINT(-9223372036854775808-9223372036854775807)

无专用类型,

TINYINT可以用NUMBER(3,0)代替

SMALLINT可以用NUMBER(5,0)代替

MEDUIMINT可以用NUMBER(7,0)代替

INT可以用NUMBER(10,0)代替

BIGINT可以用NUMBER(20,0)代替

ORACLE中有SMALLINT,INT,INTEGER类型,不过这是NUMBER(38,0)的同义词

DECIMAL

NUMERIC

数值类型

DECIMAL[1-65[,0-30]]

NUMERIC是DECIMAL的同义词

NUMBER 可表示数范围:

1*10^-130至1*10^126

NUMBER([1-38][,-84-127])

DECIMAL、NUMERIC、DEC是NUMBER的同义词

FLOAT

浮点型

FLOAT(D,M)

oracle10g开始增加BINARY_FLOAT类型

10g以前无专用类型,可以用NUMBER代替

ORACLE中有FLOAT和REAL类型,不过这是NUMBER的同义词

DOUBLE

双精度浮点型

DOUBLE(D,M)

oracle10g开始增加BINARY_DOUBLE类型

10g以前无专用类型,可以用NUMBER代替

ORACLE中有DOUBLEPRECISION类型,不过这是NUMBER的同义词

BIT

位类型

BIT(1-64)

DATETIME

日期类型

DATE,3字节存储,只存储日期,没有时间,支持范围是[1000-01-01]至[9999-12-31]

TIME,3字节存储,只存储时间,没有日期,支持范围是[-838:

59:

59]至[838:

59:

59]

DATETIME,占8字节存储,可表示日期和时间,支持范围是[1000-01-0100:

00:

00]至[9999-12-3123:

59:

59]

TIMESTAMP,占4字节存储,可表示日期和时间,范围是[1970-01-0100:

00:

00]至[2038-01-1903:

14:

07]

DATE类型

7字节存储,可表示日期和时间,支持范围是[-4712-01-0100:

00:

00]至[9999-12-3123:

59:

59]

TIMESTAMP

高精度日期

5.6.4以前不支持小数秒精度

5.6.4开始TIME,DATETIME,TIMESTAMP支持,最多可以6位小数秒,也就是微秒级别

TIMESTAMP[0-9]

占用空间7-11个字节,当小数秒精度为0时与DATE类型相同,小数秒最高精度可达9位,也就是纳精度

YEAR

年份

YEAR,1字节存储,只存储年份,支持范围是[1901]至[2155]

无对应类型,可以用NUMBER(3,0)代替

CHAR

定长字符串

CHAR[0-255],定义长度默认按字符长度计算,最大保存255字符

CHAR[1-2000]

定义默认按字节长度计算

UNSIGNED

无符号说明

支持,用于数值类型

不支持

CLOB

大字符串,一般用于存储文本文件或超大描述及备注类信息

TINYTEXT 最大支持255个字节

TEXT最大支持65535个字节

MEDIUMTEXT最大支持16MB个字节

LONGTEXT最大支持4GB字节

字段不支持默认值

支持(CLOB)

oracle10g以前最大支持4GB个字节

oracle10g开始最大支持4GB个数据块,数据块大小为2KB-32KB

oracle还有一个LONG类型,是早期的存储大字符串类型,最大支持2GB字节,现已不推荐使用

BLOB

大二进制对象,一般用于存储文件或图片数据

TINYBLOB 最大支持255个字节

BLOB最大支持65535个字节

MEDIUMBLOB最大支持16MB个字节

LONGBLOB最大支持4GB字节

字段不支持默认值

支持(BLOB)

oracle10g以前最大支持4GB个字节

oracle10g开始最大支持4G个数据块,数据块大小为2KB-32KB

oracle还有一个LONGRAW类型,是早期的存储二进制类型,最大支持2GB字节,现已不推荐使用

BINARY

二进制信息

BINARY(0-255),定长

VARBINARY(0-65535),变长

RAW(1-2000)

ENUM

枚举类型

ENUM(v1,v2,v3,...),最多65535个元素

不支持

SET

集合类型

SET(v1,v2,v3,...),最多64个元素

不支持

NATIONALCHAR

国际化字符集类型,较少使用

无,MYSQL可以对每个字段指定字符编码

支持

NCHAR(1-2000)

NVARCHAR(1-4000)

NCLOB

BFILE

外部文件指针类型

不支持

支持

文件大小最大4GB

文件名称最长255字符

自定义数据类型

不支持

支持

XML类型

不支持

支持

自增类型

自动增长类型

支持

使用简单

不支持

一般使用SEQUENCE解决,用法与自增类型差别较大,使用较复杂,但能实现非常灵活的应用,包括字符自增主键、全局主键等等

字段默认值表达式

不支持函数和表达式

TEXT和BLOB字段类型不支持默认值

支持函数和表达式

字段顺序修改

支持,例如,把emp表的id字段顺序放在name字段后面:

altertableempmodifycolumnidvarchar(20)aftername;

不支持,只能重建表或字段

虚拟字段

虚拟字段是一个逻辑字段定义,其结果值通常是一个表达式,并在表中存储物理值,不占用空间,主要用于简化查询逻辑。

比如有一个商品销售表有单价和数量两个字段,那可以建一个虚拟字段金额,其表达式=单价*数量

不支持

11g支持,例:

createtablesales

 id      number,

 quantitynumber,

 price   number,

 amount  GENERATEDalwaysas(quantity*price)virtual

);

表字段数限制

INNODB 最大1000个字段

所有字段总定义长度不能超过65535字节

所有固定长度字段的总长度不超过半个数据块大小(数据块大小一般为16K)

最大1000个字段

mysql与oracle函数比较

编号

类别

ORACLE

MYSQL

注释

1

 

数字函数

round(1.23456,4)

round(1.23456,4)

一样:

ORACLE:

selectround(1.23456,4)valuefromdual

MYSQL:

selectround(1.23456,4)value

2

abs(-1)

abs(-1)

功能:

将当前数据取绝对值

用法:

oracle和mysql用法一样

mysql:

selectabs(-1)value

oracle:

selectabs(-1)valuefromdual

3

ceil(-1.001))

ceiling(-1.001)

功能:

返回不小于X的最小整数

用法:

mysqls:

selectceiling(-1.001)value

oracle:

selectceil(-1.001)valuefromdual

4

floor(-1.001)

floor(-1.001)

功能:

返回不大于X的最大整数值

用法:

mysql:

selectfloor(-1.001)value

oracle:

selectfloor(-1.001)valuefromdual

5

Max(expr)/Min(expr)

Max(expr)/Min(expr)

功能:

返回expr的最小或最大值。

MIN()和MAX()可以接受一个字符串参数;在这

种情况下,它们将返回最小或最大的字符串传下。

用法:

ROACLE:

selectmax(user_int_key)fromsd_usr;

MYSQL:

selectmax(user_int_key)fromsd_usr;

6

 

字符串函数

ascii(str)

ascii(str)

功能:

返回字符串str最左边的那个字符的ASCII码值。

如果str是一个空字符串,

那么返回值为0。

如果str是一个NULL,返回值也是NULL.

用法:

mysql:

selectascii('a')value

oracle:

selectascii('a')valuefromdual

7

CHAR(N,...)

CHAR(N,...)

功能:

CHAR()以整数类型解释参数,返回这个整数所代表的ASCII码值给出的字符

组成的字符串。

NULL值将被忽略.

用法:

mysql:

selectchar(97)value

oracle:

selectchr(97)valuefromdual

8

REPLACE(str,from_str,to_str)

REPLACE(str,from_str,to_str)

功能:

在字符串str中所有出现的字符串from_str均被to_str替换,然后返回这个字符串.

用法:

mysql:

SELECTREPLACE('abcdef','bcd','ijklmn')value

oracle:

SELECTReplace('abcdef','bcd','ijklmn')valuefromdual

9

INSTR('sdsq','s',2)

INSTR('sdsq','s')

参数个数不同

ORACLE:

selectINSTR('sdsq','s',2)valuefromdual(要求从位置2开始)

MYSQL:

selectINSTR('sdsq','s')value(从默认的位置1开始)

10

SUBSTR('abcd',2,2)

substring('abcd',2,2)

函数名称不同:

ORACLE:

selectsubstr('abcd',2,2)valuefromdual

MYSQL:

selectsubstring('abcd',2,2)value

11

instr(‘abcdefg’,’ab’)

locate(‘ab’,’abcdefg’)

函数名称不同:

instr->locate(注意:

locate的子串和总串的位置要互换)

ORACLE:

SELECTinstr('abcdefg','ab')VALUEFROMDUAL

MYSQL:

SELECTlocate('ab','abcdefg')VALUE

12

length(str)

char_length()

函数名称不同:

ORACEL:

SELECTlength('AAAASDF')VALUEFROMDUAL

MYSQL:

SELECTchar_length('AAAASDF')VALUE

13

REPLACE('abcdef','bcd','ijklmn')

REPLACE('abcdef','bcd','ijklmn')

一样:

ORACLE:

SELECTREPLACE('abcdef','bcd','ijklmn')valuefromdual

MYSQL:

SELECTREPLACE('abcdef','bcd','ijklmn')value

14

LPAD('abcd',14,'0')

LPAD('abcd',14,'0')

一样:

ORACLE:

selectLPAD('abcd',14,'0')valuefromdual

MYSQL:

selectLPAD('abcd',14,'0')valuefromdual

15

UPPER(iv_user_id)

UPPER(iv_user_id)

一样:

ORACLE:

selectUPPER(user_id)fromsd_usr;

MYSQL:

selectUPPER(user_id)fromsd_usr;

16

LOWER(iv_user_id)

LOWER(iv_user_id)

一样:

ORACLE:

selectLOWER(user_id)fromsd_usr;

MYSQL:

selectLOWER(user_id)fromsd_usr;

17

 

控制流函数

nvl(u.email_address,10)

IFNULL(u.email_address,10)

ISNULL(u.email_address)

函数名称不同(根据不同的作用进行选择):

ORACLE:

selectu.email_address,nvl(u.email_address,10)valuefromsd_usru(如果u.email_address=NULl,就在DB中用10替换其值)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2