![](https://i-blog.csdnimg.cn/blog_migrate/0fe36850dc353fdf6478720df4b83018.png)
同义词
![](https://i-blog.csdnimg.cn/blog_migrate/f005028bda01bbea8901f53aa3d21d62.png)
公有同义词可被所有的数据库用户访问。
私有同义词只能在其模式内访问,且不能与当前模式的对象同名。
![](https://i-blog.csdnimg.cn/blog_migrate/b0189f47d66dbb7a5fd57164e12f341f.png)
create or replace synonym emp_syn for scott.emp;
drop synonym emp; drop public synonym emp_syn
Create public synonym Newer for scott.emp2; Select * from Newer ;
序列
Create sequence 序列名 Start with 1 --指序列开始大小,默认为1 Increment by 1 --每次的增量,默认为1 Maxvalue 2000 --序列的最大数 Minvalue 1 --序列的最小数 Nocycle --当序列最大了将不再生成整数(默认) Cache 10; --保留在内存中整数的个数,默认20
注意:序列在使用的时候,如果给的是主键,为防止出现不连续的情况,应该设置为NOCACHE。
select * from user_sequences;
注意:序列在使用的时候,如果给的是主键,为防止出现不连续的情况,应该设置为NOCACHE。
INSERT INTO toys (toyid, toyname, toyprice) VALUES ( toys_seq.NEXTVAL, ‘TWENTY’, 25); INSERT INTO toys (toyid, toyname, toyprice) VALUES ( toys_seq.NEXTVAL, ’MAGIC PENCIL’, 75); --toys_seq.NEXTVAL 指定序列的下一个值
SELECT toys_seq.CURRVAL FROM dual; --检索序列的当前值
使用ALTER SEQUENCE语句修改序列,不能更改序列的START WITH参数
ALTER SEQUENCE toys_seq MAXVALUE 5000 CYCLE;
使用DROP SEQUENCE语句删除序列
DROP SEQUENCE toys_seq;
视图
![](https://i-blog.csdnimg.cn/blog_migrate/5a501c07789e5372de4fca2d43b821f1.png)
CREATE VIEW stud_view AS SELECT studno, studname, subno FROM Stud_details;
通过这个视图,查询到的结果:
![](https://i-blog.csdnimg.cn/blog_migrate/ae18c90478e4afb2f5bb1c2df9d49aa0.png)
创建视图
CREATE [OR REPLACE] [FORCE] VIEW view_name [(alias[, alias]...)] AS select_statement [WITH CHECK OPTION][CONSTRAINT C_NAME] [WITH READ ONLY]; --禁止对表进行更新删除操作 --W ITH CHECK OPTION CONSTRAINT _NAME :表示增加一个检查约束,INSERT和UPDATE时候必须要求: --INSERT时候要求插入的数据必须符合定义时候设置的where条件一致,UPDATE 时候只能改除where条件列以外的其他数据列或者修改的条件列的值符合where条件 --
使用 WITH CHECK OPTION 选项创建视图
create or replace view pause_view as select * from order_master WHERE ostatus = 'p' with check option constaint chk_pv;
使用 ORDER BY 子句创建视图
create or replace view ord_ven as select * from vendor_master order by venname;
联接视图:两个表的结果
create view Stud_sub_view as select Studno, Studname, Submrks, Subname from Stud_details, Sub_Details where Stud_details.Subno=Sub_details.Subno;
CREATE VIEW ven_ord_outj_view AS SELECT vm.vencode, venname, orderno, odate, ostatus FROM vendor_master vm, order_master om WHERE vm.vencode = om.vencode(+);
等同于
SELECT vm.vencode, venname, orderno, odate, ostatus FROM vendor_master vm LEFT OUTER JOIN order_master om ON vm.vencode = om.vencode;
视图上的DML语句
键保留表
![](https://i-blog.csdnimg.cn/blog_migrate/2d99acacdd2dbb581e44626c28b02be5.png)
因为 Studno 既是Stud_details 中的主键,也是联接结果中的主键,因此Stud_details是键保留表
视图中的函数
CREATE VIEW item_view AS SELECT itemcode, LOWER(itemdesc) item_desc FROM itemfile;
删除视图
DROP VIEW toys_view;
索引
索引的原理:索引的工作原理是与一个叫做ROWID的概念紧密相关的,Oracle在创建数据表时,默认会为每个数据表建立一个隐含字段,叫ROWID。在向数据表中插入记录时,系统将自动为每条记录分配惟一的一个ROWID号,利用这个ROWID号,就可以快速定位到记录。
操作索引
CREATE INDEX item_index ON itemfile (itemcode) TABLESPACE index_tbs;
重建索引
ALTER INDEX item_index REBUILD;
删除索引
DROP INDEX item_index;
索引的类型
![](https://i-blog.csdnimg.cn/blog_migrate/974d1489f43774d8dff10ca5803b6f31.png)
唯一索引
CREATE UNIQUE INDEX item_index ON itemfile (itemcode);
组合索引
CREATE INDEX comp_index ON itemfile(p_category, itemrate);
反向键索引
CREATE INDEX rev_index ON itemfile (itemcode) REVERSE;
ALTER INDEX rev_index REBUID NOREVERSE;
位图索引
CREATE BITMAP INDEX bit_index ON order_master (orderno);
索引组织表
CREATE TABLE ind_org_tab ( vencode NUMBER(4) PRIMARY KEY, venname VARCHAR2(20) ) ORGANIZATION INDEX;
普通表 | 索引组织表 |
ROWID 唯一地标识行 | 主键唯一地标识行 |
隐式的 ROWID 列 | 没有隐式的 ROWID 列 |
基于 ROWID 的访问 | 基于主键的访问 |
顺序扫描返回所有行 | 完全索引扫描返回所有行,并按主键顺序排列 |
支持分区 | 不支持分区 |
基于函数的索引
CREATE INDEX lowercase_idx ON toys (LOWER(toyname));
SELECT toyid FROM toys WHERE LOWER(toyname)='doll';
索引中的分区
获取索引的信息
SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME FROM USER_IND_COLUMNS ORDER BY INDEX_NAME, COLUMN_POSITION;