320 likes | 393 Views
第四章. 数据库对象. 回顾. 锁用于保护多用户环境下被修改的数据 锁分为两种级别,即行级锁和表级锁 表分区允许将一个表划分成几部分,以改善大型应用系统的性能 分区方法包括范围分区、散列分区、复合分区和列表分区 分区维护操作包括添加、删除、截断、合并和拆分分区. 目标. 使用同义词 使用序列 创建视图 创建索引. 数据库对象简介. Oracle 数据库对象又称模式对象 数据库对象是逻辑结构的集合,最基本的数据库对象是表 其他数据库对象包括:. 数据库对象 . 同义词. 序列. 视图. 索引. 同义词 3 -1.
E N D
第四章 数据库对象
回顾 • 锁用于保护多用户环境下被修改的数据 • 锁分为两种级别,即行级锁和表级锁 • 表分区允许将一个表划分成几部分,以改善大型应用系统的性能 • 分区方法包括范围分区、散列分区、复合分区和列表分区 • 分区维护操作包括添加、删除、截断、合并和拆分分区
目标 • 使用同义词 • 使用序列 • 创建视图 • 创建索引
数据库对象简介 • Oracle 数据库对象又称模式对象 • 数据库对象是逻辑结构的集合,最基本的数据库对象是表 • 其他数据库对象包括: 数据库对象 同义词 序列 视图 索引
同义词 3-1 • 同义词是现有对象的一个别名。 • 简化SQL语句 • 隐藏对象的名称和所有者 • 提供对对象的公共访问 • 同义词共有两种类型: 公有同义词可被所有的数据库用户访问。 同义词 私有同义词只能在其模式内访问,且不能与当前模式的对象同名。 私有同义词 公有同义词
同义词 3-2 私有同义词 CREATE SYNONYM emp FOR SCOTT.emp; SCOTT.emp的别名 模式名 表名 公有同义词 CREATE PUBLIC SYNONYM emp_syn FOR SCOTT.emp; 同义词名称
同义词 3-3 创建或替换现有的同义词 CREATE OR REPLACE SYNONYM emp_syn FOR SCOTT.emp; 替换现有的同义词 删除同义词 SQL> DROP SYNONYM emp; SQL> DROP PUBLIC SYNONYM emp_syn;
序列 • 序列是用于生成唯一、连续序号的对象 • 序列可以是升序的,也可以是降序的 • 使用CREATE SEQUENCE语句创建序列 SQL> CREATE SEQUENCE toys_seq START WITH 10 INCREMENT BY 10 MAXVALUE 2000 MINVALUE 10 NOCYCLE CACHE 10; 指定第一个序号从 10 开始 指定序号之间的间隔为 10 表示序列的最大值为 2000 表示序列的最小值为 10 在达到最大值后停止生成下一个值 指定内存中预先分配的序号数
访问序列 • 通过序列的伪列来访问序列的值 • NEXTVAL 返回序列的下一个值 • CURRVAL 返回序列的当前值 SQL> INSERT INTO toys (toyid, toyname, toyprice) VALUES ( toys_seq.NEXTVAL, ‘TWENTY’, 25); SQL> INSERT INTO toys (toyid, toyname, toyprice) VALUES ( toys_seq.NEXTVAL, ’MAGIC PENCIL’, 75); 指定序列的下一个值 SQL> SELECT toys_seq.CURRVAL FROM dual; 检索序列的当前值
更改和删除序列 使用ALTER SEQUENCE语句修改序列, 不能更改序列的START WITH参数 SQL> ALTER SEQUENCE toys_seq MAXVALUE 5000 CYCLE; 使用DROP SEQUENCE语句删除序列 SQL> DROP SEQUENCE toys_seq;
视图 • 视图以经过定制的方式显示来自一个或多个表的数据 • 视图可以视为“虚拟表”或“存储的查询” • 创建视图所依据的表称为“基表” • 视图的优点有: • 提供了另外一种级别的表安全性 • 隐藏的数据的复杂性 • 简化的用户的SQL命令 • 隔离基表结构的改变 • 通过重命名列,从另一个角度提供数据
创建视图 3-1 Stud_details 创建视图 CREATE VIEW stud_view AS SELECT studno, studname, subno FROM Stud_details; Stud_view
创建视图 3-2 • 创建视图的语法: CREATE [OR REPLACE] [FORCE] VIEW view_name [(alias[, alias]...)] AS select_statement [WITH CHECK OPTION] [WITH READ ONLY];
创建视图 3-3 使用 WITH CHECK OPTION 选项创建视图 CREATE OR REPLACE VIEW pause_view AS SELECT * FROM order_master WHERE ostatus = 'p' WITH CHECK OPTION CONSTRAINT chk_pv; 使用 ORDER BY 子句创建视图 CREATE OR REPLACE VIEW ord_ven AS SELECT * FROM vendor_master ORDER BY venname; 创建带有错误的视图 CREATE FORCE VIEW ven AS SELECT * FROM venmaster;
联接视图 2-1 Stud_details Sub_details 联接视图 CREATE VIEW Stud_sub_view AS SELECT Studno, Studname, Submrks, Subname FROM Stud_details, Sub_Details WHERE Stud_details.Subno=Sub_details.Subno; Stud_sub_view
联接视图 2-2 创建外联接视图 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语句 • 在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE • 视图上的DML语句有如下限制: • 只能修改一个底层的基表 • 如果修改违反了基表的约束条件,则无法更新视图 • 如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图 • 如果视图包含伪列或表达式,则将无法更新视图
键保留表 Stud_details Sub_details 联接视图 Stud_details为什么 是键保留表? 键保留表 因为 Studno既是 Stud_details 中的主键, 也是联接结果中的主键
视图中的函数 • 视图中可以使用单行函数、分组函数和表达式 • 使用DROP VIEW语句删除视图 CREATE VIEW item_view AS SELECT itemcode, LOWER(itemdesc) item_desc FROM itemfile; SQL> DROP VIEW toys_view;
索引 3-1 • 索引是与表相关的一个可选结构 • 用以提高 SQL 语句执行的性能 • 减少磁盘I/O • 使用 CREATE INDEX 语句创建索引 • 在逻辑上和物理上都独立于表的数据 • Oracle 自动维护索引
索引 3-2 • 索引有各种类型,除了标准索引外,还有一些特殊类型的索引: 索引的类型 唯一索引 组合索引 反向键索引 基于函数的索引 位图索引
索引 3-3 创建标准索引 SQL> CREATE INDEX item_index ON itemfile (itemcode) TABLESPACE index_tbs; 重建索引 SQL> ALTER INDEX item_index REBUILD; 删除索引 SQL> DROP INDEX item_index;
唯一索引 • 唯一索引确保在定义索引的列中没有重复值 • Oracle 自动在表的主键列上创建唯一索引 • 使用CREATE UNIQUE INDEX语句创建唯一索引 SQL> CREATE UNIQUE INDEX item_index ON itemfile (itemcode);
组合索引 • 组合索引是在表的多个列上创建的索引 • 索引中列的顺序是任意的 • 如果 SQL 语句的 WHERE 子句中引用了组合索引的所有列或大多数列,则可以提高检索速度 SQL> CREATE INDEX comp_index ON itemfile(p_category, itemrate);
反向键索引 • 反向键索引反转索引列键值的每个字节 • 通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上 • 创建索引时使用REVERSE关键字 SQL> CREATE INDEX rev_index ON itemfile (itemcode) REVERSE; SQL> ALTER INDEX rev_index REBUID NOREVERSE;
位图索引 • 位图索引适合创建在低基数列上 • 位图索引不直接存储ROWID,而是存储字节位到ROWID的映射 • 减少响应时间 • 节省空间占用 SQL> CREATE BITMAP INDEX bit_index ON order_master (orderno);
索引组织表 2-1 • 索引组织表的数据存储在与其关联的索引中 • 索引中存储的是行的实际数据,而不是ROWID • 基于主键访问数据 • CREATE TABLE 命令与 ORGANIZATION INDEX 子句一起用于创建索引组织表 SQL> CREATE TABLE ind_org_tab ( vencode NUMBER(4) PRIMARY KEY, venname VARCHAR2(20) ) ORGANIZATION INDEX;
索引组织表 2-2 • 普通表与索引组织表的比较
基于函数的索引 • 基于一个或多个列上的函数或表达式创建的索引 • 表达式中不能出现聚合函数 • 不能在LOB类型的列上创建 • 创建时必须具有 QUERY REWRITE 权限 SQL> CREATE INDEX lowercase_idx ON toys (LOWER(toyname)); SQL> SELECT toyid FROM toys WHERE LOWER(toyname)='doll';
索引中的分区 • 可以将索引存储在不同的分区中 • 与分区有关的索引有三种类型: • 局部分区索引 - 在分区表上创建的索引,在每个表分区上创建独立的索引,索引的分区范围与表一致 • 全局分区索引 - 在分区表或非分区表上创建的索引,索引单独指定分区的范围,与表的分区范围或是否分区无关 • 全局非分区索引 - 在分区表上创建的全局普通索引,索引没有被分区
获取索引的信息 • 与索引有关的数据字典视图有: • USER_INDEXES - 用户创建的索引的信息 • USER_IND_PARTITIONS - 用户创建的分区索引的信息 • USER_IND_COLUMNS - 与索引相关的表列的信息 SQL> SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME FROM USER_IND_COLUMNS ORDER BY INDEX_NAME, COLUMN_POSITION;
总结 • 同义词是现有数据库对象的别名 • 序列用于生成唯一、连续的序号 • 视图是基于一个或多个表的虚拟表 • 索引是与表相关的一个可选结构,用于提高 SQL语句执行的性能 • 索引类型有标准索引、唯一索引、反向键索引、位图索引和基于函数的索引 • 索引组织表基于主键访问数据