一、视图(view)
1.什么是视图?
可以通过创建表的视图来表现数据的逻辑子集或数据的组合。视图是基于表或另一个视 图的逻辑表,一个视图并不包含它自己的数据,它象一个窗口,通过该窗口可以查看或改变 表中的数据。视图基于其上的表称为基表。
2.视图的作用:
(1)视图限制数据的访问,因为视图能够选择性的显示表中的列。
(2)视图可以用来构成简单的查询以取回复杂查询的结果。例如,视图能用于从多表中查 询信息,而用户不必知道怎样写连接语句。
(3)视图对特别的用户和应用程序提供数据独立性,一个视图可以从几个表中取回数据。
3.视图的类型:
(1)简单视图:
1) 数据仅来自一个表 ;
2)不包含函数或数据分组;
3)能通过视图执行 DML 操作。
简单视图语法:
4)使用列别名创建视图:
如果在创建视图的查询语句中含有列别名,那么列别名将作为视图的列名。
5)从视图中取回数据;
(2)复杂视图:
1) 数据来自多个表;
2)包含函数或数据分组;
3)不允许通过视图进行 DML 操作。
创建复杂视图语法:
(3)定义视图时指定列名:
4.视图中 DML 操作的执行规则:
(1)视图中包含下面的部分就不能修改数据:
组函数;GROUPBY 子句 ;DISTINCT 关键字;用表达式定义的列。
(2)创建只读视图:
不允许执行DML操作,使用whith read only;
5.内建视图:
(1)什么是内建视图?
1)内建视图是一个带有别名 (或相关名) 的可以在 SQL 语句中使用的子查询;
2)一个主查询的在 FROM 子句中指定的子查询就是一个内建视图;
3)内建视图由位于 FROM 子句中命名了别名的子查询创建。该子查询定义一 个可以在主查询中引用数据源。
6.Top-N分析:
(1)什么是“Top-N”分析?
1)使用一个带有下面描述的元素的一致的嵌套查询结构;
2)子查询或者内建视图产生数据的排序列表,该子查询或者内建视图包含 ORDERBY 子 句来确保排序以想要的顺序排列。为了取回最大值,需要用 DESC 参数。
3)在最后的结果集中用外查询限制行数。外查询包括下面的组成部分: −ROWNUM 伪列,它为从子查询返回的每一行指定一个从 1 开始的连续的值 − 一个 WHERE 子句,它指定被返回的 n 行,外 WHERE 子句必须用一个<或 者<=操作。
6.Oracle的分页查询:
(1)什么是分页查询?
“分页查询”,也就是说不要一次性查询所有的数据,每次只查询一部分数 据。这样分批次地进行处理,可以呈现出很好的用户体验,对服务器资源的消耗也不大。
(2)实现思路:
在内建视图中通过rownum伪列值的判断来指定获取数据的数量。
(3)分页语法:
分页语句:select t1.*from(select t.*,rownum rn from 表名 t where rownum<=分页单位*当前页)t1 where t1.rn>=(当前页-1)*分页单位 and t1.rn<=分页单位*当前页;
分页单位:每页展示数据的条数;当前页:展示的第几页。
二、序列(sequence)
1.什么是序列?
1)序列是用户创建的数据库对象,序列会产生唯一的整数。序列的一个典型的用途是创建 一个主键的值,它对于每一行必须是唯一的。序列由一个 Oracle 内部程序产生并增加或减 少。
2)序列是一个节省时间的对象,因为它可以减少应用程序中产生序列程序的代码量。序列 号独立于表被存储和产生,因此,相同的序列可以被多个表使用。
2.创建序列:
(1)通过DDL语句创建序列
创建序列语法:
create sequence 序列名称[参数列表]
参数列表:increment by 增长间隔
start with起始值
maxvalue最大值
minvalue最小值
cycle/nocycle是否循环
cache/nocache是否缓存
(2)使用默认参数创建:(从1开始,每次增加1,不限制最大值,不循环,缓存20)
3.使用序列:
(1)NEXTVAL 和 CURRVAL 伪列:
1)NEXTVAL 返回下一个可用的序列值,它每次返回一个唯一的被引用值,即使对于 不同的用户也是如此 。
2)CURRVAL 获得当前的序列值 ;
3)在 CURRVAL 获得一个值以前,NEXTVAL 对该序列必须发布。
4.修改序列:
(1)原则:
1)必须是被修改序列的所有者,或者有 ALTER 权限。
2)用 ALTERSEQUENCE 语句,只有以后的序列数会受影响。
3)用 ALTERSEQUENCE 语句,STARTWITH 选项不能被改变。为了以不同的数重新开 始一个序列,该序列必须被删除和重新创建。
(2)删除序列:
三、索引(index)
1.什么是索引?
1)索引提供对表中行的直接和快速访问,它的目的是用已索引的路径快速定位数据以减少 磁盘 I/O。
2)索引由 Oracle 服务器自动使用和维护,索引逻辑地和物理地独立于他们索引的 表,这意味者索引可以在任何时候被创建或删除,并且不影响基表或其它的索引。当删除表 时,相应的索引也被删除。
3)索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
2.索引的类型:
(1)唯一性索引:当你在一个表中定义一个列为主键,或者定义一个唯一键约束时 Oracle 服务器自动创建该索引,索引的名字习惯上是约束的名字。
(2)非唯一索引:由用户创建,(单行索引,复合索引(组合索引),函数索引)例如,可以创建一个 FOREIGN KEY 列索引用于一个查询 中的连接来改进数据取回的速度。
3.创建索引的方式:
1)自动:在一个表的定义中,当定义一个 PRIMARYKEY 或 UNIQUE 约束时,一个 唯一索引被自动创建。
2)手动:用户能够在列上创建非唯一的索引来加速对行的访问。
(1)索引的优缺点:
优点:索引可以提高查询效率;缺点:对增、删改、效率有影响。
(3)什么时候创建索引?
1)一个列包含一个大范围的值;
2)一个列包含很多的空值;
3)一个或多个列经常同时在一个 WHERE 子句中或一个连接条件中被使用 ;
4)表很大,并且经常的查询期望取回少于百分之 2 到 4 的行。
4.操作索引:
(1)创建非唯一索引语法:
语法:create index 索引名on 表名(列名...)
(2)创建单行索引:
(3)创建复合索引:
(4)创建函数索引:
(5)删除索引:
5.同义词(synonym):
(1)什么是同义词?
为数据对象起别名。
(2)创建同义词:
create synonym 别名for数据对象(表/ 视图);
(3)删除同义词:
drop synonym 同义词名;
6.创建用户:
(1)什么是Oracle用户?
Oracle 用户是用来连接数据库和访问数据库对象的。
(2)操作用户:
1)创建用户:需要具备创建用户的权限可以使用 sys 或者 system 用户来创建新用户。
语法结构:
2)删除用户:
语法:drop User 用户名;
四、数据控制语言(DCL)
1.授予系统权限:
grant...授予用户权限;
语法结构:
(1)授权创建其他对象
1)CREATESESSION;
2)CREATETABLE;
3)CREATESEQUENCE ;
4)CREATEVIEW;
5)CREATEPROCEDURE;
6)UNLIMITEDTABLESPACE;
2.撤销权限:
revork..撤销用户权限
语法:Revoke 权限 from 用户
3.Oracle中的角色:
(1)创建角色:
(2)授予权限给一个角色
(3)授予一个角色给用户
(4)撤销用户角色
语法:revoke 角色 from 用户;
五、Oracle的数据导入与导出
1.数据库导入导出需要注意:
1)目标数据库要与源数据库有着名称相同的表空间。
2)目标数据在进行导入时,用户名尽量相同(这样保证用户的权限级别相同)。
3)目标数据库每次在进行数据导入前,应做好数据备份,以防数据丢失。
4)弄清是导入导出到相同版本还是不同版本(oracle10g 版本与 oracle11g 版本)。
5)目标数据导入前,弄清楚是数据覆盖(替换),还是仅插入新数据或替换部分数据表。
6)确定目标数据库磁盘空间是否足够容纳新数据,是否需要扩充表空间。
7)导入导出时注意字符集是否相同,一般 Oracle 数据库的字符集只有一个,并且固定, 一般不改变。
8)确定操作者的账号权限。
2.导出数据的格式:
1)Dmp 格式:.dmp 是二进制文件,可跨平台,还能包含权限,效率好。
2)Sql 格式:.sql 格式的文件,可用文本编辑器查看,通用性比较好,效率不如第一种, 适合小数据量导入导出。尤其注意的是表中不能有大字段 (blob,clob,long),如果有,会 报错。
3) Pde 格式: .pde 格式的文件, .pde 为 PL/SQLDeveloper 自有的文件格式,只能用 PL/SQL Developer 工具导入导出,不能用文本编辑器查看。
3.exp(导出)和imp(导入):
注意:该命令需要在操作系统的命令窗口执行,而非 sql/plus ;在使用导出或导入命令时,在命令的后侧不要添加分号。
(1)命令格式:
1)导出:exp 用户名/密码@oracle 的连接地址:端口/需要导出的服务名 file=路径/文件名.dmp;
2)导入:imp 用户名/密码@oracle 的连接地址:端口/需要导出的服务名 file=路径/文件名.dmp;
4.使用PL/SQL Developer实现导入与导出:
(1)导出sql格式:
(2)导入sql格式:
(3)导出PDE格式:
(4)导入PDE格式:
(5)导出数据库对象:
(6)导入数据库对象: