Oracle数据库和Mysql数据库区别
- Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。
- Oracle支持大并发,大访问量,是OLTP(On-Line Transaction Processing,联机事务处理过程)最好的工具。
- 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。
- Oracle也Mysql操作上的一些区别:
①主键
Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;
Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。
②单引号的处理
MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
③翻页的SQL语句的处理
MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,
并且只能用ROWNUM<100, 不能用ROWNUM>80
④ 长字符串的处理
长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,
方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。
⑤空字符的处理
MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。
因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。
⑥字符串的模糊比较
MYSQL里用 字段名 like ‘%字符串%’,ORACLE里也可以用 字段名 like ‘%字符串%’ 但这种方法不能使用索引, 速度不快。
⑦Oracle实现了ANSII SQL中大部分功能,如,事务的隔离级别、传播特性等而Mysql在这方面还是比较的弱
附加:
①orcale和mysql在分页处理上也是不一样的,mysql分页 limit可直接分页面,而orcale需要借助子查询进行分页
select * from (select t.*, rownum rn from (select * from BASIC order by update_date asc) t
where rownum <= #{param1} * #{param2}) where rn > (#{param1}-1) * #{param2}
②另外mysql和orcale在同时添加多条语句的上是有差异的,
mysql 可以直接使用foreach
insert into tbl_employee(last_name,email,gender,d_id)
values(#{emp.lastName},#{emp.email},#{emp.gender},#{emp.dept.id})
Oracle查询方法
- % :零或者多个字符,使用%有三种情况 。
字段 like ‘%关键字%’字段包含”关键字”的记录
字段 like ‘关键字%’字段以”关键字”开始的记录
字段 like ‘%关键字’字段以”关键字”结束的记录
//查找含有"三"的username
SELECT * FROM user WHERE uname LIKE ‘%三%’
//查找以"三"结尾的username
SELECT * FROM user WHERE uname LIKE ‘%三’
//查找既含有"三"又含有"猫"的username
SELECT * FROM user
WHERE uname LIKE ‘%三%’ AND uname LIKE ‘%猫%’
- _: 单一任何字符(下划线)常用来限制表达式的字符长度语句。
//查找3个字符,且中间字符为"三"的username
SELECT * FROM user WHERE uname LIKE ‘_三_’
- []:在某一范围内的字符,表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
//查找含有张、李、王姓,名为三的username,并不是"张李王三"
SELECT * FROM user WHERE uname LIKE ‘[张李王]三’
//查找名为老0、1、2、...的username
SELECT * FROM user WHERE uname LIKE ‘老[1-9]’
-
[^]: 不在某范围内的字符,用法与[ ]相反。
-
instr函数也有三种情况:
instr(字段,’关键字’)>0相当于 字段like ‘%关键字%’
instr(字段,’关键字’)=1相当于 字段like ‘关键字%’
instr(字段,’关键字’)=0相当于 字段not like ‘%关键字%’
SELECT * FROM [user] WHEREinstr(uname ,’三’)>0
用法参照上面的Like 即可
特殊用法:
select id, namefrom user where instr(‘101914, 104703’, id) > 0;
它等价于
select id, namefrom user where id = 101914 or id = 104703;
OLTP(联机事务处理过程)
简介
- On-Line Transaction Procesing,联机事务处理过程,也称面向交易的处理过程,其最基本特征是前台接收的用户数据可以立即传送到计算机中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。
概念
- 联机事务处理系统是一种以事务元作为数据处理的单位、人机交互的计算机应用系统。它能对数据进行即时更新或其他操作,系统内的数据总是保持在最新状态。用户可将一组保持数据一致性的操作序列指定为一个事务元,通过终端、个人计算机或其他设备输入事务元,经系统处理后返回结果,应用于飞机订票、银行出纳、股票交易、超市销售、饭店前后管理等。
- 这样做的最大优点是可以即时地处理输入的数据,及时地回答。也称为实时系统(Real time System)。衡量联机事务处理结果的一个重要指标是系统性能,具体体现为实时请求-响应时间(Response Time),即用户在终端上输入数据之后,到计算机对这个请求给出答复所需要的时间。OLTP是由前台、应用、数据库共同完成的,处理快慢以及处理程度取决于数据库引擎、服务器、应用引擎。
- OLTP数据库旨在使事务应用程序仅写入所需的数据,以便尽快处理单个事务。
特征
- 支持大量并发用户定期添加和修改数据。
- 反映随时变化的单位状态,但不保存其历史记录。
- 包含大量数据,其中包括用于验证事务的大量数据。
- 可以进行优化以对事务活动做出响应。
- 提供用于支持单位日常运营的技术基础结构。
- 个别事务能够很快地完成,并且只需访问相对较少的数据。
- 实时性要求高。
- 交易一般是确定的,所以OLTP是对确定性的数据进行存取。(比如存取款都有一个特定的金额)
- 并发性要求高并且严格的要求事务的完整、安全性。(比如这种情况:有可能你和你的家人同时在不同的银行取同一个帐号的款)。
OLAP(联机分析处理过程)
概念
- 联机分析处理OLAP,是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。它具有FASMI(Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析的特征。
体系结构
- 数据仓库与OLAP的关系是互补的,现代OLAP系统一般以数据仓库作为基础,即从数据仓库中抽取详细数据的一个子集并经过必要的聚集存储到OLAP存储器中供前端分析工具读取。OLAP系统按照其存储器的数据存储格式可以分为关系OLAP(RelationalOLAP,简称ROLAP)、多维OLAP(MultidimensionalOLAP,简称MOLAP)和混合型OLAP(HybridOLAP,简称HOLAP)三种类型。
数据仓库包括三部分:
1、数据层:实现对企业操作数据的抽取、转换、清洗和汇总,形成信息数据,并存储在企业级的中心信息数据库中。
2、应用层:通过联机分析处理,甚至是数据挖掘等应用处理,实现对信息数据的分析。
3、表现层:通过前台分析工具,将查询报表、统计分析、多维联机分析和数据发掘的结论展现在用户面前。
特点
- 联机分析处理的主要特点,是直接仿照用户的多角度思考模式,预先为用户组建多维的数据模型,在这里,维指的是用户的分析角度。例如对销售数据的分析,时间周期是一个维度,产品类别、分销渠道、地理分布、客户群类也分别是一个维度。一旦多维数据模型建立完成,用户可以快速地从各个分析角度获取数据,也能动态的在各个角度之间切换或者进行多角度综合分析,具有极大的分析灵活性。这也是联机分析处理被广泛关注的根本原因,它从设计理念和真正实现上都与旧有的管理信息系统有着本质的区别。
OLTP和OLAP区别