资源预览内容
第1页 / 共134页
第2页 / 共134页
第3页 / 共134页
第4页 / 共134页
第5页 / 共134页
第6页 / 共134页
第7页 / 共134页
第8页 / 共134页
第9页 / 共134页
第10页 / 共134页
亲,该文档总共134页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第6章数据库对象的创建与管理主要内容主要内容lOracle数据库对象概述l表的创建与管理l索引的创建与管理l视图的创建与管理l序列l分区表与分区索引6.1 Oracle数据库对象概述数据库对象概述l模式的概念l案例数据库模式的创建6.1.1 模式的概念模式的概念l模式概念是指一系列逻辑数据结构或对象的集合。是指一系列逻辑数据结构或对象的集合。 l模式与用户的关系模式与用户相对应,一个模式只能被一个数据库用户模式与用户相对应,一个模式只能被一个数据库用户所拥有,并且模式的名称与这个用户的名称相同。所拥有,并且模式的名称与这个用户的名称相同。通常情况下,用户所创建数据库对象都保存在与自己通常情况下,用户所创建数据库对象都保存在与自己同名的模式中。同名的模式中。同一模式中数据库对象的名称必须惟一,而在不同模同一模式中数据库对象的名称必须惟一,而在不同模式中的数据库对象可以同名。式中的数据库对象可以同名。默认情况下,用户引用的对象是与自己同名模式中的默认情况下,用户引用的对象是与自己同名模式中的对象,如果要引用其他模式中的对象,需要在该对象对象,如果要引用其他模式中的对象,需要在该对象名之前指明对象所属模式。名之前指明对象所属模式。 l模式选择与切换如果用户以如果用户以NORMAL身份登录,则进入同名模式;身份登录,则进入同名模式;若以若以SYSDBA身份登录,则进入身份登录,则进入SYS模式;模式;如果以如果以SYSOPER身份登录,则进入身份登录,则进入PUBLIC模式。模式。6.1.2 案例数据库模式的创建案例数据库模式的创建l创建ehr用户,并为其授权,方法为:CONNECT sys/tiger HUMAN_RESOURCE AS SYSDBACREATE USER ehr IDENTIFIED BY ehr DEFAULT TABLESPACE USERS;GRANT CONNECT,RESOURCE,CREATE VIEW TO ehr;6.2 表的创建与管理表的创建与管理l利用CREATE TABLE语句创建表l案例数据库中表的创建l利用子查询创建表l修改表l修改约束l查询表l删除表6.2.1 利用利用CREATE TABLE语句语句创建表创建表lCREATE TABLE语句l表名l数据类型l约束l表参数(1) CREATE TABLE语句语句 l使用CREATE TABLE语句 创建表CREATE TABLE table_name(column_name datatype column_level_constraint,column_name datatype column_level_constraint,table_level_constraint) parameter_list;lCREATE TABLE emp ( lemp_id NUMBER(6,0) PRIMARY KEY, lfirst_name VARCHAR2(20), llast_name VARCHAR2(25), lemail VARCHAR2(25) UNIQUE, ljob_id VARCHAR2(10), lsalary NUMBER(8,2), lcommission_pct NUMBER(2,2), lmanager_id NUMBER(6,0), ldepartment_id NUMBER(4,0), lCONSTRAINT c_salary CHECK(salary0)l) lTABLESPACE USERS;(2)表名)表名l必须是合法标识符,长度为必须是合法标识符,长度为130 字节,并且以字节,并且以字母开头,可以包含字母字母开头,可以包含字母(AZ,az)、数字、数字(09),下划线(),下划线(_)、美元符号()、美元符号($)和井)和井号(号(#)。此外,表名称不能是)。此外,表名称不能是Oracle数据库的数据库的保留字保留字 (3)数据类型)数据类型l字符类型l数字类型l日期类型lLOB类型l二进制类型 l行类型 lCHAR(n)定长字符串,n的取值范围为1-2000字节lVARCHAR2(n)可变字符串,n取值范围为1-4000字节自动调整数据长度字符类型字符类型数字类型数字类型lNUMBER(m,n)用于存储整数和实数。用于存储整数和实数。m表示数值的总位数(精度),表示数值的总位数(精度),取值范围为取值范围为138,默认为,默认为38;n表示小数位数,若表示小数位数,若为负数则表示把数据向小数点左边舍入,默认值为为负数则表示把数据向小数点左边舍入,默认值为0。 日期类型日期类型lDATE可以存储的日期范围为公元前可以存储的日期范围为公元前4712年年1月月1日到公元日到公元4712年年1月月1日,由世纪、年、月、日、时、分、秒日,由世纪、年、月、日、时、分、秒组成。可以在用户当前会话中使用参数组成。可以在用户当前会话中使用参数NLS_DATE_FORMAT指定日期和时间的格式,或指定日期和时间的格式,或者使用者使用TO_DATE函数,将表示日期和时间的字符串函数,将表示日期和时间的字符串按特定格式转换成日期和时间。按特定格式转换成日期和时间。lTIMESTAMP(n):表示时间戳,是DATE 数据类型的扩展,允许存储小数形式的秒值。n表示秒的小数位数,取值范围为19,默认值为6。LOB类型类型lCLOB用于存储可变长度的字符数据,如文本文件等,最大数据量为用于存储可变长度的字符数据,如文本文件等,最大数据量为4 GB。lNCLOB用于存储可变长度的用于存储可变长度的Unicode字符数据,最大数据量为字符数据,最大数据量为4 GB。lBLOB用于存储大型的、未被结构化的可变长度的二进制数据(如二进用于存储大型的、未被结构化的可变长度的二进制数据(如二进制文件、图片文件、音频和视频等非文本文件),最大数据量为制文件、图片文件、音频和视频等非文本文件),最大数据量为4 GB。lBFILE用于存储指向二进制格式文件的定位器,该二进制文件保存在数用于存储指向二进制格式文件的定位器,该二进制文件保存在数据库外部的操作系统中,文件最大为据库外部的操作系统中,文件最大为4 GB。二进制类型二进制类型 lRAW(n)用于存储可变长度的二进制数据,用于存储可变长度的二进制数据,n表示数据长度,取表示数据长度,取值范围为值范围为12000字节;字节;lLONG RAW用于存储可变长度的二进制数据,最大存储数据量为用于存储可变长度的二进制数据,最大存储数据量为2 GB。行类型行类型lROWID行标识符,表中行的物理地址的伪列类型。行标识符,表中行的物理地址的伪列类型。ROWID类型数据由类型数据由18位十六进制数构成,包括对象编号、文位十六进制数构成,包括对象编号、文件编号、数据块编号和块内行号。件编号、数据块编号和块内行号。lUROWID行标识符,用于表示索引化表中行的逻辑地址。行标识符,用于表示索引化表中行的逻辑地址。(4)约束)约束l约束作用是在表中定义的用于维护数据库完整性的一些规则。是在表中定义的用于维护数据库完整性的一些规则。通过对表中列定义约束,可以防止在执行通过对表中列定义约束,可以防止在执行DML操作时,操作时,将不符合要求的数据插入到表中。将不符合要求的数据插入到表中。l约束类型PRIMARY KEYUNIQUECHECKFOREIGN KEY NULL/NOT NULL PRIMARY KEYl特点定义主键,起惟一标识作用,其值不能为定义主键,起惟一标识作用,其值不能为NULL,也,也不能重复;不能重复;一个表中只能定义一个主键约束;一个表中只能定义一个主键约束;建立主键约束的同时,在该列上建立一个惟一性索引,建立主键约束的同时,在该列上建立一个惟一性索引,可以为它指定存储位置和存储参数;可以为它指定存储位置和存储参数;主键约束可以是列级约束,也可以是表级约束。主键约束可以是列级约束,也可以是表级约束。UNIQUEl特点定义为惟一性约束的某一列或多个列的组合的取值必定义为惟一性约束的某一列或多个列的组合的取值必须惟一;须惟一;如果某一列或多个列仅定义惟一性约束,而没有定义如果某一列或多个列仅定义惟一性约束,而没有定义非空约束,则该约束列可以包含多个空值;非空约束,则该约束列可以包含多个空值;Oracle自动在惟一性约束列上建立一个惟一性索引,自动在惟一性约束列上建立一个惟一性索引,可以为它指定存储位置和存储参数;可以为它指定存储位置和存储参数;惟一性约束可以是列级约束,也可以是表级约束。惟一性约束可以是列级约束,也可以是表级约束。 l在一个基本表中只能定义一个PRIMARY KEY约束,但可定义多个UNIQUE约束;l对于指定为PRIMARY KEY的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于UNIQUE所约束的唯一键,则允许为空。l不能为同一个列或一组列既定义UNIQUE约束,又定义PRIMARY KEY约束。PRIMARY KEY与与UNIQUE比较比较CHECK l特点检查约束用来限制列值所允许的取值范围,其表达式检查约束用来限制列值所允许的取值范围,其表达式中必须引用相应列,并且表达式的计算结果必须是一中必须引用相应列,并且表达式的计算结果必须是一个布尔值;个布尔值;约束表达式中不能包含子查询,也不能包含约束表达式中不能包含子查询,也不能包含SYSDATE、USER等等SQL函数,和函数,和ROWID、ROWNUM等伪列;等伪列;一个列可以定义多个检查约束;一个列可以定义多个检查约束;检查约束可以是列级约束,也可以是表级约束。检查约束可以是列级约束,也可以是表级约束。 l概念FOREIGN KEY约束指定某一个列或一组列作为约束指定某一个列或一组列作为外部键,其中,包含外部键的表称为从表,包含外外部键,其中,包含外部键的表称为从表,包含外部键所引用的主键或唯一键的表称主表。部键所引用的主键或唯一键的表称主表。系统保证从表在外部键上的取值要么是主表中某一系统保证从表在外部键上的取值要么是主表中某一个主键值或唯一键值,要么取空值。以此保证两个个主键值或唯一键值,要么取空值。以此保证两个表之间的连接,确保了实体的参照完整性。表之间的连接,确保了实体的参照完整性。FOREIGN KEYl特点定义外键约束的列的取值要么是主表参照列的值,要定义外键约束的列的取值要么是主表参照列的值,要么为空;么为空;外键列只能参照于主表中的主键约束列或惟一性约束外键列只能参照于主表中的主键约束列或惟一性约束列;列;可以在一列或多列组合上定义外键约束;可以在一列或多列组合上定义外键约束;外键约束可以是列级约束,也可以是表级约束。外键约束可以是列级约束,也可以是表级约束。NULL/NOT NULL l特点在同一个表中可以定义多个在同一个表中可以定义多个NOT NULL约束;约束;只能是列级约束。只能是列级约束。定义约束定义约束l列约束对某一个特定列的约束,包含在列定义中,直接跟在对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔该列的其他定义之后,用空格分隔,不必指定列名不必指定列名;l表约束与列定义相互独立,不包括在列定义中。通常用于对与列定义相互独立,不包括在列定义中。通常用于对多个列一起进行约束,与列定义用多个列一起进行约束,与列定义用,分隔。定义表分隔。定义表约束时必须指出要约束的那些列的名称。约束时必须指出要约束的那些列的名称。l定义列级约束的语法为:CONSTRAINT constraint_name constraint_type conditioin; l定义表级约束的语法为:CONSTRAINT constraint_nameconstraint_type(column1_name,column2_name,|condition);l注意Oracle约束通过名称进行标识。在定义时可以通过约束通过名称进行标识。在定义时可以通过CONSTRAINT关键字为约束命名。如果用户没有为关键字为约束命名。如果用户没有为约束命名,约束命名,Oracle将自动为约束命名。将自动为约束命名。 l创建一个student表。CREATE TABLE student( sno NUMBER(6) CONSTRAINT S_PK PRIMARY KEY,sname VARCHAR2(10) NOT NULL,sex CHAR(2) CONSTRAINT S_CK1 CHECK(sex in(M, F),sage NUMBER(6,2),CONSTRAINT S_CK2 CHECK( sage between 18 and 60);l创建一个course表,同时为主键约束列上的唯一性索引设置存储位置和存储参数,语句为 CREATE TABLE course( cno NUMBER(6) PRIMARY KEY, cname CHAR(20) UNIQUE USING INDEX TABLESPACE indx STORAGE( INITIAL 64K NEXT 64K); l创建一个SC表,语句为CREATE TABLE SC( sno NUMBER(6) REFERENCES student(sno), cno NUMBER(6) REFERENCES course(cno), grade NUMBER(5,2), CONSTRAINT SC_PK PRIMARY KEY(sno, cno) ); (5)表参数表参数lTABLESPACETABLESPACE子句用于指定表存储的表空间。子句用于指定表存储的表空间。 lSTORAGE STORAGE子句用于设置表的存储参数。若不指定,则继承表空子句用于设置表的存储参数。若不指定,则继承表空间的存储参数设置。间的存储参数设置。 NITIAL NEXTPCTINCREASEMINEXTENTSMAXEXTENTSBUFFER_POOL (KEEP、RECYCLE、DEFAULT) lSTORAGE参数设置需注意如果表空间管理方式为如果表空间管理方式为EXTENT MANAGEMENT LOCAL AUTOALLOCATE,则在,则在STORAGE中只中只能指定能指定INITIAL,NEXT和和MINEXTENTS这这3个参个参数;数;如果表空间管理方式为如果表空间管理方式为EXTENT MANAGEMENT LOCAL UNIFORM,则不能指定任何,则不能指定任何STORAGE子子句;句;如果表空间管理方式为如果表空间管理方式为EXTENT MANAGEMENT DICTIONARY,则在,则在STORAG中可以设置任何参数。中可以设置任何参数。l数据块管理参数 PCTFREE:用于指定数据块中必须保留的最小空闲:用于指定数据块中必须保留的最小空闲空间。空间。PCTUSED:用于指定当数据块空闲空间达到:用于指定当数据块空闲空间达到PCTFREE参数的限制后,数据块能够被再次使用前,参数的限制后,数据块能够被再次使用前,已占用的存储空间必须低于的比例。已占用的存储空间必须低于的比例。INITRANS:用于指定能够并发访问同一个数据块的:用于指定能够并发访问同一个数据块的事务的数量。事务的数量。MAXTRANS:用于指定能够并发访问同一个数据块:用于指定能够并发访问同一个数据块的事务的最大数量。的事务的最大数量。lLOGGING与NOLOGGING子句默认为默认为NOLOGGING,即表的创建操作不会记录到,即表的创建操作不会记录到重做日志文件中,尤其适合通过查询创建表的情况。重做日志文件中,尤其适合通过查询创建表的情况。使用使用LOGGING子句,表的创建操作(包括通过查询子句,表的创建操作(包括通过查询创建表时的插入记录操作)都将记录到重做日志文件创建表时的插入记录操作)都将记录到重做日志文件中。中。lPARALLEL、NOPARALLELlCACHE、NOCACHElMONITORING、NOMONITORING6.2.2 案例数据库中表的创建案例数据库中表的创建lCREATE TABLE regions( region_id NUMBER PRIMARY KEY, region_name VARCHAR2(25)TABLESPACE USERS;lCREATE TABLE countries ( country_id CHAR(2) PRIMARY KEY, country_name VARCHAR2(40), region_id NUMBER REFERENCES regions(region_id) ) TABLESPACE USERS;lCREATE TABLE locations ( location_id NUMBER(4) PRIMARY KEY, street_address VARCHAR2(40), postal_code VARCHAR2(12), city VARCHAR2(30) NOT NULL, state_province VARCHAR2(25), country_id CHAR(2) REFERENCES countries(country_id) )TABLESPACE USERS;lCREATE TABLE departments ( department_id NUMBER(4) PRIMARY KEY, department_name VARCHAR2(30) NOT NULL, manager_id NUMBER(6), location_id NUMBER(4) REFERENCES locations (location_id) ) TABLESPACE USERS;lCREATE TABLE jobs ( job_id VARCHAR2(10) PRIMARY KEY, job_title VARCHAR2(35) NOT NULL, min_salary NUMBER(6), max_salary NUMBER(6) ) TABLESPACE USERS;lCREATE TABLE employees ( employee_id NUMBER(6) PRIMARY KEY, first_name VARCHAR2(20), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25) NOT NULL UNIQUE, phone_number VARCHAR2(20), hire_date DATE NOT NULL, job_id VARCHAR2(10) NOT NULL REFERENCES jobs (job_id), salary NUMBER(8,2) CHECK (salary 0), commission_pct NUMBER(2,2), manager_id NUMBER(6), department_id NUMBER(4) REFERENCES departments(department_id) ) TABLESPACE USERS;lCREATE TABLE job_history ( employee_id NUMBER(6) NOT NULL REFERENCES employees(employee_id), start_date DATE NOT NULL, end_date DATE NOT NULL, job_id VARCHAR2(10) NOT NULL REFERENCES jobs(job_id), department_id NUMBER(4) REFERENCES departments(department_id), CONSTRAINT jhist_date_interval CHECK (end_date start_date), CONSTRAINT jhist_emp_id_st_date_pk PRIMARY KEY (employee_id, start_date) ) TABLESPACE USERS;lCREATE TABLE sal_grades ( grade NUMBER PRIMARY KEY, min_salary NUMBER(8,2), max_salary NUMBER(8,2) ) TABLESPACE USERS;lCREATE TABLE users( user_id NUMBER(2)PRIMARY KEY, user_name CHAR(20), password VARCHAR2(20) NOT NULL ) TABLESPACE USERS;6.2.3 利用子查询创建表利用子查询创建表l语法语法CREATE TABLE table_name(column_name column_level_constraint,column_name column_level_constraint,table_level_constraint) parameter_listAS subquery; l利用子查询创建表需要注意以下事项。通过该方法创建表时,可以修改表中列的名称,但是通过该方法创建表时,可以修改表中列的名称,但是不能修改列的数据类型和长度。不能修改列的数据类型和长度。源表中的约束条件和列的默认值都不会复制到新表中源表中的约束条件和列的默认值都不会复制到新表中子查询中不能包含子查询中不能包含LOB类型和类型和LONG类型列。类型列。当子查询条件为真时,新表中包含查询到的数据;当当子查询条件为真时,新表中包含查询到的数据;当子查询条件为假时,则创建一个空表。子查询条件为假时,则创建一个空表。l创建一个表,保存工资高于15000元的员工的员工号、员工姓名和部门号。 CREATE TABLE sub_emp1l(empno,fname,lname,deptno) AS SELECT employee_id,first_name, last_name,department_id FROM employees WHERE salary15000;l创建一个包含员工号、员工EMAIL、员工工资及部门号信息的空表,其中员工号为主键、EMAIL唯一。CREATE TABLE sub_emp2( employee_id PRIMARY KEY, email UNIQUE, salary,department_id) AS SELECT emp_id,email,salary,department_id FROM emp WHERE 1=2;6.2.4 修改表修改表l基本语法l列的添加、删除、修改l表参数修改l表结构重组l表重命名等l为表和列添加注释 ()修改表基本语法()修改表基本语法lALTER TABLE lADD 完整性约束定义lMODIFY lRENAME COLUMN oldname TO newnamelSET UNUSED COLUMN column /single columnlSET UNUSED COLUMNS(column1,column2)lDROP COLUMN /single columnlDROP /multi columnlDROP UNUSED COLUMNS()列的添加、删除、修改()列的添加、删除、修改 l添加列 语法语法ALTER TABLE table_name ADD(new_column_name datatypeNOT NULLDEFAULT value); 示例示例ALTER TABLE employee ADD(phone VARCHAR2(11),hiredate DATE DEFAULT SYSDATE NOT NULL);l修改列类型 语法语法ALTER TABLE table_name MODIFY column_name new_datatype; 修改表中列类型时,必须满足下列条件:修改表中列类型时,必须满足下列条件:可以增大字符类型列的长度和数值类型列的精度;如果字符类型列、数值类型列中数据满足新的长度、精度,则可以缩小类型的长度、精度;如果不改变字符串的长度,可以将VARCHAR2类型和CAHR类型转换;如果更改数据类型为另一种非同系列类型,则列中数据必须为NULL。 示例示例ALTER TABLE employee MODIFY ename CHAR(20);ALTER TABLE employee MODIFY phone NUMBER; l修改列名 语法语法ALTER TABLE table_name RENAME COLUMN oldname TO newname;示例示例 ALTER TABLE employee RENAME COLUMN ename TO employee_name; l删除列 直接删除列语法直接删除列语法ALTER TABLE table_name DROP COLUMN column_name|(column1_name,column2_name,)CASCADE CONSTRAINTS; 直接删除列示例直接删除列示例ALTER TABLE sc DROP COLUMN sno CASCADE CONSTRAINTS;ALTER TABLE employee DROP (phone,hiredate);将列标记为将列标记为UNUSED,然后进行删除。,然后进行删除。ALTER TABLE table_name SET UNUSED COLUMN column_name|(column1_name,column2_name,)CASCADE CONSTRAINTS; 示例示例ALTER TABLE player SET UNUSED COLUMN sage;ALTER TABLE player SET UNUSED (sname,resume);ALTER TABLE player DROP UNUSED COLUMNS; 6.2.5 修改约束修改约束l修改约束语法为:ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint_type(column1,)condition| MODIFY column NOT NULL|NULL| DROP CONSTRAINT constraint_name| PRIMARY KEY|UNIQUE(column)l创建一个player表CREATE TABLE player( ID NUMBER(6), sno NUMBER(6), sname VARCHAR2(10), sage NUMBER(6,2), resume VARCHAR2(1000) ); l添加主键约束ALTER TABLE player ADD CONSTRAINT P_PK PRIMARY KEY(ID);l添加惟一性约束ALTER TABLE player ADD CONSTRAINT P_UK UNIQUE(sname);l添加检查约束ALTER TABLE player ADD CONSTRAINT P_CK CHECK(sage BETWEEN 20 AND 30);l添加外键约束ALTER TABLE player ADD CONSTRAINT P_FK FOREIGN KEY(sno)REFERENCES student(sno) ON DELETE CASCADE;l添加空/非空约束为表列添加空为表列添加空/非空约束时必须使用非空约束时必须使用MODIFY子句代替子句代替ADD子句子句ALTER TABLE player MODIFY resume NOT NULL;ALTER TABLE player MODIFY resume NULL;l删除约束使用使用ALTER TABLEDROP语句删除已经定义的约语句删除已经定义的约束。束。可以通过直接指定约束的名称来删除约束,或指定约束可以通过直接指定约束的名称来删除约束,或指定约束的内容来删除约束。的内容来删除约束。l删除指定内容的约束ALTER TABLE player DROP UNIQUE(sname);l删除指定名称的约束ALTER TABLE player DROP CONSTRAINT P_CK; 6.2.6 查询表查询表lDBA_TABLESlALL_TABLESlUSER_TABLESlDBA_TAB_COLUMNSlALL_TAB_COLUMNSlUSER_TAB_COLUMNSl查询当前用户拥有的所有表的信息。SELECT table_name,tablespace_name,status,logging FROM user_tables;查询约束查询约束lALL_CONSTRAINTSlUSER_CONSTRAINTSlDBA_CONSTRAINTSlALL_CONS_COLUMNSlUSER_CONS_COLUMNSlDAB_CONS_COLUMNSl查询employees表中所有约束的名称与类型。SELECT constraint_name,constraint_type,status FROM user_constraints WHERE table_name=EMPLOYEES;l语法DROP TABLE table_nameCASCADE CONSTRAINTSPURGE l删除一个表同时,Oracle将执行下列操作:删除该表中所有记录;删除该表中所有记录;从数据字典中删除该表定义;从数据字典中删除该表定义;删除与该表相关的所有索引和触发器;删除与该表相关的所有索引和触发器;回收为该表分配的存储空间;回收为该表分配的存储空间;依赖于该表的数据库对象处于依赖于该表的数据库对象处于INVALID状态。状态。6.2.7 删除表删除表l注意在在Oracle 11g中,使用中,使用DROP TABLE语句删除一语句删除一个表时,并不立即回收该表的空间,而只是将表及其个表时,并不立即回收该表的空间,而只是将表及其关联对象的信息写入一个称为关联对象的信息写入一个称为“回收站回收站”(RECYCLEBIN)的逻辑容器中,从而可以实现)的逻辑容器中,从而可以实现闪回删除表操作。如果要回收该表空间,可以采用清闪回删除表操作。如果要回收该表空间,可以采用清空空“回收站回收站”(PURGE RECYCLEBIN)或在)或在DROP TABLE语句中使用语句中使用PURGE语句。语句。6.3 索引的创建与管理索引的创建与管理l索引概述l使用CREATE INDEX语句创建索引l案例数据库中索引的创建l删除索引l查询索引6.3.1 索引概述索引概述l索引是为了加速对表中元组的检索而创建的一种分散存储结构;l是对表而建立的,由除存放表的数据页面以外的索引页面组成,独立于被索引的表;l通过使用索引加速行的检索,但减慢更新的速度;l快速定位数据,减少磁盘 I/O;lOracle自动使用、维护索引索引类型索引类型lB-树索引l位图索引l函数索引l唯一性索引与非唯一性索引l单列索引与复合索引索引使用原则索引使用原则l导入数据后再创建索引 l在适当的表和字段上创建索引 l合理设置复合索引中列的顺序l限制表中索引的数目l选择存储索引的表空间6.3.2 使用使用CREATE INDEX语句创语句创建索引建索引l创建索引l修改索引l监视索引 l删除索引l索引的查询l语法CREATE UNIQUE|BITMAP INDEX index_nameON table_name(column_nameASC|DESC,|expression) REVERSEparameter_list;l说明UNIQUE表示建立惟一性索引;表示建立惟一性索引;BITMAP表示建立位图索引;表示建立位图索引;ASC/DESC用于指定索引值的排列顺序,用于指定索引值的排列顺序,ASC表示按升序排序,表示按升序排序,DESC表示按降序排序,缺省值为表示按降序排序,缺省值为ASC;REVERSE表示建立反键索引;表示建立反键索引;parameter_list用于指定索引的存放位置、存储空间分配和数用于指定索引的存放位置、存储空间分配和数据块参数设置。据块参数设置。6.3.2 使用使用CREATE INDEX语句创建索引语句创建索引l在emp表的last_name列上创建一个非唯一性索引。CREATE INDEX emp_lname_indx ON emp (last_name) TABLESPACE indx;l在emp表的email列上创建一个唯一性索引。CREATE UNIQUE INDEX emp_email_indx ON emp(email) TABLESPACE indx;l在emp表的job_id列上创建一个位图索引。CREATE BITMAP INDEX emp_job_indx ON emp(job_id) TABLESPACE indx;l基于emp表的first_name列创建一个函数索引。CREATE INDEX emp_fname_indx ON emp (UPPER(first_name) TABLESPACE indx;6.3.3 案例数据库中索引的创建案例数据库中索引的创建l(1)在employees 表的department_id列上创建一个名为emp_department_ix的平衡树索引。l(2)在employees 表的job_id列上创建一个名为emp_job_ix的平衡树索引。l(3)在employees 表的manager_id列上创建一个名为emp_manager_ix的平衡树索引。l(4)在employees 表的last_name, first_name列上创建一个名为emp_name_ix的复合索引。l(5)在departments 表的location_id列上创建一个名为dept_location_ix的平衡树索引。l(6)在job_history 表的job_id列上创建一个名为jhist_job_ix 的平衡树索引。l(7)在job_history表的empoyee_id列上创建一个名为jhist_emp_ix的平衡树索引。l(8)在job_history表的department_id列上创建一个名为jhist_dept_ix的平衡树索引。l(9)在locations表的city列上创建一个名为loc_city_ix的平衡树索引。l(10)在locations表的state_province列上创建一个名为loc_state_province_ix的平衡树索引。l(11)在locations表的country_id列上创建一个名为loc_country_ix的平衡树索引。lCREATE INDEX emp_department_ix ON employees (department_id) TABLESPACE indx;lCREATE INDEX emp_job_ix ON employees(job_id) TABLESPACE indx;lCREATE INDEX emp_manager_ix ON employees (manager_id) TABLESPACE indx;lCREATE INDEX emp_name_ix ON employees (last_name, first_name) TABLESPACE indx;lCREATE INDEX dept_location_ix ON departments (location_id) TABLESPACE indx;lCREATE INDEX jhist_job_ix ON job_history (job_id) TABLESPACE indx;lCREATE INDEX jhist_emp_ix ON job_history (employee_id) TABLESPACE indx;lCREATE INDEX jhist_dept_ix ON job_history (department_id) TABLESPACE indx;lCREATE INDEX loc_city_ix ON locations (city) TABLESPACE indx;lCREATE INDEX loc_state_province_ix ON locations (state_province) TABLESPACE indx;lCREATE INDEX loc_country_ix ON locations (country_id) TABLESPACE indx;6.3.4 删除索引删除索引l语法DROP INDEX index_name;l在下面几种情况下,可以考虑删除索引 该索引不再使用。该索引不再使用。通过一段时间监视,发现几乎没有查询或只有极少数通过一段时间监视,发现几乎没有查询或只有极少数查询会使用该索引。查询会使用该索引。由于索引中包含损坏的数据块或包含过多的存储碎片由于索引中包含损坏的数据块或包含过多的存储碎片等,需要删除该索引,然后重建索引。等,需要删除该索引,然后重建索引。由于移动了表数据而导致索引失效由于移动了表数据而导致索引失效 6.3.5 查询索引查询索引lDBA_INDEXESlALL_INDEXESlUSER_INDEXESlDBA_ IND_COLUMNSlALL_ IND_COLUMNSlUSER_ IND_COLUMNSl查询employees表中所有索引的名称与类型。SELECT index_name,index_typeFROM dba_indexes WHERE table_name=EMPLOYEES;6.4 视图的创建与管理视图的创建与管理l视图概述l使用CREATE VIEW语句创建视图l案例数据库中视图的创建l视图操作的限制l修改视图定义l删除视图l查询视图信息6.4.1 视图概述视图概述l视图是从一个或多个表或视图中提取出来的数据的一种逻辑表现形式。l使用视图具有下列优点:可以限制对基表数据的访问,只允许用户通过视图看可以限制对基表数据的访问,只允许用户通过视图看到表中的一部分数据。到表中的一部分数据。可以使复杂的查询简单化。可以使复杂的查询简单化。提供了数据的透明性,用户并不知道数据来自于何处。提供了数据的透明性,用户并不知道数据来自于何处。提供了对相同数据的不同显示。提供了对相同数据的不同显示。l根据视图定义时复杂程度的不同,视图分为简单视图和复杂视图两类。l在简单视图定义中,数据来源于一个基表,不包含函数、分组等,可以直接进行DML操作。l在复杂视图定义中,数据来源于一个或多个基表,可以包含连接、函数、分组、伪列、表达式等元素,能否直接进行DML操作取决于视图的具体定义。6.4.2 使用使用CREATE VIEW语句创建语句创建视图视图l语法为:CREATE OR REPLACE FORCE| NOFORCE view(alias, alias)AS SubqueryWITH CHECK OPTION CONSTRAINT constraintWITH READ ONLY CONSTRAINT constraint;l其中FORCE:不管基表是否存在都创建视图。:不管基表是否存在都创建视图。NOFORCE:仅当基表存在时才创建视图(默认)。:仅当基表存在时才创建视图(默认)。WITH CHECK OPTION:指明对视图操作时,必:指明对视图操作时,必须满足子查询中的约束条件。须满足子查询中的约束条件。WITH READ ONLY:指明该视图为只读视图,不:指明该视图为只读视图,不能修改。能修改。l创建一个视图,包含员工号、员工名、工资和部门号等员工基本信息。SQLCREATE VIEW emp_base_info_view (empno,fename,lname,sal,deptno)ASSELECT employee_id,first_name,last_name,salary,department_id FROM employees;l创建一个视图,包含各个部门中不同职位的员工人数、平均工资。CREATE VIEW dept_job_stat_viewASSELECT department_id,job_id,count(*) num,avg(salary) avgsalFROM employees GROUP BY department_id,job_id;l创建一个视图,包含工资大于2000的员工的员工号、员工名及员工的年工资。CREATE VIEW emp_sal_view ASSELECT employee_id,first_name,last_name,salary*12 year_salary FROM employees WHERE salary2000 WITH CHECK OPTION;l创建一个包含员工号、员工名、员工工资以及员工所在部门名的只读视图。CREATE VIEW emp_dept_view ASSELECT employee_id,first_name,last_name,salary,department_name FROM employees e,departments d WHERE e.department_id=d.department_id WITH READ ONLY;6.4.3 案例数据库中视图的创建案例数据库中视图的创建l创建一个名为“EMP_DETAILS_VIEW”的视图,用于员工信息综合查询,包括员工编号、员工名、工资、奖金、职位编号、职位名称、部门编号、部门名称、部门所在地信息、国家信息、区域信息等。l创建一个名为“DEPT_STAT_VIEW”的视图,包含部门号、部门人数、部门平均工资、部门最高工资、部门最低工资以及部门工资总和。6.4.4 视图操作的限制视图操作的限制l如果视图定义包括下列任何一项,则不可直接对视图进行插入、删除和修改等操作,需要通过触发器来实现:集合操作符(集合操作符(UNION,UNION ALL,MINUS,INTERSECT););聚集函数(聚集函数(SUM,AVG等);等);GROUP BY,CONNECT BY或或START WITH子句子句DISTINCT操作符;操作符;由表达式定义的列;由表达式定义的列;伪列伪列ROWNUM;(部分)连接操作。(部分)连接操作。6.4.5 修改视图定义修改视图定义l使用CREATE OR REPLACE VIEW语句重建视图,其实质是删除原来视图并重建该视图,但是会保留该视图上授予的各种权限。l修改视图dept_job_stat_view,增加各个部门中不同职位的工资总和。CREATE OR REPLACE VIEW dept_job_stat_viewASSELECT department_id,job_id,count(*) num,avg(salary) avgsal,sum(salary) total FROM employees GROUP BY department_id,job_id;6.4.6 删除视图删除视图l如果视图不再使用了,可以使用DROP VIEW语句删除视图。视图的删除对基表及其数据没有任何影响。l删除视图dept_job_stat_view。DROP VIEW dept_job_stat_view;6.4.7 查询视图信息查询视图信息l数据字典DBA_VIEWSALL_VIEWSUSER_VIEWSl查询当前用户所有视图名称及视图定义信息。SELECT view_name,text FROM user_views;6.5 序列序列l序列的概念l使用CREATE SEQUENCE语句创建序列l案例数据库中序列的创建l序列的使用l修改序列l查看序列信息l删除序列6.5.1 序列的概念序列的概念l序列是一种用于产生唯一数字序号的数据库对象。l序列具有下列特点:可以为表中的记录自动产生唯一序号。可以为表中的记录自动产生唯一序号。由用户创建并且可以被多个用户共享。由用户创建并且可以被多个用户共享。典型应用是生成主键值,用于标识记录的唯一性。典型应用是生成主键值,用于标识记录的唯一性。允许同时生成多个序列号,而每一个序列号是唯一的。允许同时生成多个序列号,而每一个序列号是唯一的。使用缓存可以加速序列的访问速度。使用缓存可以加速序列的访问速度。6.5.2 使用使用CREATE SEQUENCE语语句创建序列句创建序列lCREATE SEQUENCE sequencelSTART WITH integerlINCREMENT BY integerlMAXVALUE integer|NOMAXVALUElMINVALUE integer|NOMINVALUElCYCLE|NOCYCLElCACHE integer|NOCACHE;lSTART WITH:设置序列初始值,默认值为1。lINCREMENT BY:设置相邻两个元素之间的差值,即步长,默认值为1。lMAXVALUE:设置序列最大值。lNOMAXVALUE:默认情况下,递增序列的最大值为1028-1,递减序列的最大值为-1。lMINVALUE:设置序列最小值。lNOMINVALUE:默认情况下,递增序列的最小值为1, 递减序列的最小值为-(1027 -1)。lCYCLE:当序列达到其最大值或最小值后,开始新的循环。lNOCYCLE:当序列达到其最大值或最小值后,序列不再生成值。默认选项。lCACHE:设置Oracle服务器预先分配并保留在内存中的序列值的个数,默认为20。lNOCACHE:不缓存序列值l创建一个序列,用于产生学生号码。CREATE SEQUENCE student_seq START WITH 1000 INCREMENT BY 2 MAXVALUE 1000000 CACHE 10;6.5.3 案例数据库中序列的创建案例数据库中序列的创建l创建一个名为“EMPLOYEES_SEQ”的序列,用于产生员工编号,起始值为100,步长为1,不缓存,不循环。l创建一个名为“DEPARTMENTS_SEQ”的序列,用于产生部门编号,起始值为10,步长为10,最大值为9990,不缓存,不循环。l创建一个名为“LOCATIONS_SEQ”的序列,用于产生位置编号,起始值为1000,步长为100,最大值为9990,不缓存,不循环。lCREATE SEQUENCE employees_seq START WITH 100 INCREMENT BY 1 NOCACHE NOCYCLE;lCREATE SEQUENCE departments_seq START WITH 10 INCREMENT BY 10 MAXVALUE 9990 NOCACHE NOCYCLE;lCREATE SEQUENCE locations_seq START WITH 1000 INCREMENT BY 100 MAXVALUE 9900 NOCACHE NOCYCLE;6.5.4 序列的使用序列的使用l序列具有CURRVAL和NEXTVAL两个伪列。CURRVAL返回序列的当前值,NEXTVAL在序列中增加新值并返回此值。l可用通过sequence_name.CURRVAL和sequence_name.NEXTVAL形式来应用序列。l在下列语句中可使用序列的NEXTVAL和CURRVAL伪列:SELECT语句的目标列中。语句的目标列中。INSERT语句的子查询的目标列中。语句的子查询的目标列中。INSERT语句的语句的VALUES子句中。子句中。UPDATE语句的语句的SET子句中。子句中。l在下列语句中不允许使用序列的NEXTVAL和CURRVAL伪列:对视图查询的对视图查询的SELECT目标列中。目标列中。使用了使用了DISTINCT命令的命令的SELECT语句中。语句中。SELECT语句中使用了语句中使用了GROUP BY、HAVING或或ORDER BY子句时。子句时。在在SELECT、DELETE或或UPDATE语句的子查询中。语句的子查询中。在在CREATE TABLE或或ALTER TABLE语句中的默认语句中的默认值表达式中。值表达式中。l利用student_seq序列产生学号并插入到student表中。CREATE TABLE students(sno NUMBER PRIMARY KEY,sname CHAR(20);INSERT INTO students(sno,sname) VALUES(student_seq.nextval,Joan);INSERT INTO students(sno,sname) VALUES(student_seq.nextval,Mary);SELECT students_seq.currval FROM dual;6.5.5 修改序列修改序列l序列创建完成后,可以使用ALTER SEQUENCE语句修改序列。l除了不能修改序列的START WITH参数外,可以对序列其他参数进行修改。l如果要修改MAXVALUE参数,需要保证修改后的最大值大于序列的当前值(CURRVAL)。l序列的修改只影响以后生成的序列值。6.5.6 查看序列信息查看序列信息lDBA_SEQUENCESlALL_SEQUENCESlUSER_SEQUENCES6.5.7 删除序列删除序列l可以使用DROP SEQUENCE语句删除序列l删除序列时,系统将序列的定义从数据字典中删除,对于之前序列的应用没有任何影响。6.6 分区表与分区索引分区表与分区索引l分区的概念l分区方法l创建分区表l创建分区索引6.6.1 分区的概念分区的概念l所谓分区就是将一个巨型表分成若干个独立的组成部分进行存储和管理,每一个相对小的、可以独立管理的部分,称为原来表的分区。l表分区后,可以对表的分区进行独立的存取和控制。每个分区都具有相同的逻辑属性,但物理属性可以不同。l对巨型表进行分区具有下列优点:提高数据的安全性,一个分区的损坏不影响其他分区提高数据的安全性,一个分区的损坏不影响其他分区中数据的正常使用。中数据的正常使用。将表的各个分区存储在不同磁盘上,提高数据的并行将表的各个分区存储在不同磁盘上,提高数据的并行操作能力。操作能力。简化数据的管理,可以将某些分区设置为不可用状态,简化数据的管理,可以将某些分区设置为不可用状态,某些分区设置为可用状态,某些分区设置为只读状态,某些分区设置为可用状态,某些分区设置为只读状态,某些分区设置为读写状态。某些分区设置为读写状态。操作的透明性,对表进行分区并不影响对数据进行操操作的透明性,对表进行分区并不影响对数据进行操作的作的SQL语句。语句。6.6.2 分区方法分区方法l范围分区:根据分区列值的范围对表进行分区,每条记录根据其分区列值所在的范围决定存储到哪个分区中。范围分区是最常用的分区方法,特别适合根据日期进行分区的情况。l列表分区:如果分区列的值不能划分范围(非数值类型或日期类型),同时分区列的取值是一个包含少数值的集合,可以采用列表分区,将特定分区列值的记录保存到特定分区中。l散列分区:又称HASH分区,是采用基于分区列值的HASH算法,将数据均匀分布到指定的分区中。一个记录到底分布到哪个分区是由HASH函数决定的。l复合分区:结合两种基本分区方法,先采用一个分区方法对表或索引进行分区,然后再采用另一个分区方法将分区再分成若干个子分区。每个分区的子分区都是数据的一个逻辑子集。复合分区包括范围-范围复合分区、范围-散列复合分区、范围-列表复合分区、列表-范围复合分区、列表-散列复合分区、列表-列表复合分区等多种分区方法。6.6.3 创建分区表创建分区表l创建范围分区表l创建列表分区表l创建散列分区表l创建复合分区表(1)创建范围分区表创建范围分区表lCREATE TABLE table()lPARTITION BY RANGE (column1,column2,)l( PARTITION partition1 VALUES LESS THANl(literal|MAXVALUE) TABLESPACE tablespacel,PARTITION partition2 VALUES LESS THANl(literal|MAXVALUE) TABLESPACE tablespace,l)llPARTITION BY RANGE:指明采用范围分区方法。lcolumn:分区列,可以是单列分区,也可以是多列分区。lPARTITION partition1 :设置分区名称。lVALUES LESS THAN:设置分区列值的上界。lTABLESPACE:设置分区对应的表空间。l示例创建一个分区表,将学生信息根据其出生日期进行分创建一个分区表,将学生信息根据其出生日期进行分区,将区,将1980年年1月月1日前出生的学生信息保存在日前出生的学生信息保存在ORCLTBS1表空间中,将表空间中,将1980年年1月月1日到日到1990年年1月月1日出生的学生信息保存在日出生的学生信息保存在ORCLTBS2表空间中,表空间中,将其他学生信息保存在将其他学生信息保存在ORCLTBS3表空间中。表空间中。lCREATE TABLE student_range(l sno NUMBER(6) PRIMARY KEY, sname l VARCHAR2(10), sage int, birthday DATEl)l PARTITION BY RANGE(birthday)l( PARTITION p1 VALUES LESS THANl (TO_DATE(1980-1-1, YYYY-MM-DD) l TABLESPACE ORCLTBS1,l PARTITION p2 VALUES LESS THANl (TO_DATE(1990-1-1, YYYY-MM-DD) l TABLESPACE ORCLTBS2,l PARTITION p3 VALUES LESS THAN(MAXVALUE)l TABLESPACE ORCLTBS3 l);(2)创建列表分区表创建列表分区表lCREATE TABLE table()lPARTITION BY LIST(column)l( PARTITION partition1 l VALUES(literal|NULL|DEFAULT) l TABLESPACE tablespacel,PARTITION partition2 l VALUES(literal|NULL|DEFAULT)l TABLESPACE tablespace,l)ll示例创建一个分区表,将学生信息按性别不同进行分区,创建一个分区表,将学生信息按性别不同进行分区,男学生信息保存在表空间男学生信息保存在表空间ORCLTBS1中,而女学生信中,而女学生信息保存在息保存在ORCLTBS2中。中。 lCREATE TABLE student_list(l sno NUMBER(6) PRIMARY KEY,l sname VARCHAR2(10),l sex CHAR(2) CHECK(sex in (M, F)l)lPARTITION BY LIST(sex)l( PARTITION student_male VALUES(M) TABLESPACE ORCLTBS1,l PARTITION student_female VALUES(F) TABLESPACE ORCLTBS2l);(3)创建散列分区表创建散列分区表lCREATE TABLE table()lPARTITION BY HASH (column1,column2,) l(PARTITION partition l TABLESPACE tablespace,)|lPARTITIONS hash_partition_quantity l STORE IN (tablespace1,)ll示例创建一个分区表,根据学号将学生信息均匀分布到创建一个分区表,根据学号将学生信息均匀分布到ORCLTBS1和和ORCLTBS2两个表空间中。两个表空间中。lCREATE TABLE student_hash (l sno NUMBER(6) PRIMARY KEY,l sname VARCHAR2(10)l)lPARTITION BY HASH(sno)l( PARTITION p1 TABLESPACE ORCLTBS1,lPARTITION p2 TABLESPACE ORCLTBS2l); lCREATE TABLE student_hash2 (l sno NUMBER(6) PRIMARY KEY,l sname VARCHAR2(10) )lPARTITION BY HASH(sno)lPARTITIONS 2 STORE IN(ORCLTBS1,ORCLTBS2); (4)创建复合分区表创建复合分区表l复合分区包括:范围范围-列表复合分区列表复合分区范围范围-散列复合分区。散列复合分区。 l创建复合分区时需要指定分区方法(分区方法(PARTITION BY RANGE)分区列分区列子分区方法(子分区方法(SUBPARTITION BY HASH, SUBPARTITION BY LIST)子分区列子分区列每个分区中子分区数量或子分区的描述。每个分区中子分区数量或子分区的描述。 l范围-列表复合分区范围范围-列表复合分区先对表进行范围分区,然后再对每列表复合分区先对表进行范围分区,然后再对每个分区进行列表分区,即在一个范围分区中创建多个个分区进行列表分区,即在一个范围分区中创建多个列表子分区。列表子分区。l范围-列表复合分区示例创建一个范围创建一个范围-列表复合分区表,将列表复合分区表,将1980年年1月月1日前日前出生的男、女学生信息分别保存在出生的男、女学生信息分别保存在ORCLTBS1和和ORCLTBS2表空间中,表空间中,1980年年1月月1日到日到1990年年1月月1日出生的男、女学生信息分别保存在日出生的男、女学生信息分别保存在ORCLTBS3和和ORCLTBS4表空间中,其他学生信息保存在表空间中,其他学生信息保存在ORCLTBS5表空间中。表空间中。 lCREATE TABLE student_range_list(l sno NUMBER(6) PRIMARY KEY,l sname VARCHAR2(10), sex CHAR(2) CHECK(sex IN (M,F),l sage NUMBER(4), birthday DATEl )l PARTITION BY RANGE(birthday)l SUBPARTITION BY LIST(sex)l (PARTITION p1 VALUES LESS THAN(TO_DATE(1980-1-1, YYYY-MM-DD)l (SUBPARTITION p1_sub1 VALUES(M) TABLESPACE ORCLTBS1,l SUBPARTITION p1_sub2 VALUES(F) TABLESPACE ORCLTBS2),l PARTITION p2 VALUES LESS THAN(TO_DATE(1990-1-1, YYYY-MM-DD)l (SUBPARTITION p2_sub1 VALUES(M) TABLESPACE ORCLTBS3,l SUBPARTITION p2_sub2 VALUES(F) TABLESPACE ORCLTBS4),l PARTITION p3 VALUES LESS THAN(MAXVALUE) TABLESPACE ORCLTBS5l ); l范围-散列复合分区范围范围-散列复合分区先对表进行范围分区,然后再对每散列复合分区先对表进行范围分区,然后再对每个分区进行散列分区,即在一个范围分区中创建多个个分区进行散列分区,即在一个范围分区中创建多个散列子分区。散列子分区。l示例创建一个范围创建一个范围-散列复合分区表,将散列复合分区表,将1980年年1月月1日前日前出生的学生信息均匀地保存在出生的学生信息均匀地保存在ORCLTBS1和和ORCLTBS2表空间中,表空间中,1980年年1月月1日到日到1990年年1月月1日出生的学生信息保存在日出生的学生信息保存在ORCLTBS3和和ORCLTBS4表空间中,其他学生信息保存在表空间中,其他学生信息保存在ORCLTBS5表空间中。表空间中。 lCREATE TABLE student_range_hash(lsno NUMBER(6) PRIMARY KEY,lsname VARCHAR2(10),lsage NUMBER(4),lbirthday DATEl)lPARTITION BY RANGE(birthday)lSUBPARTITION BY HASH(sage)l(PARTITION p1 VALUES LESS THAN(TO_DATE(1980-1-1, YYYY-MM-DD)l (SUBPARTITION p1_sub1 TABLESPACE ORCLTBS1,l SUBPARTITION p1_sub2 TABLESPACE ORCLTBS2),l PARTITION p2 VALUES LESS THAN(TO_DATE(1990-1-1, YYYY-MM-DD)l (SUBPARTITION p2_sub1 TABLESPACE ORCLTBS3,l SUBPARTITION p2_sub2 TABLESPACE ORCLTBS4),l PARTITION p3 VALUES LESS THAN(MAXVALUE) TABLESPACE ORCLTBS5l);6.6.4 创建分区索引创建分区索引l分区索引介绍 l创建分区索引 (1)分区索引介绍分区索引介绍l本地分区索引 本地分区索引是指为分区表中的各个分区单独建立索本地分区索引是指为分区表中的各个分区单独建立索引分区,各个索引分区之间是相互独立的。引分区,各个索引分区之间是相互独立的。l全局分区索引 全局分区索引是指先对整个分区表建立索引,然后再全局分区索引是指先对整个分区表建立索引,然后再对索引进行分区。对索引进行分区。 l全局非分区索引 全局非分区索引是指对整个分区表创建标准的未分区全局非分区索引是指对整个分区表创建标准的未分区的索引。的索引。(2)创建分区索引)创建分区索引 l创建本地分区索引 使用使用LOCAL关键字标识本地分区索引。关键字标识本地分区索引。例如,在例如,在student_range分区表的分区表的sname列上创列上创建本地分区索引。建本地分区索引。CREATE INDEX student_range_local ON student_range(sname) LOCAL; l创建全局分区索引与表分区方法类似,索引分区方法也包括范围分区、与表分区方法类似,索引分区方法也包括范围分区、列表分区、散列分区和复合分区列表分区、散列分区和复合分区4种。在指明分区方法种。在指明分区方法时使用时使用GLOBAL关键字标识全局分区索引。关键字标识全局分区索引。例如,为分区表例如,为分区表student_list的的sage列建立基于范列建立基于范围的全局分区索引。围的全局分区索引。CREATE INDEX student_range_globalON student_range(sage)GLOBAL PARTITION BY RANGE(sage)(PARTITION p1 VALUES LESS THAN (80) TABLESPACE ORCLTBS1,PARTITION p2 VALUES LESS THAN (MAXVALUE) TABLESPACE ORCLTBS2); l全局非分区索引 为分区表创建全局非分区索引与为标准表创建索引一为分区表创建全局非分区索引与为标准表创建索引一样。样。例如,为分区表例如,为分区表student_list_index创建全局非分创建全局非分区索引。区索引。CREATE INDEX student_list_index ON student_list(sname);总结总结l表的创建与管理l索引的创建与管理l视图的创建与管理l序列的创建与管理l分区表与分区索引的管理
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号