1.同义词管理
1.1同义词: 是指为表,视图和序列等对象起的另一个名字。
1.2同义词分为两种: 私有同义词和公有同义词。(语法上的区别在于公有同义词在创建时需加上public关键字,更加本质的区别在于使用范围的不同,公有同义词范围大。)
1.3语法规则:
create [public]synonym<synonym_name>for<object_name>;
1.4举例说明:
为表emp创建同义词
create synonym employee for emp;
下面两条select语句是等效的
(1) select * from emp;
(2) select * from employee;
假设表emp1不存在,同样可以创建同义词。但必须在创建了表emp1后,所创建的同义词才可以使用,否则会有错“ORA-00980: 同义词转换不再有效”。
如图:
1.5删除同义词
drop synonym<synonym_name>(私有同义词)
drop public synonym<synonym_name>(公有同义词)
2.序列管理
2.1 Oracle序列是一个连续的数字生成器。序列常用于关键字,或给数据行排序。序列号可以被设置为上升或者下降,可以没有限制或重复使用直到一个限制值。
2.2 语法规则:
create sequence<sequence_name>keyword
表2-1 create sequence个选项的含义
keyword | 描述 |
start with | 定义序列生成的第一个数字,默认为1 |
increment by | 定义序列号是上升还是下降,对于一个降序列increment by为负值 |
minvalue | 定义序列可以生成的最小值,这是降序序列中的限制值 |
no minvalue | 没有最小值限制 |
maxvalue | 序列能生成的最大数字。这是升序序列中的限制值 |
no maxvalue | 没有最大限制值 |
cycle | 设置序列值在达到限制值以后可以重复 |
nocycle | 设置序列值在达到限制值以后不能重复,这是默认设置。当试图产生maxvalue+1的值时,将会产生一个异常。 |
cache | 预先产生的序列个数,默认为20个 |
nocache | 在每次序列号产生时强制数据字典更新,保证在序列值之间没有间隔 |
2.3举例说明:
为表cm创建序列
在创建过程中需注意:cache默认为20,也就是说Oracle可以预先在内存里面放置一些sequence,数量为20个。但是初始值100到最大值130,自动增长值为10,那也就是只有100,110,120,130四个,小于cache的20个,所以会出现图中错误.
建立的序列后,就可以使用属性nextval取得序列的下一个值。第一次nextval返回的是初始值,随后nextval会自动增加定义的increment by 值,然后返回增加后的值。属性currval总是返回当前sequence的值,但是,在第一次nextval初始化之后才能使用currval,否则会出错。
2.4修改序列
alter sequence cm _seq nocache;
2.5删除序列
drop sequence cm_seq;
3.视图管理
3.1 视图是一个或多个表或视图中导出的表,其结构和数据是建立在对表的查询的基础上的。
3.2 语法规则:
create[or replace] [force|noforce] view<view_name>
as select语句
[with check option constraint[constraint_name]]
[with read only]
3.3创建带错误的视图(注意加上force选项)
3.4 with check option 和with read only选项
(1) with check option 子句的作用是在视图中不允许使用insert或者update命令来对选择的视图中的行进行插入和修改的操作。
如图说明:
(2) with read only 可以完全禁止通过视图来修改表格资料,只需在create view句子加入with read only。
如图说明:
3.5 删除视图
Drop view <view_name>
例如:drop view emp_v;
3.6 视图上的DML语句
q 在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE
q 视图上的DML语句有如下限制:
q 只能修改一个底层的基表
q 如果修改违反了基表的约束条件,则无法更新视图
q 如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图
q 如果视图包含伪列或表达式,则将无法更新视图
3.7 通过视图修改数据时需注意: 只有键保留表的列才能被修改。
什么是键保留表呢??
-----在创建视图时如果涉及到了主从表关系,并且如果一个表中的主键同时也当作视图中的主键。那么这个表就上键保留表。
4.索引管理
4.1创建索引时需注意的几个条件:
(1)表中重复数据不多(基数高)
(2)要是经常查询的表
(3)数据量多
(4)建索引的列是where子句/group by/order by/的条件列
(5)主键(唯一索引)
(6)不频繁进行行的增,删,改。
4.2语法规则:
可以基于数据库表中的单列或多列创建索引,语法如下:
create [unique] index <index_name> on<table_name>(col_name1,…….);
创建唯一索引只需在create与index间加上关键字unique
4.3
删除索引
drop index <index_name>
例如: drop index emp_ename_index;
4.4跟索引有关的数据字典:
(1) user_indexes :用户创建的索引信息
(2) user_ind_partitions:用户创建的分区索引的信息
(3) user_ind_columns:索引相关的列的信息
4.5创建各种类别的索引:
(1)创建标准索引:CREATE INDEX item_index ON itemfile (itemcode)
TABLESPACE index_tbs;
(2)重建索引:ALTER INDEX item_index REBUILD;
(4) 唯一索引:CREATE UNIQUE INDEX item_index ON itemfile (itemcode);
(5)反向键索引:
SQL> CREATE INDEX rev_index ON itemfile (itemcode) REVERSE;
SQL> ALTER INDEX rev_index REBUID NOREVERSE;
(6)位图索引:SQL> CREATE BITMAP INDEX bit_index
ON order_master (orderno);
(7)索引组织表:SQL> CREATE TABLE ind_org_tab (
vencode NUMBER(4) PRIMARY KEY,
venname VARCHAR2(20)
)
ORGANIZATION INDEX;
(8)基于函数的索引:SQL> CREATE INDEX lowercase_idx
ON toys (LOWER(toyname));
SQL> SELECT toyid FROM toys
WHERE LOWER(toyname)='doll';
(9)组合索引:SQL> CREATE INDEX comp_index ON itemfile(p_category, itemrate);