Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2794469
  • 博文数量: 423
  • 博客积分: 7770
  • 博客等级: 少将
  • 技术积分: 4766
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 11:58
个人简介

Oracle/DB2/Postgresql/Mysql/Hadoop/Greenplum/Postgres-xl/Mongodb

文章分类

全部博文(423)

文章存档

2019年(3)

2018年(6)

2017年(27)

2016年(23)

2015年(30)

2014年(16)

2013年(31)

2012年(73)

2011年(45)

2010年(14)

2009年(30)

2008年(30)

2007年(63)

2006年(32)

分类: Oracle

2008-11-17 02:27:06

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>
 
 
 
阅读(1528) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~