Oracle数据库的主要特点
支持多用户,大事务量的事务处理。
在保持数据安全性和完整性方面性能优越。
支持分布式数据处理,组成一个逻辑上统一的数据库。
具有可移植性,Oracle可以在windows,linux等多个操作系统平台上使用,SQL Server只能在windows上运行。
Oracle基本概念
1 它是磁盘上存储数据的集合,在物理上表现为数据文件,日志文件和控制文件,在逻辑上以表空间形式存在。
2 使用时,必须首先创建数据库,然后才能使用Oracle,可以在安装Oracle软件的同时创建数据库,也可以在安装后单独创建数据库。
3 全局数据库名是用于区分一个数据库的标识,在安装数据库,创建新数据库,创建控制文件,修改数据库结构,利用rman备份是都需要使用。
4 数据库实例就是通过内存共享运行状态的一组服务器后台进程。
5 一个表空间可以由多个数据文件组成,但一个数据文件只能属于一个表空间,与数据文件这种物理结构相比,表空间属于数据库的逻辑结构。
6 数据文件的扩展名是.dbf,是用于存储数据库数据的文件。
7 控制文件的扩展名是.ctl,是一个二进制文件,控制文件中存储的信息很多,包括数据文件和日志文件的名称和位置,控制文件是数据库启动及运行所必须的文件,当Oracle读写数据时,要根据控制文件的信息查找数据文件。
8 日志文件的扩展名是.log,它记录了数据的所有更改信息,并提供了一种数据恢复机制,日志文件是成组使用的,每个日志文件组可以有一个或多个日志文件,在工作过程中,多个日志文件组之间循环使用,当一个日志文件组写满后,会转向下一个日志文件组。
9 模式是数据库对象的集合,Oracle会为每一个数据库用户创建一个模式,此模式为当前用户所拥有和用户具有相同的名称。
Oracle常用的三个服务
OracleServiceSID服务是Oracle数据库服务,此服务是对应名为SID(系统标识符)的数据库实例创建的,其中SID是安装Oracle 11G时输入的数据库名称,该服务默认是自启动的。
OracleOraDb11g_home1TNSListener服务是监听服务,监听器监听并接收来自客户端应用程序的连接请求,该服务只有在数据库需要远程访问的时候才需要。
OracleDBConsoleSID服务是数据库控制台服务,EMC(企业管理控制台)的服务程序(SID随安装的数据库而不同)是采用浏览器方式打开的,用于使用Oracle企业管理器的程序。
课后经验
如果数据库安装在本地,并且使用自带的SQLPlus进行访问,只需要启动OracleServiceSID服务即可,并且使用SQLPlus连接时不能使用"@"。
这种连接被视为本地连接,Oracle中存在一个默认的数据库服务名,本地连接会自动连接该默认的数据库服务。
如果进入基于Web形式的企业管理(EM)控制平台,则必须要启动OracleDBConsoleSID服务。
更新会话
alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';
LOB数据类型
CLOB 能够存储大量字符数据。该数据类型可以存储单字节字符数据和多字节字符数据,主要用于存储非结构化的XML文档。
BLOB 可以存储较大的二进制对象。
BFILE 能够将二进制文件存储在数据库外部的操作系统文件中,存储一个定位器,指向位于服务器文件系统上的二进制文件,支持的文件最大为4GB。
NCLOB 数据类型用于存储大的NCHAR字符数据,同时支持固定宽度字符和可变宽度字符。大字符对象的大小不大于4GB。
伪列ROWID用途
能以最快的方式访问表中的一行
能显示表的行是如何存储的
可以作为表中行的唯一标识
示例:使用select语句查看ROWID值
select ROWID,ename from scott.emp where ename='smith';
伪列ROWNUM用途
示例:select emp.*,ROWNUM from scott.emp where ROWNUM<11;
SQL语言简介
DDL(数据定义语言):create,alter,truncate(截断),drop命令
DML(数据操纵语言):insert,select,delete,update命令
TCL(事务控制语言):commit,savepoint(保存点),rollback命令
DCL(数据控制语言):grant(授予),revoke(回收)命令
创建表示例
create table 表名称(
stuNo char(6) not null,
stuName varchar2(20) not null
);
不重复显示
select DISTINCT stuname from stuInfo;
逻辑运算符
用于组合多个比较运算符的结果以生成一个或真或假的结果,逻辑运算符包括and(与),or(或),not(非)。
集合运算符
UNION(并集) 返回两个查询选定的所有不重复的行。
UNION ALL(并集ALL) 合并两个查询选定的所有行,包括重复的行。
INTERSECT(交集) 返回两个查询都有的行。
MINUS(减集) 返回由第一个查询选定而未被第二个查询选定的行。
转换函数
TO_CHAR 转换成字符串类型。
TO_DATE 转换成日期格式。
TO_NUMBER 转换成数值类型。
示例:
1 select TO_CHAR(SYSDATE,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS');
2 select TO_DATE('2013-07-13','yyyy-mm-dd') from dual;
3 select sqrt(TO_NUMBER('100')) from dual;
分析函数
ROW_NUMBER 返回一个唯一的值,当遇到相同的数据时,排名安装记录集中记录的顺序依次递增。
DENSE_RANK 返回一个唯一的值,遇到相同的数据时,所有相同数据的排名都是一样的。
RANK 返回一个唯一的值,所有相同数据排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。
示例
select ename,deptno,sal,
RANK() OVER (PARTITION BY deptno ORDER BY sal DESC),
ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC),
DENSE_RANK () OVER (PARTITION BY deptno ORDER BY sal DESC)
from employee;
表空间分类
永久性表空间 一般保存表,视图,过程和索引等的数据,SYSTEM,SYSAUX,USERS,EXAMPLE表空间是默认安装的。
临时表空间 只用于保存系统中短期活动的数据。
撤销表空间 用来帮助回退未提交的事务数据,已提交了的数据在这里是不可以恢复的。
表空间的目的
对不同用户分配不同的表空间,对不同的模式对象分配不同的表空间,方便对用户数据的操作,对模式对象的管理。
可以将不同数据文件创建到不同的磁盘中,有利于管理磁盘空间,有利于提高I/O性能,有利于备份和恢复数据等。
创建表空间
create tablespace 表名
datafile 'D:\oracle\worktbs.dbf'
size 10M autoextend on;
删除表空间
drop tablespace 表名;
自定义用户管理
1 SYS用户是Oracle中的一个超级用户,所有数据字典和视图都存储在SYS模式,主要用来维护系统信息和管理实例,SYS用户只能以SYSOPER或SYSDBA角色登录系统。
2 System是Oracle中默认的系统管理员,他拥有DBA权限,不建议在System模式中创建用户表,System用户不能以SYSOPER和SYSDBA角色登录系统,只能以默认方式登录。
3 scott用户是一个示范用户,一般在数据库安装的时候创建。
创建用户
create user user
identified by password
default tablespace table 默认表空间
temporart tablespace table 临时表空间
删除用户
drop user table caseade; 使用caseade选项删除用户和用户模式对象。
系统预定义角色
1 connect 需要连接上数据库的用户,特别是那些不需要创建表的用户,通常授予该角色。
2 resource 更为可靠和正式的数据库用户可以授权该角色,可以创建表,触发器,过程等。
3 DBA 数据库管理员角色,拥有管理数据库的最高权限,一个具有DBA角色的用户可以撤销任何其他用户甚至其他DBA权限。
授权语法
grant connect,resource TO table;
撤销语法
revoke connect,resource TO table;
允许用户查看emp表中的记录
grant select on scott.emp TO table;
创建序列
create sequence 表
start with 10 第一个序列号
increment by 10 每次增长的间隔
maxvalue 2000 生成的最大值
nocycle; 序列在达到最大值,将不能再继续生成值
访问序列
nextval 创建序列后第一次使用NEXTVAL时,将返回该序列的初始值,以后再引用nextval时,将使用increment by 子句来增加序列值,并返回这个新值。
currval 返回序列的当前值,即最后一次引用nextval时返回的值。
插入数据
insert into table(toyid)values(seq.nextval,'twenty',25);
删除序列
drop sequence 序列;
同义词用途
1 简化SQL语句
2 隐藏对象的名称和所有者
3 为分布式数据库的远程对象提供了位置透明性
4 提供对对象的公共访问
私有同义词
当前模式下创建私有同义词,用户必须拥有create synonym系统权限,
要在其他用户模式下创建私有同义词,用户必须拥有create any synonym系统权限。
语法:
create or replace 替换该同义词 synonym 名称 for 创建同义词对象的名称;
删除同义词
drop synonym 名称;
索引分类
1 分区索引 单列或组合索引
2 B树索引 唯一或非唯一索引
3 正常或反向键索引 基于函数索引
4 位图索引
语法:
唯一索引:create unique index 名称 on 表(列);
反向键索引:create index 名称 on 表名(列) reverse;
位图索引:create bitmap index 名称 on 表(列);
大写函数索引:create index 名称 on 表(upper(列));
重建索引:alter index 名称 rebuild noreverse;
注:何时删除索引
1 应用程序不在需要索引。
2 执行批量加载前,大量加载数据前删除索引,加载后再重建索引有以下好处:提高加载性能,更有效的使用索引空间。
3 索引已坏。
何时重建索引
1 用户表被移动到新的表空间后,表上的索引不是自动转移,此时需将索引移到指定表空间。
2 索引中包含很多已删除的项,对表进行频繁删除,造成索引空间浪费,可以重建索引。
3 需将现有的正常索引转换成反向键索引。
分区表
create table table
(
字段 数据类型
)
partition by range(日期字段)
(
partition p1 values less than (to_date('2013-04-1','yyyy-mm-dd')),
partition p5 values less than(maxvalue)
);
查看第一季度的数据
select * from table partition(p1);
PL/SQL是结合了Oracle过程语言和结构化查询语言是一种扩展语言。
主要功能
1.PL/SQL具有编程语言的特点
2.可以采用过程性语言控制程序的结构
3.对程序中的错误进行自动处理
4.具有更好的可移植性
5.减少网络的交互,提高程序的性能
把原表的数据类型赋予他
declare
v_empno employee.empno%TYPE:=7788;
v_rec employee%ROWTYPE;
Begin
select *into v_rec from emp where
empno=v_empno;
DBMS_output.put_line(打印输出);
end;
条件控制
if<布尔表达式>then
SQL语句
end if;
case语句语法
case 条件表达式
when 表达式结果 then
语句段 1
end case;
Loop循环
Loop
执行语句
Exit when 条件语句
End Loop;
for循环计数器 in 下限 上限 Loop
执行语句;
End Loop;
while循环
while 表达式 Loop
执行语句
end Loop;
重新定义异常错误信息
raise_Application_error(编号,文本)
编号长度必须是20999到20000之间
消息长度可达2048字节
游标类型:静态 动态
游标
cursor 游标名称 return 行类型
is 查询语句
打开游标
open 名称;
提前游标
fetch 名称 into 变量名;
关闭游标
close 名称
使用显示游标删除更新
cursor 名称 is select * for update
for update 为更新查询,锁定选择行
Hibernate框架
Gavin King是Hibernate的创始人,EJB3.0专家委员会成员,JBoss核心成员之一。
Hibernate 优点
1.功能强大
2.支持许多面向对象的特性
3.可移植性强
4.Hibernate框架开源免费
瞬时状态转为持久状态
使用session的saveorupdate()保存对象后,该对象的状态为持久。
get(),load()获取对象,为持久对象
持久状态转为瞬时状态
执行session的delete()方法后,由原来的持久转为瞬时
游离转为持久状态
执行session的update(),游离转为持久
游离转为瞬时状态
执行session的delete()方法,游离转为瞬时
数组对象返回一个信息
Object[] obj=(Object[])session.createQuery(hql).uniqueResult();//返回一条信息
连接类型
内连接 inner join或 join
迫切内连接 inner join fetch或join fetch
左外连接 left outer join或left join
迫切左外连接 left outer join fetch或left join fetch
右外连接 right outer join 或right join
示例:from Dept inner join Dept.emps(内连接)
Struts2标签库
<%@taglib prefix="s" uri="/struts-tags"%>