• 1. 其它数据库对象
  • 2. 目标通过本章学习,您将可以: 创建, 维护, 和使用序列 创建和维护索引 创建私有和公有同义词
  • 3. 常见的数据库对象对象 描述 表 基本的数据存储集合,由行和列组成。 视图 从表中抽出的逻辑上相关的数据集合。 序列 提供有规律的数值。 索引 提高查询的效率 同义词 给对象起别名
  • 4. 什么是序列?序列: 自动提供唯一的数值 共享对象 主要用于提供主键值 代替应用代码 将序列值装入内存可以提高访问效率
  • 5. CREATE SEQUENCE 语句定义序列:CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];
  • 6. 创建序列创建序列 DEPT_DEPTID_SEQ为表 DEPARTMENTS 提供主键 不使用 CYCLE 选项CREATE SEQUENCE dept_deptid_seq INCREMENT BY 10 START WITH 120 MAXVALUE 9999 NOCACHE NOCYCLE; Sequence created.
  • 7. 查询序列查询数据字典视图 USER_SEQUENCES获取序列定义信息 如果指定NOCACHE 选项,则列LAST_NUMBER 显示序列中下一个有效的值SELECT sequence_name, min_value, max_value, increment_by, last_number FROM user_sequences;
  • 8. NEXTVAL 和 CURRVAL 伪列NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用 CURRVAL 中存放序列的当前值 NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效
  • 9. 序列应用举例 序列 DEPT_DEPTID_SEQ 的当前值INSERT INTO departments(department_id, department_name, location_id) VALUES (dept_deptid_seq.NEXTVAL, 'Support', 2500); 1 row created.SELECT dept_deptid_seq.CURRVAL FROM dual;
  • 10. 使用序列将序列值装入内存可提高访问效率 序列在下列情况下出现裂缝: 回滚 系统异常 多个表同时使用同一序列 如果不讲序列的值装入内存(NOCACHE), 可使用表 USER_SEQUENCES 查看序列当前的有效值
  • 11. 修改序列修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存ALTER SEQUENCE dept_deptid_seq INCREMENT BY 20 MAXVALUE 999999 NOCACHE NOCYCLE; Sequence altered.
  • 12. 修改序列的注意事项必须是序列的拥有者或对序列有 ALTER 权限 只有将来的序列值会被改变 改变序列的初始值只能通过删除序列之后重建序列的方法实现 其它的一些限制
  • 13. 删除序列使用DROP SEQUENCE 语句删除序列 删除之后,序列不能再次被引用DROP SEQUENCE dept_deptid_seq; Sequence dropped.
  • 14. 索引索引: 一种数据库对象 通过指针加速 Oracle 服务器的查询速度 通过快速定位数据的方法,减少磁盘 I/O 索引与表相互独立 Oracle 服务器自动使用和维护索引
  • 15. 创建索引自动创建: 在定义 PRIMARY KEY 或 UNIQUE 约束后系统自动在相应的列上创建唯一性索引 手动创建: 用户可以在其它列上创建非唯一的索引,以加速查询
  • 16. 创建索引在一个或多个列上创建索引 在表 EMPLOYEES的列 LAST_NAME 上创建索引 CREATE INDEX emp_last_name_idx ON employees(last_name); Index created.CREATE INDEX index ON table (column[, column]...);
  • 17. 什么时候创建索引以下情况可以创建索引: 列中数据值分布范围很广 列中包含大量空值 列经常在 WHERE 子句或连接条件中出现 表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%
  • 18. 什么时候不要创建索引下列情况不要创建索引: 表很小 列不经常作为连接条件或出现在WHERE子句中 查询的数据大于2%到4% 表经常更新 加索引的列包含在表达式中
  • 19. SELECT ic.index_name, ic.column_name, ic.column_position col_pos,ix.uniqueness FROM user_indexes ix, user_ind_columns ic WHERE ic.index_name = ix.index_name AND ic.table_name = 'EMPLOYEES';查询索引可以使用数据字典视图USER_INDEXES 和 USER_IND_COLUMNS 查看索引的信息
  • 20. 基于函数的索引基于函数的索引是一个基于表达式的索引 索引表达式由列, 常量, SQL 函数和用户自定义的函数 CREATE INDEX upper_dept_name_idx ON departments(UPPER(department_name)); Index created. SELECT * FROM departments WHERE UPPER(department_name) = 'SALES';
  • 21. 删除索引使用DROP INDEX 命令删除索引 删除索引UPPER_LAST_NAME_IDX 只有索引的拥有者或拥有DROP ANY INDEX权限的用户才可以删除索引DROP INDEX upper_last_name_idx; Index dropped.DROP INDEX index;
  • 22. 同义词使用同义词访问相同的对象: 方便访问其它用户的对象 缩短对象名字的长度CREATE [PUBLIC] SYNONYM synonym FOR object;
  • 23. 创建和删除同义词为视图DEPT_SUM_VU 创建同义词 删除同义词 CREATE SYNONYM d_sum FOR dept_sum_vu; Synonym Created.DROP SYNONYM d_sum; Synonym dropped.
  • 24. 总结通过本章学习,您已经可以: 使用序列 通过数据字典视图 USER_SEQUENCES 查看序列信息 使用索引提高查询效率 通过数据字典视图 USER_INDEXES查看索引信息 为数据对象定义同义词