第4章-数据库常用对象对象PPT_第1页
第4章-数据库常用对象对象PPT_第2页
第4章-数据库常用对象对象PPT_第3页
第4章-数据库常用对象对象PPT_第4页
第4章-数据库常用对象对象PPT_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第4章 数据库对象 从数据库用户的角度看,数据库中的数据是以表、视图等方式存储的。此外,用户还可以通过为表创建索引,以提高查询的执行速度。在Oracle系统中,对表、视图和索引的创建、维护是通过模式实现的。在本章中,我们将初步介绍Oracle中的模式概念,并重点介绍如何在模式中创建基本对象基本表、索引以及其他数据库常用对象2本章学习目标: 理解什么是模式 了解模式对象与非模式对象之间的区别 初步掌握如何创建用户账户,并进行基本的管理 了解在创建表时Oracle允许使用的数据类型 掌握如何在SQL*Plus环境中创建、修改基本的表 了解其他索引的的创建和管理 了解索引组织表、临时表、视图、同义

2、词、序列的创建和基本使用34.1.1 用户和模式 l 在Oracle中,用户不能直接操作物理结构。用户可以直接操作的是表、索引和视图这样的逻辑对象。l 在Oracle数据库中,逻辑对象不是随意保存在数据库中的,Oracle是通过“模式”来组织和管理这些数据库对象。 l 一个模式下对象不能重名,但是两个不同模式下可以存在同名的对象。一个模式对象可能被存于多个数据文件中(因为存于某一个表空间,而表空间包含多个数据文件)概述 Oracle模式(方案)是逻辑结构与对象的集合 模式包含相关的数据库对象,与物理存储无关。 一个模式对应一个数据库用户,且跟用户同名。用户可以创建模式对象,用于包含或引用数据。

3、 模式对象的创建: OEM工具 语句对象对象名称名称作用作用TABLETABLE表表用于存储数据的基本结构用于存储数据的基本结构VIEWVIEW视图视图以不同的侧面反映表的数据,是一种逻以不同的侧面反映表的数据,是一种逻辑上的表辑上的表INDEXINDEX索引索引加快表的查询速度加快表的查询速度CLUSTERCLUSTER聚簇聚簇将不同表的字段并用的一种特殊结构的将不同表的字段并用的一种特殊结构的表集合表集合SEQUENCESEQUENCE序列序列生成数字序列,用于在插入时自动填充生成数字序列,用于在插入时自动填充表的字段表的字段SYNONYMSYNONYM同义词同义词为简化和便于记忆,给对象

4、起的别名为简化和便于记忆,给对象起的别名DATABASELINKDATABASELINK数据库链接数据库链接为访问远程对象创建的通道为访问远程对象创建的通道STOREDPROCEDURESTOREDPROCEDURE、FUNCTION存储过程和函数存储过程和函数存储于数据库中的可调用的程序和函数存储于数据库中的可调用的程序和函数PACKAGEPACKAGE、PACKAGEBODY包和包体包和包体将存储过程、函数及变量按功能和类别将存储过程、函数及变量按功能和类别进行捆绑进行捆绑TRIGGERTRIGGER触发器触发器由由DML操作或数据库事件触发的事件操作或数据库事件触发的事件处理程序处理程序

5、表表1 Oracle数据库模式对象数据库模式对象Oracle非模式对象 表空间 用户 角色 模式和用户一一对应关系,模式是对象集合,用户可以管理创建模式对象,有时可以替换使用,对应的名称是一致的。但概念是完全不同的。比如创建表时可以指定创建到某个模式,也可以说成用户。4.1.2 用户 用户的创建和授权(必须具有connect或create session权限) 创建表必须有create table和unlimited tablespace权限,resource权限比较大,包含了创建表等的权限。 默认用户创建对应的用户表空间是users,除非显式指定,临时表空间temp 还可以给用户指定使用的空

6、间配额 quota关键字 账户的锁定和解除锁定方法 删除用户,如果用户中有对象必须指定cascade选项84.2 表 在Oracle系统中,表是主要的模式对象,也是基本的数据存储结构。一个表通常由多个列(字段)组成,并且每个列都具有名称,表中的每一行存放一条信息。 4.2.1 创建表 用户必须具备 : CREATE TABLE的权限 一定的存贮空间 需要指定: 表名 列名、列的类型及列的宽度CREATE TABLE schema.table (column datatype DEFAULT expr;命名规则 必须以字母开头 长度为130 个字符 只能包含 AZ, az, 09, _, $和

7、# 对于同一个用户不能使用和其他对象相同的名字 不能是Oracle的保留字DEFAULT 选项l指定在插入数据时,列的默认值 hiredate DATE DEFAULT SYSDATE, l合法的值可以是字面值、表达式或SQL函数l非法的值是另一个列的名称或虚拟列l默认的数据类型必须和列的类型匹配数据类型类型类型描述描述VARCHAR2(size)变长字符串变长字符串CHAR(size) 固定长度字符串固定长度字符串NUMBER(p,s) 变长数值变长数值DATE,timestamp 日期和时间值,日期和时间值,date用户转换用户转换LONG 可存放高达可存放高达2GB的的变长字符数据变长字

8、符数据CLOB可存放高达可存放高达4GB的变长单字节数据的变长单字节数据RAW and LONG RAW 二进制数据二进制数据BLOB可存放高达可存放高达4GB二进制数据二进制数据BFILEBinary data stored in an external file; up to 4 gigabytes建议使用固定长度类型,nchar表示uncode类型,一个字符占两个字节位置,rowid和rownum的使用。创建表 SQL CREATE TABLE dept1 2(deptno NUMBER(2), 3 dname VARCHAR2(14), 4 loc VARCHAR2(13);l 创建表

9、l验证是否创建成功 SQL DESCRIBE dept1 Name Null? Type - - - DEPTNO NOT NULL NUMBER(2) DNAME VARCHAR2(14) LOC VARCHAR2(13)表特性 Tablespace子句指定表创建在哪个表空间,可以用user_tables查看表空间 Storage子句,指定表如何使用存储空间,可以根据不同表进行设置 设置数据块子句,主要减少行迁移 重做子句,指定对表的操作是否记录到日志 Cache子句可以指定将某个常用的表数据常驻内存的数据库高速缓存中。查询数据字典l 列出当前用户的表 l列出当前用户不同的对象类型l查询当前

10、用户的表、视图、同义词及序列SQL SELECTtable_name 2FROMuser_tables;SQL SELECTDISTINCT object_type 2FROM user_objects;SQL SELECT* 2FROMuser_catalog;用子查询创建表 在 CREATE TABLE 语句的AS子句中使用子查询可以在创建表的同时插入数据 所指定列的数量和类型必须和子查询中列的数量和类型相匹配 由列名和默认值定义列CREATE TABLE table column(, column.)AS subquery;使用子查询创建表 Name Null? Type - - - E

11、MPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) ANNSAL NUMBER HIREDATE DATESQL DESCRIBE dept30SQL CREATE TABLE dept30 2AS 3SELECT empno, ename, sal*12 ANNSAL, hiredate 4FROM emp 5WHERE deptno = 30;184.2.2 修改表 在表被创建之后,如果发现对表的定义有不满意的地方,还可以对表进行修改操作。对表进行修改操作包括:增加或删除表中的字段、改变表的存储参数设置,以及对表进行增加、删减和重命名等操作。同样对表的修改

12、即可以通过在SQL*Plus中使用ALTER TABLE语句实现,也可以通过OEM图形化工具实现。 ALTER TABLE 语句 使用 ALTER TABLE 语句可以: 添加一个列 修改已存在的列 为新列定义默认值ALTER TABLE tableADD (column datatype DEFAULT expr , column datatype.);ALTER TABLE tableMODIFY (column datatype DEFAULT expr , column datatype.);添加新列 EMPNO ENAME ANNSAL HIREDATE - - - 7698 BLA

13、KE 3420001-MAY-81 7654 MARTIN 1500028-SEP-81 7499 ALLEN 1920020-FEB-81 7844 TURNER 1800008-SEP-81. EMPNO ENAME ANNSAL HIREDATE - - - 7698 BLAKE 3420001-MAY-81 7654 MARTIN 1500028-SEP-81 7499 ALLEN 1920020-FEB-81 7844 TURNER 1800008-SEP-81. JOB JOB添加新列 使用 ADD 子句添加新列 columns. EMPNO ENAME ANNSAL HIREDA

14、TE JOB- - - - - 7698 BLAKE 34200 01-MAY-81 7654 MARTIN 15000 28-SEP-81 7499 ALLEN 19200 20-FEB-81 7844 TURNER 18000 08-SEP-81.6 rows selected.SQL ALTER TABLE dept30 2 ADD (job VARCHAR2(9);l新列成为表的最后一列修改列 可以修改列的数据类型、长度及默认值 改变列的默认值仅仅影响后来插入的新记录 删除列,alter table t_name drop column col_n(删除一个列的话必须带column关键

15、字,如果两个以上的列不能带关键字,并且用小括号括起来)ALTER TABLEdept30MODIFY(ename VARCHAR2(15); 设置列为无用状态 Alter table emp set unused(job,sal) 数据字典user_unused_col_tabs,all_unused_col_tabs Alter table emp drop unused column 调整表特性 Move子句 手动给表分配存储空间 回收无用表空间244.2.3 删除表定义 当删除表定义时,需要注意用户一般情况下只能删除自己模式中的表,如果用户要删除其他模式中的表,则用户必须具有DROP A

16、NY TABLE系统权限。要删除不再需要的表,可以使用DROP TABLE语句。如下面的语句删除了表EMPLOYEE。 删除表 表中的所有数据和结构都被删除 任何悬而未决的事务都将被提交 所有的索引被删除. 不能回滚该语句SQL DROP TABLE dept30;4.2.4 修改对象的名称 要修改表、视图、序列或同义词的名称,可以使用RENAME 语句 必须拥有对象的所有权.SQL RENAME dept1 TO department;4.2.5 截断表 TRUNCATE TABLE 语句: 删除表中所有记录 释放该表的存储空间 使用TRUNCATE移除后不能回滚 换一种方法可以使用DELE

17、TE语句删除记录SQL TRUNCATE TABLE department; 4.2.6 给表添加注释 使用COMMENT语句,可以为表或列添加注释 注释可以通过以下字典表查询 ALL_COL_COMMENTS USER_COL_COMMENTS ALL_TAB_COMMENTS USER_TAB_COMMENTSSQL COMMENT ON TABLE emp 2 IS Employee Information; 4.3 数据完整性(约束) 数据库不仅仅是存储数据,它也必须保证所保存的数据的正确性。如果数据不准确或不一致,那么该数据的完整性可能会受到破坏,从而给数据库本身的可靠性带来问题。为

18、了维护数据库中数据的完整性,在创建表时常常需要定义一些约束。通过为表中的字段定义约束,可以防止将错误的数据插入到表中。对约束的定义即可以在CREATE TABLE语句中进行,也可以在ALTER TABLE语句中进行。 4.3.1 什么是约束 约束在表一级实施相应规则 约束可以阻止删除和其它表具有相关性的表 以下是Oracle中有效的约束类型: NOT NULL UNIQUE Key PRIMARY KEY FOREIGN KEY CHECK约束准则 给约束命名或者由Oreacle服务器产生一个形式为SYS_Cn的名称 创建约束: 创建表的同时便创建约束 表创建以后再创建约束 在列或者表一级定义

19、约束 在数据字典中可以查询约束4.3.2 定义约束CREATE TABLE schema.table (column datatype DEFAULT exprcolumn_constraint,table_constraint);CREATE TABLE emp( empno NUMBER(4), ename VARCHAR2(10), deptno NUMBER(7,2) NOT NULL, CONSTRAINT emp_empno_pk PRIMARY KEY (EMPNO);定义约束 列约束级 表约束级column CONSTRAINT constraint_name constrai

20、nt_type,column,. CONSTRAINT constraint_name constraint_type (column, .),NOT NULL约束 确保该列不允许存放空值 EMPNO ENAME JOB . COMM DEPTNO 7839 KINGPRESIDENT 10 7698 BLAKEMANAGER 30 7782 CLARKMANAGER 10 7566 JONESMANAGER 20 .NOT NULL 约束 在列一级上定义约束SQL CREATE TABLE employee( 2 empno NUMBER(4), 3enameVARCHAR2(10) NOT

21、 NULL, 4jobVARCHAR2(9), 5mgrNUMBER(4), 6hiredate DATE, 7salNUMBER(7,2), 8 commNUMBER(7,2), 9deptnoNUMBER(7,2) NOT NULL);UNIQUE 约束 DEPTNO DNAME LOC - - - 10 ACCOUNTING NEW YORK 20 RESEARCHDALLAS 30 SALESCHICAGO 40 OPERATIONS BOSTON 50 SALESDETROIT 60 BOSTONSALESUNIQUE 约束 可以定义在表或列一级SQL CREATE TABLE de

22、ptment( 2 deptno NUMBER(2), 3dname VARCHAR2(14), 4loc VARCHAR2(13), 5CONSTRAINT dept_dname_uk UNIQUE(dname);PRIMARY KEY 约束 DEPTNO DNAME LOC - - - 10 ACCOUNTING NEW YORK 20 RESEARCHDALLAS 30 SALESCHICAGO 40 OPERATIONS BOSTON 20 MARKETINGDALLAS FINANCENEW YORK-PRIMARY KEY 约束 可以定义在表或列一级SQL CREATE TABLE

23、 deptment( 2 deptno NUMBER(2), 3dname VARCHAR2(14), 4loc VARCHAR2(13), 5CONSTRAINT dept_dname_uk UNIQUE (dname), 6CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno);FOREIGN KEY 约束 DEPTNO DNAME LOC - - - 10 ACCOUNTING NEW YORK 20 RESEARCHDALLAS . EMPNO ENAME JOB . COMM DEPTNO 7839 KINGPRESIDENT 10 7698 BL

24、AKEMANAGER 30 . 7571 FORDMANAGER . 200 9 7571 FORDMANAGER . 200- -FOREIGN KEY 约束 可以定义在表或列一级SQL CREATE TABLE employee( 2 empno NUMBER(4), 3enameVARCHAR2(10) NOT NULL, 4jobVARCHAR2(9), 5mgrNUMBER(4), 6hiredate DATE, 7salNUMBER(7,2), 8 commNUMBER(7,2), 9deptnoNUMBER(7,2) NOT NULL, 10CONSTRAINT emp_dept

25、no_fk FOREIGN KEY (deptno) 11REFERENCES dept (deptno);FOREIGN KEY 约束中的关键字 FOREIGN KEY在表或列一级上定义外键 REFERENCES标识父表及相应的列 ON DELETE CASCADE如果删除父表中的记录则允许级联删除子表中相关连的记录CHECK约束 定义每条记录都必须满足的条件 表达式不允许使用: 对伪列的引用,例如: CURRVAL, NEXTVAL, LEVEL及 ROWNUM 可以调用SYSDATE, UID, USER及 USERENV 函数 对其它记录其它值的查询., deptnoNUMBER(2)

26、, CONSTRAINT emp_deptno_ck CHECK (DEPTNO BETWEEN 10 AND 99),.添加约束 添加、删除但不是删除约束 启用一个已经禁用的约束 使用MODIFY子句增加NOT NULL约束 ALTER TABLE table ADD CONSTRAINT constraint type (column);添加约束 为EMP表添加一个 FOREIGN KEY约束,指定雇员的管理员编号必须是在EMP表中已经存在的雇员的雇员编号。SQL ALTER TABLE emp 2 ADD CONSTRAINT emp_mgr_fk 3 FOREIGN KEY(mgr)

27、REFERENCES emp(empno);删除约束 从 EMP表删除管理员约束SQL ALTER TABLE emp 2 DROP CONSTRAINT emp_mgr_fk;l从DEPT表删除主键约束PRIMARY KEY,同时删除也删除了与该约束关联的EMP表DEPTNO上的外键 FOREIGN KEY约束。SQL ALTER TABLEdept 2 DROP PRIMARY KEY CASCADE;禁用约束 在ALTER TABLE 语句中使用DISABLE子句可以使约束失效 使用CASCADE 选项可以使与该约束是从属关系的约束同时失效SQL ALTER TABLEdeptment

28、2 DISABLE CONSTRAINTdept_deptno_pk CASCADE;启用约束 使用ENABLE子句可以激活已经禁用的约束 如果您启用唯一UNIQUE或主键PRIMARY KEY约束,唯一 UNIQUE或主键 PRIMARY KEY索引便自动创建SQL ALTER TABLEdeptment 2 ENABLE CONSTRAINTdept_deptno_pk;查询约束 查询 USER_CONSTRAINTS表可以检索出所有约束名称及定义CONSTRAINT_NAME C SEARCH_CONDITION- - -DEPT_DEPTNO_CK C deptno BETWEEN 1

29、0 AND 99DEPT_DEPTNO_PK PDEPT_DNAME_UK USQL SELECT constraint_name, constraint_type, 2 search_condition 3 FROM user_constraints 4 WHERE table_name = DEPTMENT;查询与约束相关的列CONSTRAINT_NAME COLUMN_NAME- -EMP_DEPTNO_FK DEPTNOEMP_EMPNO_PK EMPNOEMP_MGR_FK MGRSYS_C00674 EMPNOSYS_C00675 DEPTNOSQL SELECTconstrain

30、t_name, column_name 2 FROMuser_cons_columns 3 WHEREtable_name = DEPTMENT; 在 USER_CONS_COLUMNS中查询与约束相关的列小结 在Oracle中可以创建下列类型的约束: NOT NULL UNIQUE key PRIMARY KEY FOREIGN KEY CHECK 通过数据字典表 USER_CONSTRAINTS可以查询约束名称及其定义。4.4 查看表信息 在Oracle系统中,用户可以通过数据字典或OEM图形界面查询Oracle系统内部表和用户创建表的信息。对于数据库管理员而言,可以利用ANALYZE语句

31、可以对表进行分析,通过分析可以获取关于指定对象的状态和统计信息,并且能够对指定对象的存储格式进行验证。分析表存储空间 验证存储结构 查看统计信息 查看链接记录和迁移记录 4.4 索引 索引(INDEX)是为了加快数据的查找而创建的数据库对象,特别是对大表,索引可以有效地提高查找速度,也可以保证数据的惟一性。索引是由Oracle自动使用和维护的,一旦创建成功,用户不必对索引进行直接的操作。索引是独立于表的数据库结构,即表和索引是分开存放的,当删除索引时,对拥有索引的表的数据没有影响。 在创建PRIMARY KEY和UNIQUE约束条件时,系统将自动为相应的列创建惟一(UNIQUE)索引。索引的名

32、字同约束的名字一致。 索引有两种:B*树索引和位图(BITMAP)索引。 B*树索引是通常使用的索引,也是默认的索引类型。在这里主要讨论B*树索引。B*树是一种平衡2叉树,左右的查找路径一样。这种方法保证了对表的任何值的查找时间都相同。 B*树索引可分为:惟一索引、非惟一索引、一列简单索引和多列复合索引。 创建索引一般要掌握以下原则:只有较大的表才有必要建立索引,表的记录应该大于50条,查询数据小于总行数的2%4%。虽然可以为表创建多个索引,但是无助于查询的索引不但不会提高效率,还会增加系统开销。因为当执行DML操作时,索引也要跟着更新,这时索引可能会降低系统的性能。一般在主键列或经常出现在W

33、HERE子句或连接条件中的列建立索引,该列称为索引关键字。索引的创建CREATE UNIQUE|BITMAP INDEX 索引索引名名 ON 表名表名(列名列名1,列名,列名2,.);其中:其中:UNIQUE代表创建惟一索引,不指明为创建非惟一代表创建惟一索引,不指明为创建非惟一索引。索引。BITMAP 代表创建位图索引,如果不指明该参数,代表创建位图索引,如果不指明该参数,则创建则创建B*树索引。列名是创建索引的关键字列,可以树索引。列名是创建索引的关键字列,可以是一列或多列。是一列或多列。删除索引的语法DROP INDEX 索引名;删除索引的人应该是索引的创建者或拥有DROP ANY IN

34、DEX系统权限的用户。索引的删除对表没有影响。查看索引通过查询数据字典USER_INDEXES可以检查创建的索引。通过查询数据字典USER_IND_COLUMNS可以检查索引的列。【训练1】 显示emp表的索引:SELECT INDEX_NAME, INDEX_TYPE, UNIQUENESS FROM USER_INDEXES WHERE TABLE_NAME=EMP; 执行结果: INDEX_NAME - - E M P _ J O B S A L N O R M A L NONUNIQUE PK_EMP NORMAL UNIQUE 说明:由本训练可见,emp表共有两个索引, 其中EMP_

35、JOBSAL是刚刚创建的,属于非惟一索引。PK_EMP为生成主键时系统创建的索引,属于惟一索引。视图 视图是基于一张表或多张表或另外一个 视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。通过视图来查看表,就像是从不同的角度来观察一个(或多个)表。 视图有如下一些优点: 可以提高数据访问的安全性,通过视图往往只可 以访问数据库中表的特定部分,限制了用户访问表的全部行和列。 简化了对数据的查询,隐藏了查询的复杂性。 视图的数据来自一个复杂的查询,用户对视图的检索却

36、很简单。 一个视图可以检索多张表的数据,因此用户通过 访问一个视图,可完成对多个表的访问。 视图是相同数据的不同表示,通过为不同的用户 创建同一个表的不同视图,使用户可分别访问同一个表的不同部分。 视图可以在表能够使用的任何地方使用,但在对 视图的操作上同表相比有些限制,特别是插入和修改操作。对视图的操作将传递到基表,所以在表上定义的约束条件和触发器在视图上将同样起作用。 视图的创建创建视图需要CREAE VIEW系统权限,视图的创建语法如下:CREATE OR REPLACE FORCE|NOFORCE VIEW 视图名(别名1,别名2.)AS 子查询 WITH CHECK OPTION C

37、ONSTRAINT 约束名WITH READ ONLY其中:OR REPLACE 表示替代已经存在的视图。FORCE表示不管基表是否存在,创建视图。NOFORCE表示只有基表存在时,才创建视图,是默认值。 别名是为子查询中选中的列新定义的名字,替代 查询表中原有的列名。 子查询是一个用于定义视图的SELECT查询语句, 可以包含连接、分组及子查询。 WITH CHECK OPTION表示进行视图插入或修改 时必须满足子查询的约束条件。后面的约束名是该约束条件的名字。 WITH READ ONLY 表示视图是只读的。删除视图 DROP VIEW 视图名; 删除视图者需要是视图的建立者或者拥有 D

38、ROP ANY VIEW权限。视图的删除不影响基表,不会丢失数据。视图的操作l对视图经常进行的操作是查询操作,但也可以在一对视图经常进行的操作是查询操作,但也可以在一定条件下对视图进行插入、删除和修改操作。定条件下对视图进行插入、删除和修改操作。l对视图的这些操作最终传递到基表。但是对视图的对视图的这些操作最终传递到基表。但是对视图的操作有很多限定。如果视图设置了只读,则对视图只操作有很多限定。如果视图设置了只读,则对视图只能进行查询,不能进行修改操作。能进行查询,不能进行修改操作。l基表本身的限制和约束也必须要考虑。如果生成子基表本身的限制和约束也必须要考虑。如果生成子查询的语句是一个分组查

39、询,或查询中出现计算列,查询的语句是一个分组查询,或查询中出现计算列,这时显然不能对表进行插入。这时显然不能对表进行插入。l主键和主键和NOT NULL列如果没有出现在视图的子查询列如果没有出现在视图的子查询中,也不能对视图进行插入。在视图中插入的数据,中,也不能对视图进行插入。在视图中插入的数据,也必须满足基表的约束条件。也必须满足基表的约束条件。视图的查看USER_VIEWS字典中包含了视图的定义。USER_UPDATABLE_COLUMNS字典包含了哪些列可以更新、插入、删除。USER_OBJECTS字典中包含了用户的对象。可以通过DESCRIBE命令查看字典的其他列信息。在这里给出一个

40、训练例子。同义词 同义词(SYNONYM)是为模式对象起的别名, 可以为表、视图、序列、过程、函数和包等数据库模式对象创建同义词。 同义词有两种:公有同义词和私有同义词。公有同义词是对所有用户都可用的。创建公有同义词必须拥有系统权限CREATE PUBLIC SYNONYM; 创建私有同义词需要CREATE SYNONYM系统权限。私有同义词只对拥有同义词的账户有效,但私有同义词也可以通过授权,使其对其他用户有效。 同义词通过给本地或远程对象分配一个通用或简单的名称,隐藏了对象的拥有者和对象的真实名称,也简化了SQL语句。 如果同义词同对象名称重名,私有同义词又同公有同义词重名,那么,识别的顺

41、序是怎样的呢?如果存在对象名,则优先识别,其次识别私有同义词,最后识别公有同义词。比如,执行以下的SELECT语句: SELECT * FROM ABC; 如果存在表ABC,就对表ABC执行查询语句; 如果不存在表ABC,就去查看是否有私有同义词ABC,如果有就对ABC执行查询(此时ABC是另外一个表的同义词);如果没有私有同义词ABC,则去查找公有同义词;如果找不到,则查询失败。同义词的创建和使用CREATE PUBLIC SYNONYM 同义词名 FOR 模式名.对象名数据库链路名;其中: PUBLIC代表创建公有同义词,若省略则代表创建私有同义词。模式名代表拥有对象的模式账户名。 数据库

42、链路名是指向远程对象的数据库链接。 删除同义词的语法如下 DROP SYNONYM 同义词名; 删除同义词的人必须是同义词的拥有者 或有DROP ANY SYNONYM权限的人。删除同义词不会删除对应的对象。同义词的查看通过查询数据字典USER_OBJECTS和USER_SYNONYMS,可以查看同义词信息 4 系统定义同义词 系统为常用的对象预定义了一些同义词, 利用它们可以方便地访问用户的常用对象。这些同义词如表5-2所示。表5-2 Oracle数据库模式对象序列 序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。其主要的用途是生成表

43、的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。 创建序列需要CREATE SEQUENCE系统权限。CREATE SEQUENCE 序列名 INCREMENT BY nSTART WITH nMAXVALUE n|NOMAXVALUEMINVALUE n|NOMINVALUECYCLE|NOCYCLECACHE n|NOCACHE; INCREMENT BY 用于定义序列的步长,如果 省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。 START WITH 定义序列的初始值(即产生的第 一个值),默认为1。 MAXVALUE 定义序列生成器能产

44、生的最大值。 选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。 MINVALUE定义序列生成器能产生的最小值。 选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。 CYCLE和NOCYCLE 表示当序列生成器的 值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生

45、错误。 CACHE(缓冲)定义存放序列的内存块的大小,默认 为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。 DROP SEQUENCE 序列名; 删除序列的人应该是序列的创建者或拥有 DROP ANY SEQUENCE系统权限的用户。序列一旦删除就不能被引用了。 序列的某些部分也可以在使用中进行修改, 但不能修改SATRT WITH选项。对序列的修改只影响随后产生的序号,已经产生的序号不变。修改序列的语法如下:删除序列删除序列ALTER SEQUENCE 序列名 INCREMENT BY nMAXVALUE n|NOMAXVALUEMINVALUE n

46、|NOMINVALUECYCLE|NOCYCLECACHE n|NOCACHE; 方法是使用CURRVAL和NEXTVAL来引用序列的值。 调用NEXTVAL将生成序列中的下一个序列号,调用 时要指出序列名,即用以下方式调用: 序列名.NEXTVAL CURRVAL用于产生序列的当前值,无论调用多少 次都不会产生序列的下一个值。如果序列还没有通过调用NEXTVAL产生过序列的下一个值,先引用CURRVAL没有意义。调用CURRVAL的方法同上,要指出序列名,即用以下方式调用: 序列名.CURRVAL.序列的使用序列的使用 产生序列的第一个值: SELECT ABC.NEXTVAL FROM D

47、UAL; 执行结果: NEXTVAL - 10 产生序列的下一个值: SELECT ABC.NEXTVAL FROM DUAL; 执行结果: NEXTVAL - 11 SELECT ABC.CURRVAL FROM DUAL; 执行结果: CURRVAL - 11 说明:第一次调用NEXTVAL产生序列的 初始值,根据定义知道初始值为10。第二次调用产生11,因为序列的步长为1。调用CURRVAL,显示当前值11,不产生新值。 序列的应用:产生员工序列号。 创建序列: CREATE SEQUENCE EMPID INCREMENT BY 1 START WITH 10 MAXVALUE 999

48、9999 NOCYCLE NOCACHE; 执行结果: 序列已创建。 使用序列生成新的员工编号: INSERT INTO emp(empno) VALUES (TO_CHAR(EMPID.NEXTVAL); 注意:通过查询看到插入的序号是连续的,但如果在插入的过程中使用了回退或发生了系统崩溃等情况,可能会产生序号的间隔。 同过数据字典USER_OBJECTS可以查看 用户拥有的序列。 通过数据字典USER_SEQUENCES可以 查看序列的设置。 【训练1】 查看用户的序列: SELECT SEQUENCE_NAME,MIN_VALUE, MAX_VALUE,INCREMENT_BY,LAST_NUMBER FROM USER_SEQU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论