Oracle学习笔记04
第四章数据库对象:
*同义词
*序列
*视图
*索引
*簇
同义词
数据库对象的替换名称
优点:
--简化SQL语句
--隐藏对象的名称和所有者
--为分布式数据库的远衙对提供了位置透明性
--提供对对象的公共访问
---实际上是表的别名,
SQL> create synonym employee for scott.emp;
同义词已创建。
序列
序列是能够自动产生连续
SQL> set linesize 100;
SQL> set pagesize 100;
SQL> select * from employee;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已选择14行。
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已选择14行。
SQL> drop synonym employee;
同义词已丢弃。
序列
序列是能够自动产生连续唯一值的数据库共享对象
序列用于为主分健提供值
CREATE SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | MINVALUEE}]
[{CYCLE | NOCYCLE]
[{CACHE n | NOCACHE}];
两个重要的属性
*NEXTVAL返回下一个可用的值
* CURRVAL 获取当前序列的值(对于一个新的序列必须先使用NEXTVAL产生值,再可以使用CURRVAL获得当
前值)
ALter Sequence
* 修改序列定义
Drop Sequence
* 从数据库中删除序列
序列的数据字典
USER_SEQUENCES
视图
用来显示来自一个或多个表的数据
也称为"虚拟表"或"已存储的查询"
基表---创建视图所依据的表
视图不存储数据,只存储语语句,
视图所连接的表,我们称为基表
视图创建完成后可以当表一样来使用,事实上并不是表
视图的优点:
* 提供了另外一种级别的表的安全性,
* 隐藏数据的复杂性
* 简化用户服务的SQL
* 将应用程序与基表达方式定义的修改分离开来
* 从另一个角度提供数据
CREATE OR REPLACE VIEW 语句用于创建视图
ORDER BY 子句可以用来按特定顺序对行进行排序
带有错误的视图
---FORCE 选项用于创建带有错误的视图
---查询引用不存在的表
---查询引用无效列,
---创建视图时没有相应权限,
SQL>gran resource to scott 授权SCOTT
SQL> create or replace view v_emp
2 as
3 select empno as 编号,ename as 姓名 from emp where deptno=10;
视图已建立。
SQL> select * from v_emp;
编号 姓名
---------- ----------
7782 CLARK
7839 KING
7934 MILLER
SQL> create or replace view v_emp
2 as
3 select empno as 编号,ename as 姓名 from emp where deptno=10;
视图已建立。
SQL> select * from v_emp;
编号 姓名
---------- ----------
7782 CLARK
7839 KING
7934 MILLER
索引
与表关联的可选结构
加快SQL语句的执行
减少磁盘I/O
CREATE INDEX 语句用于创建索引
在逻辑上和物理上独立于表中的数据
Oracle 自动维护索引
唯一索引
* 确保在定义索引的列中没有重复的值
* Oracle 自动为主健和唯一健列创建唯一索引
* CREATE UNIQUE INDEX 创建唯一值索引
SQL> desc student;
名称 是否为空? 类型
----------------------------------------------------- -------- -----------------------
STUDENTID NOT NULL NUMBER(38)
STUDENTNAME VARCHAR2(20)
SCORE NUMBER(38)
SQL> create unique index idx_stuid on student(studentid);
索引已创建。
SQL> select * from student;
STUDENTID STUDENTNAME SCORE
---------- -------------------- ----------
104 mil 73
106 peter 67
102 Mike 90
103 Tyd 89
SQL> insert into student values(105,'tank',98);
已创建 1 行。
SQL> /
insert into student values(105,'tank',98)
*
ERROR 位于第 1 行:
ORA-00001: 违反唯一约束条件 (SCOTT.IDX_STUID)
组合索引
* 在表的多个列上创建的索引,也称为“连接索引”
* 组合索引中的列可以按任意思顺序排列
* 对于在WHERE子句中包含多个列的查询,可以提高数据训的访问速度
位图索引,
索引组织表
表的数据存储在与其关联的索引中,
对表数据库的修改只会导到对索引的更新,
基于主键进行搜索,
create table命令与ORGANIZATION INDEX 子句一起用于创建索引组织表索引组织表是索引表和组织表合
二为一的表,
SQL> ed
已写入文件 afiedt.buf
1 create table indorg
2 (
3 vencode int primary key
4 ,venname varchar2(20))
5* organization index
SQL> /
表已创建。
SQL> insert into indorg values(11,'ss');
已创建 1 行。
SQL> select * from indorg;
VENCODE VENNAME
---------- --------------------
11 ss
SQL> select rowid from indorg;
ROWID
-----------------------------------------
*BABAxoICwQz+
SQL>
基于函数的索引
* 基于一个或多个列上的函数或表达式创建的索引
表达式中不能包含聚集函数
(sum,count,avg,min,max)
不能在LOB REF 或嵌套表列上创建,
SQL> create index idx_ename on scott.emp(lower(ename));
索引已创建。
SQL> select * from scott.emp where lower(ename)='smith';
EMPNO ENAME JOB MGR HIREDATE SAL C
---------- ---------- --------- ---------- ---------- ---------- -------
7369 SMITH CLERK 7902 17-12月-80 800
SQL>