一、同义词
-
Oracle中有些对象的名称很长, 写查询语句很麻烦,同义词是现有对象的一个别名。
a、简化SQL语句
b、隐藏对象的名称和所有者
c、提供对对象的公共访问 -
同义词共有两种类型:
公有同义词 可被所有的数据库用户访问。
私有同义词 只能在其模式内访向,且不能与当前模式的对象同名。 -
创建私有同义词以及使用私有同义词
create synonym 同义词名称 FOR 用户名.表名;
select * from 同义词名称;
- 创建公有同义词以及使用公有同义词
create public synonym 同义词名称 FOR 用户名.表名;
select * from 同义词名称;
- 删除同义词
drop synonym 私有同义词名称;
drop public synonym 公有同义词名称;
二、序列
- 创建序列
CREATE SEQUENCE stu_id
START WITH 10 --定义序列的初始值(即产生的第一个值),默认为1。
INCREMENT BY 10 --定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
MAXVALUE 2000
MINVALUE 10
NOCYCLE
CACHE 10;
alter system flush shared pool; --将缓存清空
注:
-
INCREMENT BY用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
-
START WITH 定义序列的初始值(即产生的第一个值),默认为1。
-
MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。
-
MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。
-
CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
-
CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。
大量语句发生请求,申请序列时,为了避免序列在运用层实现序列而引起的性能瓶颈。Oracle序列允许将序列提前生成 cache x个先存入内存,在发生大量申请序列语句时,可直接到运行最快的内存中去得到序列。但cache个数也不能设置太大,因为在数据库重启时,会清空内存信息,预存在内存中的序列会丢失,当数据库再次启动后,序列从上次内存中最大的序列号+1 开始存入cache x个。这种情况也能会在数据库关闭时也会导致序号不连续。 -
NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用。
-
CURRVAL 中存放序列的当前值,NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效。
- 使用序列
select 序列名称.NEXTVAL from dual; --获取序列的下一个值
select 序列名称.CURRVAL from dual; --获取序列的当前值
insert into 表名(toyid, toyname, toyprice)VALUES (序列名称.NEXTVAL, 'fTWENTY', 25); --获取序列的下一个值,插入表中
- 更改和删除序列
--使用ALTER SEQUENCE语句修改序列的步长为3
alter sequence 序列名称 increment by 3;
--使用DROP SEQUENCE语句删除序列
DROP SEQUENCE 序列名称;
三、视图
-
视图简介
a、视图以经过定制的方式显示来自一个或多个表的数据;
b、视图可以视为"虚拟表” 或“存储的查询”;
c、创建视图所依据的表称为“基表”;
d、视图的优点有:
提供了另外一种级别的表安全性;
隐藏的数据的复杂性;
简化的用户的SQL命令;
隔离基表结构的改变;
通过重命名列,从另一个角度提供数据。 -
创建视图
create or replace view 视图名称(列名······) as 查询语句 [with check option] [with read only];
- 使用WITH CHECK OPTION选项创建视图,相当于添加了约束,当通过视图对底层表进行的insert,update操作必须保证操作结果也在视图中,不允许操作后使视图中的数据减少;
- 使用 with read only 创建只读视图
- 创建外连接视图
四、索引
-
索引介绍
a、表在物理空间是线性存储的;
b、如果没有索引的数据查找,就是最原始的顺序搜索。
c、索引的好处:与表关联的可选结构; 加快SQL语句的执行; 减少磁盘I/O; CREATE INDEX语句用于创建索引; Oracle自动维护索引
d、索引的分类:–非聚集索引 --聚集索引
-
创建标准索引,重建索引,删除索引
--创建标准索引
SQL> CREATE INDEX item_index ON itemfile (itemcode) TABLESPACE index tbs;
--重建索引
SQL> ALTER INDEX item index REBUILD;
--删除索引
SQL> DROP INDEX item_index;
- 唯一索引
SQL> CREATE UNIQUE INDEX item index ON itemfile (itemcode);
- 组合索引
SQL> CREATE INDEX comp_index ON itemfile(p_category, itemrate);
- 反向索引
SQL> CREATE INDEX rev_index ON itemfile (itemcode) REVERSE; --创建反向索引
SQL> ALTER INDEX rev_index REBUID NOREVERSE; -- 修改反向索引
- 位图索引
SQL> CREATE BITMAP INDEX bit index ON order_master (orderno);
-
基于函数索引
注意:创建时必须具有QUERY REWRITE权限; 表达式中不能出现聚合函数; 不能在LOB类型的列,上创建。
SQL> CREATE INDEX lowercase_idx ON toys (lower(toyname)); --创建带函数的索引
SQL> select * from toys order by toyname;
-
索引组织表
索引组织表的数据存储在与其关联的索引中; 索引组织表的数据存储在与其关联的索引中; 基于主键访问数据; CREATE TABLE命令与ORGANIZATION INDEX子句- -起用于创建索引组织表。
SQL> CREATE TABLE ind_org_tab(
vencode NUMBER(4) PRIMARY KEY,
venname VARCHAR2(20)
)
organization index;
-
分区表的索引
分区表往往存储有大量的数据,并且分区表的各个区往往存储在不同的地方,这样建立普通索引要花费大量的的存储空间,因此针对分区表的索引有两种处理方式:全局索引:将所有分区表的数据视为一个整体,对整个建立索引; 本地索引:为每个子分区建立各自独立的索引。
create index索引名on表名(索引列) global; --全局索引
create index索引名on表名(索引列) local; --本地索引
- 索引分区
- 获取索引信息
与索引有关的数据字典视图有:
USER IND PARTITIONS -用户创建的分区索引的信息;
USER_ IND COLUMNS -与索引相关的表;
SQL> SELECT 索引名称, 表名, 列名 FROM USER_IND_COLUMNS ORDER BY INDEX_NAME, COLUMN_POSITION;