第四讲 数据库对象(视图、序列、同义词、索引) ORACLE 第四讲 数据库对象(视图、序列、同义词、索引)
本章目标 熟练掌握视图的创建和使用 熟练掌握序列的创建和使用 熟练掌握同义词的创建和使用 熟练掌握索引的创建和使用
视图 什么是视图 视图以经过定制的方式显示包含在一个或多个表(或其它视图)中的数据。视图获取查询的输出结果,并将其作为表来处理,因此,可以将视图视为“已存储的查询”或“虚拟表”。尽管视图看起来像真实的表,但他们是定制的子集或表,仅包含选定的行和列。视图可被看作是一个进入数据库表中的“窗口”,透过它只能看见选定的行和列。
视图 为什么要使用视图——视图的优点 通过限制对表中预定的一组行和列的访问。视图提供了另外一种级别的表安全性。可根据不同用户定义不同视图,达到安全性的目的。 视图隐藏了数据的复杂性。例如,一个视图可能是用一个连接来定义的,它是多个表的相关列或相关行的集合。视图隐藏了这样一个事实,即此信息实际上来自于多个表。即简化了SQL语句。
视图 视图简化了用户的命令,因为视图允许用户从多个表中选择信息,而用户不必实际知道如何执行连接。 视图将应用程序与基表定义的修改隔离开来。例如一个视图引用了4列表中的3个列。现在,如果要向该表添加第5个列,则视图的定义不会受影响,而且使用该视图的所有应用程序也不受影响。 视图通过重命名,从另一个角度(相对于基表),提供了数据,而不影响基表。
视图 如何使用视图 创建视图的语法 CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW view_name [(alias[ , alias]…)] AS select_statement --------SQL查询语句 [WITH CHECK OPTION [CONSTRAINT constraint] ] [WITH READ ONLY];
视图 其中: OR REPLACE:表示在视图存在的情况下替换该视图。 FORCE:如果使用此关键字,则无论基表是否存在,都将创建视图。但是编译会报错 NOFORCE:这是默认值。如果使用此关键字,则仅当基表存在时才创建视图。 view_name:表示要创建的视图的名称。 alias:指定由视图的查询所选择的表达式或列的别名。别名的数目必须与视图所选择的表达式的数目相匹配。 select_statement:表示SELECT语句。 WITH CHECK OPTION:此选项指定只能插入或更新视图可以访问的行。 术语constraint表示为CHECK OPTION约束指定的名称。 WITH READ ONLY:此选项确保不能在此视图上执行任何修改操作。即只读视图。
视图 创建视图 举例: create view emp_1300 as select * from myemp where sal>1300; create or replace view emp_1300 as select * from myemp where sal>1500; create view eview as select a.*, dname,loc from emp a, dept b where a.deptno=b.deptno; create view emp_1300 as select * from myemp where sal>1300 with read only;----创建只读视图
视图 更新视图 更新视图必须满足的条件 在视图中使用DML语句只能修改一个底层的基表。只能修改键值保存表。(如果基表的主键在视图中也为主键,则称这个表为键值保存表。) 如果对记录的修改违反了基表的约束条件,则无法更新视图。 如果创建的视图包含连接运算符、DISTINCT运算符、集合运算符、聚合函数和GROUP BY子句,则将无法更新视图。 如果创建的视图包含伪列或表达式,则将无法更新视图。 不能有WITH READ ONLY修饰。
视图 删除视图 语法: DROP VIEW viewname;
序列 什么是序列 序列是为生成唯一数字列值创建的数据库对象。 什么时候用序列 序列通常用来自动生成主键或唯一键的值。序列可以按升序排列,也可以按降序排列。
序列 创建序列 语法: CREATE SEQUENCE sequence_name [START WITH integer] [INCREMENT BY integer] [MAXVALUE integer | NOMAXVALUE] [MINVALUE integer | NOMINVALUE] [CACHE integer] [CYCLE | NOCYCLE];
序列 其中: START WITH:指定要生成的第一个序号。对升序序列,其默认值为序列的最小值。对于降序序列,其默认值为序列的最大值。 INCREMENT BY:用于指定序列号之间的间隔。其默认值为1。如果n为正值,则生成的序列将按升序排列,如果n为负值,则生成的序列将按降序排列。 MAXVALUE:指定序列可以生成的最大值。 NOMAXVALUE:如果指定了NOMAXVALUE,Oracle将升序序列的最大值设为1027,将降序序列的最大值设为-1。这是默认选项。
序列 MINVALUE:指定序列的最小值。MINVALUE必须小于或等于START WITH的值,并且小于MAXVALUE。 NOMINVALUE:如果指定了NOMINVALUE,Oracle将升序序列的最小值设为1,将降序序列的最大值设为-1026。这是默认选项。 CYCLE:指定序列在达到最大值或最小值后,将继续从头开始生成值。 NOCYCLE:指定序列在达到最大值或最小值后,将不能再继续生成值。这是默认选项。
序列 创建序列 举例: create sequence seq start with 1 increment by 2 maxvalue 50 cache 10 cycle;
序列 访问序列 创建了序列之后,可以通过CURRVAL和NEXTVAL伪列来访问该序列的值。 NEXTVAL:创建序列后第一次使用NEXTVAL时,将返回该序列的初始值。以后在引用NEXTVAL时,将使用INCRMENT BY子句的值来增加序列值,并返回这个新值。 CURRVAL:返回序列的当前值,即最后一次引用NEXTVAL时返回的值。
序列 更改序列 ALTER SEQUENCE命令用于修改序列的定义。如果执行下列操作,则会修改序列: 举例: insert into student values(squ.nextval,'fangcheng','male'); 用select squ.currval from dual;查看序列的当前值。 更改序列 ALTER SEQUENCE命令用于修改序列的定义。如果执行下列操作,则会修改序列: 设置或删除MINVALUE或MAXVALUE。 修改增量值。
序列 语法: 举例: ALTER SEQUENCE sequence_name [INCREMENT BY integer] [MAXVALUE integer | NOMAXVALUE] [MINVALUE integer | NOMINVALUE] [CYCLE | NOCYCLE]; 注意:不能修改序列的START WITH参数。在修改序列时,应注意升序序列的最小值应小于最大值。 举例: alter sequence squ increment by 3 maxvalue 60 cycle;
序列 删除序列 语法: DROP SEQUENCE sequencename;
同义词 什么是同义词 同义词是数据库对象的一个别名,这些对象可以是表、视图、序列、过程、函数、程序包,甚至其他同义词。通过使用同义词,用户可以访问其它模式的数据库对象而无需指定模式前缀。例如,USER1要访问USER2的表emp,必须使用USER2.emp来引用,如果为USER1创建一个名为emp的同义词代表USER2.emp,那么USER1就可以用该同义词象访问自己的表一样引用USER2.emp了。
同义词 为什么使用同义词——同义词用途 简化SQL语句。 隐藏对象的名称和所有者,安全性。 提供对对象的公共访问。 同义词允许应用程序访问数据库对象,不论哪个用户或哪个数据库拥有该对象。但是同义词不能代替权限,在使用同义词之前要确保用户已经得到访问对象的权限。 可以通过同义词执行SELECT、INSERT、UPDATE、DELETE、GRANT和REVOKE等语句。同义词只是表的一个别名,因此对它的所有操作都会影响到表。
同义词 同义词类型 私有同义词 私有同义词只能被当前模式的用户访问。私有同义词名称不可与当前模式的对象名称相同。要在自身模式创建私有同义词,用户必须拥有CREATE SYNONYM系统权限。 公有同义词 公有同义词可被所有的数据库用户访问。公有同义词可以隐藏基表的身份,并降低SQL语言的复杂性。要创建公有同义词,用户必须拥有CREATE PUBLIC SYNONYM系统权限。公有同义词名称可以与当前模式对象名称相同,但是当公有对象和本地对象具有相同名称时,本地对象优先。
同义词 创建私有同义词 举例: 创建公有同义词 语法: CREATE [OR REPLACE] SYNONYM [schema.]synonym_name FOR [schema.]object_name; 举例: create synonym s for student; 创建公有同义词 CREATE [OR REPLACE] PUBLIC SYNONYM [schema.]synonym_name FOR [schema.]object_name; 首先在SYSTEM模式下向用户授予CREATE PUBLIC SYNONYM系统权限。 grant create public synonym to username; 然后在某用户模式下创建公有同义词。 create public synonym s for student;
同义词 删除同义词 语法: DROP SYNONYM synonymname;
索引 什么是索引 索引是一种结构,它基于一列过多列的值来提供快速访问表的数据 。 为什么使用索引 可以明确的创建索引,以加快对表执行DQL语句的速度,就象书的索引可以帮我们更快的查找信息一样。
索引 索引的优缺点 创建索引的原则 优点:提高查询速度 缺点:降低增删改的性能,创建索引需要维护所以降低性能 如果一张表很大,记录数很多,则创建索引 不要对一张表创建多个索引,因为会影响DML操作 为频繁使用的列创建索引
索引 使用索引 创建普通索引 系统会自动为主键加上索引 创建索引以后不需要再管,由数据库自己去维护 语法: 举例: CREATE INDEX index_name ON table_name (column_list); 举例: create index i on emp(ename);
索引 创建位图索引 原则: 如果取值范围很小而且是固定的,可以创建位图索引 语法: 举例: CREATE BITMAP INDEX index_name ON table_name (column_list); 举例: create bitmap index I on emp(deptno);
索引 删除索引 语法: DROP INDEX indexname;
数据字典 通过数据字典查询存在的数据库对象 查询视图信息: 查询序列信息: 查询同义词信息: 查询索引信息: select view_name from user_views; 查询序列信息: select sequence_name from user_sequences; 查询同义词信息: select synonym_name from user_synonyms; 查询索引信息: select index_name from user_indexes;