第6讲:管理模式对象_第1页
第6讲:管理模式对象_第2页
第6讲:管理模式对象_第3页
第6讲:管理模式对象_第4页
第6讲:管理模式对象_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

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

文档简介

1、广东技术师范学院广东技术师范学院大型数据库开发训练大型数据库开发训练课程课程Instructor: Dr. Wen JianfengEmail: 大型数据库开发训练大型数据库开发训练第第6讲:管理模式对象讲:管理模式对象内容提纲内容提纲o 模式(模式(Schemas)o 表(表(Tables)o 索引(索引(Indexes)o 约束(约束(Constraints)o 视图(视图(Views)o 序列(序列(Sequences)o 同义词(同义词(Synonyms)2模式(模式(Schemas)3模式(模式(Schema)4模式(模式(Schema)o 模式模式是表、视图、索引和其他数据库对象的

2、集合是表、视图、索引和其他数据库对象的集合o 可以认为可以认为“模式模式”与与“用户账户用户账户”是等同的内容是等同的内容n 只有一点微小的区别:用户账户保存着用户所拥有的只有一点微小的区别:用户账户保存着用户所拥有的对象,而模式则是在那里保存的对象的集合对象,而模式则是在那里保存的对象的集合o 所有数据库对象可以划分为两大类所有数据库对象可以划分为两大类n 模式对象模式对象:可以被用户账户所拥有的对象:可以被用户账户所拥有的对象p 如:表、约束、索引、视图、序列、私有同义词、如:表、约束、索引、视图、序列、私有同义词、PL/SQL包、存储过程等包、存储过程等n 非模式对象非模式对象:不能被用

3、户账户所拥有的对象:不能被用户账户所拥有的对象p 如:表空间、用户、角色、公有同义词等如:表空间、用户、角色、公有同义词等5模式(模式(Schema)o 在创建数据库时,将自动创建很多在创建数据库时,将自动创建很多用户用户及其相关及其相关联的联的模式模式n 用户如:用户如:SYS、SYSTEMn SYS模式:模式:p 用户用户SYS拥有数据字典,拥有数据字典,SYS模式中的这组表定义数据库及模式中的这组表定义数据库及其内容;其内容;p SYS还拥有数百个还拥有数百个PL/SQL包,是为数据库管理员和开发人包,是为数据库管理员和开发人员提供的代码员提供的代码n SYSTEM模式:模式:p 存储各

4、种用于管理和监视的附加对象存储各种用于管理和监视的附加对象6模式(模式(Schema)o 模式与用户的关系模式与用户的关系n 模式与用户相对应模式与用户相对应,一个模式只能被一个数据库用,一个模式只能被一个数据库用户所拥有,并且模式的名称与这个用户的名称相同户所拥有,并且模式的名称与这个用户的名称相同n 通常情况下,用户所创建数据库对象都通常情况下,用户所创建数据库对象都保存在与自保存在与自己同名的模式中己同名的模式中n 同一模式中数据库对象的同一模式中数据库对象的名称必须唯一名称必须唯一,而在不同,而在不同模式中的数据库对象可以同名模式中的数据库对象可以同名n 默认情况下,用户引用的对象是与

5、自己同名模式中默认情况下,用户引用的对象是与自己同名模式中的对象,如果要引用其他模式中的对象,需要在该的对象,如果要引用其他模式中的对象,需要在该对象名之前指明对象所属模式对象名之前指明对象所属模式 7模式(模式(Schema)o 模式选择与切换模式选择与切换n 如果用户以如果用户以NORMAL身份登录,则进入同名模式身份登录,则进入同名模式n 若以若以SYSDBA身份登录,则进入身份登录,则进入SYS模式模式n 如果以如果以SYSOPER身份登录,则进入身份登录,则进入PUBLIC模式模式p conn / as sysopero 模式的创建模式的创建n 创建用户时,就创建了同名的模式,不用另

6、外创建创建用户时,就创建了同名的模式,不用另外创建n 例如:例如:p CREATE USER gdin IDENTIFIED BY gdin;(创建用户)(创建用户)p GRANT CONNECT, RESOURCE TO gdin; (赋权限)(赋权限)8模式(模式(Schema)o 举例:举例:HR模式模式9表(表(Tables)10创建表创建表o CREATE TABLE语法:语法:n column_level_constraint:列级约束:列级约束n table_level_constraint:表级约束:表级约束n parameter_list:表的参数:表的参数11CREATE

7、TABLE table_name( column_name datatype column_level_constraint , column_name datatype column_level_constraint , table_level_constraint)parameter_list;创建表创建表o 举例:举例:12CREATE TABLE employees( employee_id NUMBER(6), first_nameVARCHAR2(20), last_name VARCHAR2(25), email VARCHAR2(25), phone_number VARCHA

8、R2(20), hire_date DATE, job_id VARCHAR2(10), salary NUMBER(8,2), commission_pct NUMBER(2,2), manager_id NUMBER(6), department_id NUMBER(4);查看表结构查看表结构o 语法:语法:n DESCRIBE table_namen DESC table_name13Oracle内置数据类型内置数据类型14CHAR(N), NCHAR(N)VARCHAR2(N),NVARCHAR2(N)NUMBER(P,S)DATETIMESTAMPRAW(N)BLOB, CLOB,N

9、CLOB, BFILELONG, LONG RAWROWID, UROWIDVARRAYTABLEREFData typeBuilt-in(内置)(内置)User-definedScalar(标量)(标量)Relationship(关系)(关系)Collection(集合)(集合)字符数据类型字符数据类型o 字符数据可以作为字符数据可以作为长度固定长度固定或或长度可变长度可变的字符的字符串存储在数据库中串存储在数据库中o CHAR(n)、NCHAR(n)n Character的缩写的缩写n 定长字符串,定长字符串,n的取值范围为的取值范围为12000字节字节n 用空格填满空白内容用空格填满空白

10、内容o VARCHAR2(n)、NVARCHAR2(n)n Variable character的缩写的缩写n 可变字符串,可变字符串,n取值范围为取值范围为14000字节字节n 自动调整数据长度,仅使用存储实际列值所需要的自动调整数据长度,仅使用存储实际列值所需要的字节数,每行的大小可以不同字节数,每行的大小可以不同15数字数据类型数字数据类型o 数字始终以数字始终以长度可变长度可变的数据存储,最多可以存的数据存储,最多可以存储储38个有效数位个有效数位o NUMBER(p, s) n 用于存储整数和实数用于存储整数和实数n p表示数值的表示数值的总位数总位数(精度,(精度,Precisio

11、n),取值范围),取值范围为为138,默认为,默认为38n s表示表示小数位数小数位数(Scale),若为负数则表示把数据),若为负数则表示把数据向小数点左边舍入,默认值为向小数点左边舍入,默认值为0n 例如:例如:p NUMBER(5, 2):当输入值为:当输入值为4.5678时,保存为时,保存为4.57p NUMBER(5, -2):当输入值为:当输入值为1056.34时,保存为时,保存为110016浮点数据类型浮点数据类型o BINARY_FLOATo BINARY_DOUBLEo 保存的是近似值保存的是近似值o 用于科学计算,它们的特点与用于科学计算,它们的特点与Java等编程语言等编

12、程语言中的中的float和和double类似类似17日期数据类型日期数据类型o DATEn 存储日期和时间存储日期和时间n 保存的域包括世纪、保存的域包括世纪、年、月、日、时、分、秒年、月、日、时、分、秒(7个个字节)字节)n Oracle内部以数字的形式保存内部以数字的形式保存DATE类型数据类型数据n 默认日期显示格式由参数默认日期显示格式由参数NLS_DATE_FORMAT所所定义定义o TIMESTAMP(n)n 存储日期和时间存储日期和时间n 表示时间戳,是表示时间戳,是DATE的扩展,允许存储小数形式的的扩展,允许存储小数形式的秒值秒值n n表示表示秒的小数位数秒的小数位数,取值范

13、围为,取值范围为19,默认值为,默认值为618RAW数据类型数据类型o 可以使用此数据类型存储可以使用此数据类型存储小型二进制数据小型二进制数据o 在网络中的计算机之间传输在网络中的计算机之间传输RAW数据时,或者数据时,或者使用使用Oracle实用程序将实用程序将RAW数据从一个数据库数据从一个数据库移到另一个数据库时,移到另一个数据库时,Oracle服务器服务器不执行字不执行字符集转换符集转换o 存储实际列值所需要的字节数大小随每行大小存储实际列值所需要的字节数大小随每行大小而异,最多为而异,最多为2000 字节字节19LOB数据类型(大型对象)数据类型(大型对象)o Oracle为存储为

14、存储LOB提供六种数据类型:提供六种数据类型:n CLOB和和LONG用于存储大型的、可变长度的用于存储大型的、可变长度的字符数字符数据据,如文本文件等,最大数据量为,如文本文件等,最大数据量为4GBn NCLOB用于存储大型的、可变长度的用于存储大型的、可变长度的国家字符集数国家字符集数据据,最大数据量为,最大数据量为4GBn BLOB和和LONG RAW用于存储大型的、非结构化的用于存储大型的、非结构化的可变长度的可变长度的二进制数据二进制数据(如二进制文件、图片文件、(如二进制文件、图片文件、音频和视频等非文本文件),最大数据量为音频和视频等非文本文件),最大数据量为4GBn BFILE

15、用于存储用于存储操作系统文件操作系统文件中的非结构化数据中的非结构化数据p 注:注:LONG和和LONG RAW已由已由CLOB和和BLOG取代取代,保留它,保留它们主要用于向后兼容,它们的最大数据量为们主要用于向后兼容,它们的最大数据量为2Gp 当数据量大于当数据量大于4000字节时,字节时,LOB在表中存储一个定位器,而在表中存储一个定位器,而将数据存储在另一位置。将数据存储在另一位置。LOB允许将数据存储在单独的段和允许将数据存储在单独的段和表空间中,或者存储在主机文件中表空间中,或者存储在主机文件中20ROWID和和UROWID数据类型数据类型o ROWIDn ROWID是数据库中每行

16、的唯一标识符是数据库中每行的唯一标识符n ROWID并不显式地作为一个列值存储(伪列)并不显式地作为一个列值存储(伪列)n ROWID并不直接给出一行的物理地址,但它可以并不直接给出一行的物理地址,但它可以用来定位行用来定位行n ROWID为访问表中的行提供了最快的方法为访问表中的行提供了最快的方法n ROWID存储在索引中来指定具有一组给定的键值存储在索引中来指定具有一组给定的键值的行的行n ROWID类型可以作为表中某个列的数据类型类型可以作为表中某个列的数据类型o UROWID(通用(通用ROWID)n 它支持外表(非它支持外表(非Oracle 表)的表)的ROWID,并且可存,并且可存

17、储各种类型的储各种类型的ROWID21集合数据类型集合数据类型o VARRAY(变化数组)(变化数组)n 变化数组对于存储包含少量组成元素的列表(如客变化数组对于存储包含少量组成元素的列表(如客户的电话号码)非常有用户的电话号码)非常有用n VARRAY具有以下特征:具有以下特征:p 数组即一组有序的数据组成元素数组即一组有序的数据组成元素p 一个给定数组的所有组成元素的数据类型相同一个给定数组的所有组成元素的数据类型相同p 每个组成元素都有索引,即与数组中组成元素的位置相对每个组成元素都有索引,即与数组中组成元素的位置相对应的编号应的编号p 数组中组成元素的数目决定了数组的大小数组中组成元素

18、的数目决定了数组的大小p Oracle服务器允许数组的大小可以变化,这就是它们被称服务器允许数组的大小可以变化,这就是它们被称为为VARRAY(意为变化数组)的原因,但在声明数组类型(意为变化数组)的原因,但在声明数组类型时必须指定最大大小时必须指定最大大小22集合数据类型集合数据类型o TABLE(嵌套表)(嵌套表)n 嵌套表提供一种将一个表定义为另一个表内一列的嵌套表提供一种将一个表定义为另一个表内一列的方法。嵌套表可用来存储可能包含大量记录的集合方法。嵌套表可用来存储可能包含大量记录的集合(比如一个订单中的若干条目)(比如一个订单中的若干条目)n 嵌套表一般具有以下特征:嵌套表一般具有以

19、下特征:p 嵌套表是一组无次序的记录或行嵌套表是一组无次序的记录或行p 嵌套表中的各行结构相同嵌套表中的各行结构相同p 嵌套表中的行与父表分别存储,并且父表中的对应行有一嵌套表中的行与父表分别存储,并且父表中的对应行有一个指针个指针p 嵌套表的存储特点可由数据库管理员来定义嵌套表的存储特点可由数据库管理员来定义p 嵌套表没有预先确定的最大大小嵌套表没有预先确定的最大大小23关系数据类型关系数据类型o REFn 关系类型在数据库内用作指针关系类型在数据库内用作指针n 使用这些类型需要使用这些类型需要“对象对象” (Objects) 选项。(比如:选项。(比如:订单的每一项都可以指向或引用订单的每

20、一项都可以指向或引用PRODUCTS表中的表中的一行,而不必存储产品代码)一行,而不必存储产品代码)24用户定义的数据类型用户定义的数据类型o Oracle允许用户定义抽象的数据类型并在应用允许用户定义抽象的数据类型并在应用程序内使用这些数据类型程序内使用这些数据类型25ROWID格式格式o 扩展的扩展的ROWID在磁盘上需要在磁盘上需要10 个字节的存储个字节的存储空间,并使用空间,并使用18 个字符来显示个字符来显示o 它包含下列组成元素:它包含下列组成元素:n 数据对象编号数据对象编号:每个数据对象(如表或索引)在创:每个数据对象(如表或索引)在创建时都分配有此编号,并且此编号在数据库中

21、是唯建时都分配有此编号,并且此编号在数据库中是唯一的一的n 相关文件编号相关文件编号:此编号对于表空间中的每个文件是:此编号对于表空间中的每个文件是唯一的唯一的n 块编号块编号:表示包含此行的块在文件中的位置:表示包含此行的块在文件中的位置n 行编号行编号:标识块头中行目录位置的位置:标识块头中行目录位置的位置26OOOOOOBBBBBBFFFRRRData object numberRelative file numberRow numberBlock numberROWID格式格式o 例如:例如:n AAAS13是数据对象编号是数据对象编号n AAE是相关文件编号是相关文件编号n AAAA

22、CV是块编号是块编号n AAA是员工号为是员工号为7369的行的行编号的行的行编号27使用使用ROWID定位行定位行o ROWID可以用来定位一个数据库中的任意行可以用来定位一个数据库中的任意行n 因为一个段只能驻留在一个表空间中,所以,因为一个段只能驻留在一个表空间中,所以,Oracle服务器可以使用服务器可以使用数据对象编号数据对象编号来确定包含某来确定包含某一行的表空间一行的表空间n 表空间中的相关表空间中的相关文件编号文件编号用来定位文件,用来定位文件,块编号块编号用用来定位包含该行的块,来定位包含该行的块,行编号行编号用来定位该行的行目用来定位该行的行目录条目录条目n 行目录条目可以

23、用来定位行首行目录条目可以用来定位行首28使用使用ROWID定位行定位行o ROWID是是伪列伪列,计算出来的,表中并没有存,计算出来的,表中并没有存储储ROWID,每一行的,每一行的ROWID是根据该行的物是根据该行的物理位置计算出来的,我们根据理位置计算出来的,我们根据ROWID可以获可以获得该行的所在的物理位置得该行的所在的物理位置29行的结构行的结构o 行数据作为长度可变的记录存储在数据库块中。行数据作为长度可变的记录存储在数据库块中。通常,一个行的各列按其定义时的顺序存储,并通常,一个行的各列按其定义时的顺序存储,并且不存储尾随的且不存储尾随的NULL列列n 注:对于非尾随的注:对于

24、非尾随的NULL列,列长度需占用一个字节列,列长度需占用一个字节o 表中的每行具有:表中的每行具有:n 行头:用来存储行中的列数、链接信息和行锁定状态行头:用来存储行中的列数、链接信息和行锁定状态n 行数据:对于每一列,行数据:对于每一列,Oracle服务器存储列的长度和服务器存储列的长度和值,列值在紧靠列长度字节后面存储值,列值在紧靠列长度字节后面存储n 相邻的行之间不需要任何空格相邻的行之间不需要任何空格n 块中的每一行在行目录中都有一个位置,目录位置指块中的每一行在行目录中都有一个位置,目录位置指向行首向行首30行的结构行的结构31Database blockRow headerColu

25、mn lengthColumn value创建表时使用的参数创建表时使用的参数o TABLESPACE子句子句n 指定将要在其中创建表的表空间指定将要在其中创建表的表空间n 如果省略如果省略TABLESPACE参数,则参数,则Oracle在包含该表在包含该表的模式的所有者的缺省表空间中创建表的模式的所有者的缺省表空间中创建表o STORAGE子句子句n 指定表的存储特性。若不指定,则继承表空间的存指定表的存储特性。若不指定,则继承表空间的存储参数设置储参数设置p INITIAL:初始分配区的大小:初始分配区的大小p NEXT:下一个分配区的大小:下一个分配区的大小p MINEXTENTS:分配

26、的最小区数:分配的最小区数p MAXEXTENTS:分配的最大区数:分配的最大区数p PCTINCREASE:NEXT区及以后的区有关区大小增长的区及以后的区有关区大小增长的百分比百分比p 例如:例如:STORAGE(INITIAL 200K NEXT 200K PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 5)32利用子查询创建表利用子查询创建表o 语法:语法:n 通过该方法创建表时,可以修改表中列的名称,但是通过该方法创建表时,可以修改表中列的名称,但是不能修改列的数据类型和长度不能修改列的数据类型和长度n 源表中的约束条件和列的默认值都不会复制到新表中源表中

27、的约束条件和列的默认值都不会复制到新表中n 当子查询条件为真时,新表中包含查询到的数据;当当子查询条件为真时,新表中包含查询到的数据;当子查询条件为假时,则创建一个空表子查询条件为假时,则创建一个空表33CREATE TABLE table_name (column_name column_level_constraint , column_name column_level_constraint , table_level_constraint) parameter_list AS subquery; 利用子查询创建表利用子查询创建表o 例如:创建一个表,保存工资高于例如:创建一个表,保存工

28、资高于15000元的员元的员工的员工号、员工姓名和部门号。工的员工号、员工姓名和部门号。n 注:注:employees表在表在HR模式中模式中34修改表修改表o 修改表的基本语法:修改表的基本语法:n SET UNUSED:标记列为:标记列为“未用未用”n DROP UNUSED COLUMNS:永久删除标记为:永久删除标记为“未未用用”的列的列35ALTER TABLE table_nameADD column_name datatype column_level_constraintMODIFY column_name datatype RENAME COLUMN oldname TO n

29、ewnameDROP COLUMN column_name DROP (column_name1, column_name2, .)SET UNUSED COLUMN column_nameSET UNUSED (column_name1, column_name2, .)DROP UNUSED COLUMNS删除表删除表o 语法:语法:n 删除一个表的同时,删除一个表的同时,Oracle将执行下列操作:将执行下列操作:p 删除该表中所有记录删除该表中所有记录p 从数据字典中删除该表定义从数据字典中删除该表定义p 删除与该表相关的所有索引和触发器删除与该表相关的所有索引和触发器p 回收为该表分

30、配的存储空间回收为该表分配的存储空间p 依赖于该表的数据库对象处于依赖于该表的数据库对象处于INVALID状态状态n 如果该表是外键关系中的父表,就必须使用如果该表是外键关系中的父表,就必须使用CASCADE CONSTRAINTS选项选项n 使用使用PURGE选项将彻底删除表,不放入回收站选项将彻底删除表,不放入回收站36DROP TABLE table_nameCASCADE CONSTRAINTSPURGE 截断表截断表o 语法:语法:n 截断一个表将删除表中所有行,释放已使用的空间截断一个表将删除表中所有行,释放已使用的空间n 不会生成任何还原数据不会生成任何还原数据n 对应的索引将被

31、截断对应的索引将被截断n 不能截断某个外键正在引用的表不能截断某个外键正在引用的表n 使用此命令时不会触发删除触发器使用此命令时不会触发删除触发器37TRUNCATE TABLE table_nameDROP | REUSE STORAGE 查询表的数据字典查询表的数据字典o DBA_TABLES、ALL_TABLES、USER_TABLESo DBA_TAB_COLUMNS、ALL_TAB_COLUMNS、USER_TAB_COLUMNSo DBA_OBJECTS、ALL_OBJECTS、USER_OBJECTS38索引(索引(Indexes)39索引索引o 表的数据是无序的,因为数据是随机

32、存储的,所表的数据是无序的,因为数据是随机存储的,所以在查询的时候需要全表扫描。索引就是将无序以在查询的时候需要全表扫描。索引就是将无序的数据有序化,这样就可以在查询数据的时候减的数据有序化,这样就可以在查询数据的时候减少数据块的读取,实现快速定位数据少数据块的读取,实现快速定位数据o 索引是一种允许对表中的行进行直接访问的树型索引是一种允许对表中的行进行直接访问的树型结构结构n B树索引(平衡树索引)(默认是树索引(平衡树索引)(默认是B树索引)树索引)n 位图索引位图索引o 索引的作用:快速定位数据,减少磁盘索引的作用:快速定位数据,减少磁盘 I/O40索引索引o Oracle自动使用和维

33、护索引自动使用和维护索引o 在表上执行在表上执行DML操作时,操作时,Oracle服务器将维护服务器将维护所有的索引所有的索引n 插入操作导致在适当的块中插入索引项插入操作导致在适当的块中插入索引项n 删除行只导致逻辑删除索引项删除行只导致逻辑删除索引项n 更新键列将导致逻辑删除和向索引插入项更新键列将导致逻辑删除和向索引插入项o 索引的缺点:索引的缺点:n 占用硬盘和内存空间占用硬盘和内存空间n 会减慢数据更新的速度会减慢数据更新的速度o 索引不能盲目建立索引不能盲目建立41B树索引树索引o B树树n 占用空间多,适合索引值基数高、重复率低的应用占用空间多,适合索引值基数高、重复率低的应用4

34、2Index entry headerKey column lengthKey column valueROWID根节点根节点分支节点分支节点叶节点叶节点Index entryB树索引树索引o 根根和和枝干枝干中存放键值范围的导引指针中存放键值范围的导引指针o 叶子叶子中存放的是条目中存放的是条目o 条目条目中存放的是索引的键值和该数据行的中存放的是索引的键值和该数据行的ROWIDo 叶子间有双重链接,有助于按键值的升序和降序叶子间有双重链接,有助于按键值的升序和降序扫描索引扫描索引43位图索引位图索引o 位图位图n 占用空间少,适合索引值基数少、重复率高的应用占用空间少,适合索引值基数少、重

35、复率高的应用44keystartROWIDendROWID bitmap(位图)(位图)TableIndexBlock 10Block 11Block 12File 3位图索引位图索引o 可以将位图索引组织为可以将位图索引组织为B 树,但叶节点树,但叶节点存储每存储每个键值的位图个键值的位图而非而非ROWID。位图中的每一位。位图中的每一位对应一个可能的对应一个可能的ROWID,如果设置了位,则,如果设置了位,则意味着具有相应意味着具有相应ROWID的行包含键值的行包含键值o 位图索引的结构位图索引的结构n Start ROWIDp 例如:文件号例如:文件号3、块号、块号10 、行号、行号0n

36、 End ROWIDp 例如:文件号例如:文件号3、块号、块号12 、行号、行号8n 位图段位图段p 由位串组成(对应的行包含键值时设置位;不包含键值时由位串组成(对应的行包含键值时设置位;不包含键值时不设置位)不设置位)45B树索引树索引 vs. 位图索引位图索引B 树树位图位图适用于高基数列适用于低基数列更新键列的成本相对较低更新键列的成本非常高使用OR谓词进行查询时效率较低使用OR谓词进行查询时效率较高对OLTP很有用对数据仓库很有用46索引使用原则索引使用原则o 在在大表大表上建立索引上建立索引o 在在WHERE子句子句或或连接条件连接条件上经常使用的列上上经常使用的列上建立索引建立索

37、引o 对于取值范围很大的列应当创建对于取值范围很大的列应当创建B树索引树索引o 对于取值范围很小的列应当创建对于取值范围很小的列应当创建位图索引位图索引o Oracle会自动在会自动在PRIMARY KEY和和UNIQUE约约束的列上创建唯一性索引束的列上创建唯一性索引o 限制表中索引的限制表中索引的数目数目 47创建索引创建索引o 语法语法n UNIQUE表示建立惟一性索引表示建立惟一性索引n BITMAP表示建立位图索引表示建立位图索引n ASC/DESC用于指定索引值的排列顺序,用于指定索引值的排列顺序,ASC表示按表示按升序排序,升序排序,DESC表示按降序排序,缺省值为表示按降序排序

38、,缺省值为ASCn REVERSE表示建立反键索引表示建立反键索引n parameter_list用于指定索引的存放位置、存储空间分用于指定索引的存放位置、存储空间分配和数据块参数设置配和数据块参数设置48CREATE UNIQUE|BITMAP INDEX index_nameON table_name(column_nameASC|DESC,|expression) REVERSEparameter_list;隐式创建索引隐式创建索引o 如果在一个表上创建了一个如果在一个表上创建了一个PRIMARY KEY或或UNIQUE类型的约束,类型的约束,SQL将自动创建一个索将自动创建一个索引来支

39、持列上的约束引来支持列上的约束49显式创建索引显式创建索引o 单列索引单列索引n CREATE INDEX ix_inv_date ON invoices (invoice_date)o 复合索引复合索引n CREATE INDEX ix_inv_invoice_vendor_id ON invoices (vendor_id, invoice_date)o 唯一索引唯一索引n CREATE UNIQUE INDEX ix_emp_ssn ON employees (ssn)50重建索引重建索引o 使用使用ALTER INDEX命令执行以下操作:命令执行以下操作:n 将索引移到另一个表空间中将

40、索引移到另一个表空间中n 通过移除已删除的项,提高空间的使用率通过移除已删除的项,提高空间的使用率n ALTER INDEX orders_id_idx REBUILD TABLESPACE index251合并索引合并索引o 遇到索引碎片时,可以重建或合并索引遇到索引碎片时,可以重建或合并索引n ALTER INDEX orders_id_idx COALESCE52合并前合并前合并后合并后检查索引及其有效性检查索引及其有效性53ANALYZE INDEX orders_id_idxVALIDATE STRUCTURE;INDEX_STATS检查索引及其有效性检查索引及其有效性n HEIGH

41、T:索引的层数:索引的层数n BLOCKS:索引总块数:索引总块数n BR_BLKS:枝干块数:枝干块数n LF_BLKS:叶子块数:叶子块数n LF_ROWS:叶子内行数:叶子内行数n DEL_LF_ROWS:叶子中被删除的行数:叶子中被删除的行数n 如果索引中已删除行的比例很高,请重新组织该索引如果索引中已删除行的比例很高,请重新组织该索引p 例如:当例如:当DEL_LF_ROWS占占LF_ROWS的比率超过的比率超过30%时时54删除索引删除索引o 语法:语法:o 在下面几种情况下,可以考虑删除索引在下面几种情况下,可以考虑删除索引 n 该索引不再使用该索引不再使用n 通过一段时间监视,

42、发现几乎没有查询或只有极少通过一段时间监视,发现几乎没有查询或只有极少数查询会使用该索引数查询会使用该索引n 由于索引中包含损坏的数据块或包含过多的存储碎由于索引中包含损坏的数据块或包含过多的存储碎片等,需要删除该索引,然后重建索引片等,需要删除该索引,然后重建索引n 由于移动了表数据而导致索引失效由于移动了表数据而导致索引失效55DROP INDEX index_name标识未用索引标识未用索引o 开始监视索引的使用开始监视索引的使用o 停止监视索引的使用停止监视索引的使用o 查看数据字典查看数据字典V$OBJECT_USAGE56ALTER INDEX index_name MONITOR

43、ING USAGEALTER INDEX index_name NOMONITORING USAGE查询索引的数据字典查询索引的数据字典o DBA_INDEXES、ALL_INDEXES、USER_INDEXESo DBA_ IND_COLUMNS、ALL_ IND_COLUMNS、USER_ IND_COLUMNSo V$OBJECT_USAGEn 提供有关索引使用情况的信息提供有关索引使用情况的信息57约束(约束(Constraints)58数据完整性(数据完整性(Data Integrity)59应用程序代码应用程序代码Table数据数据完整性约束完整性约束数据库触发器数据库触发器约束(

44、约束(Constraint)o 约束的作用约束的作用n 是在表中定义的用于维护数据库完整性的一些规则。是在表中定义的用于维护数据库完整性的一些规则。通过对表中列定义约束,可以防止在执行通过对表中列定义约束,可以防止在执行DML操作操作时,将不符合要求的数据插入到表中。时,将不符合要求的数据插入到表中。o 约束类型约束类型n PRIMARY KEY(主键约束)(主键约束)n UNIQUE(唯一性约束)(唯一性约束)n CHECK(检查约束)(检查约束)n FOREIGN KEY (外键约束)(外键约束)n NULL/NOT NULL (空(空/非空约束)非空约束)60主键约束(主键约束(PRIM

45、ARY KEY)o 主键的特点主键的特点n 起惟一标识作用,其值不能为起惟一标识作用,其值不能为NULL,也不能重复,也不能重复n 一个表中只能定义一个主键约束一个表中只能定义一个主键约束n 建立主键约束的同时,在该列上建立一个惟一性索引建立主键约束的同时,在该列上建立一个惟一性索引61UNIQUE(唯一性约束)(唯一性约束)o 唯一性约束的特点唯一性约束的特点n 定义为惟一性约束的某一列或多个列的组合的取值定义为惟一性约束的某一列或多个列的组合的取值必须惟一必须惟一n 如果某一列或多个列仅定义惟一性约束,而没有定如果某一列或多个列仅定义惟一性约束,而没有定义非空约束,则该约束列可以包含多个空

46、值义非空约束,则该约束列可以包含多个空值n Oracle自动在惟一性约束列上建立一个惟一性索引自动在惟一性约束列上建立一个惟一性索引62PRIMARY KEY vs. UNIQUEo 在一个基本表中只能定义一个在一个基本表中只能定义一个PRIMARY KEY约束,但可定义多个约束,但可定义多个UNIQUE约束约束o 对于指定为对于指定为PRIMARY KEY的一个列或多个列的一个列或多个列的组合,其中任何一个列都不能出现空值,而的组合,其中任何一个列都不能出现空值,而对于对于UNIQUE所约束的唯一键,则允许为空所约束的唯一键,则允许为空o 不能为同一个列或一组列既定义不能为同一个列或一组列既

47、定义UNIQUE约束,约束,又定义又定义PRIMARY KEY约束约束63CHECK(检查约束)(检查约束)o 检查约束的特点检查约束的特点n 检查约束用来限制列值所允许的取值范围,其表达检查约束用来限制列值所允许的取值范围,其表达式中必须引用相应列,并且表达式的计算结果必须式中必须引用相应列,并且表达式的计算结果必须是一个布尔值是一个布尔值n 约束表达式中不能包含子查询,也不能包含约束表达式中不能包含子查询,也不能包含SYSDATE、USER等等SQL函数,以及函数,以及ROWID、ROWNUM等伪列等伪列n 一个列可以定义多个检查约束一个列可以定义多个检查约束64FOREIGN KEY (

48、外键约束)(外键约束)o 外键约束的概念外键约束的概念n FOREIGN KEY约束指定某一个列或一组列作为外约束指定某一个列或一组列作为外部键,其中,包含外部键的表称为从表,包含外部部键,其中,包含外部键的表称为从表,包含外部键所引用的主键或唯一键的表称主表键所引用的主键或唯一键的表称主表n 系统保证从表在外部键上的取值要么是主表中某一系统保证从表在外部键上的取值要么是主表中某一个主键值或唯一键值,要么取空值。以此保证两个个主键值或唯一键值,要么取空值。以此保证两个表之间的连接,确保了实体的参照完整性表之间的连接,确保了实体的参照完整性65FOREIGN KEY (外键约束)(外键约束)o

49、外键约束的特点外键约束的特点n 定义外键约束的列的取值要么是主表参照列的值,定义外键约束的列的取值要么是主表参照列的值,要么为空要么为空n 外键列只能参照于主表中的主键约束列或惟一性约外键列只能参照于主表中的主键约束列或惟一性约束列束列n 可以在一列或多列组合上定义外键约束可以在一列或多列组合上定义外键约束66NULL/NOT NULL(空(空/非空约束)非空约束)o 空空/非空约束的特点非空约束的特点n 在同一个表中可以定义多个在同一个表中可以定义多个NOT NULL约束约束n 只能是列级约束只能是列级约束67DEFAULT(默认值约束)(默认值约束)o 如果用户在插入新行时没有显示为列提供

50、数据,如果用户在插入新行时没有显示为列提供数据,系统将默认值赋给该列系统将默认值赋给该列o 语法:语法:68CONSTRAINT DEFAULT 表达式表达式定义约束定义约束o 列级约束列级约束n 对某一个特定列的约束,包含在列定义中,直接跟在对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名该列的其他定义之后,用空格分隔,不必指定列名o 定义列级约束的语法为:定义列级约束的语法为:69CONSTRAINT constraint_name constraint_type conditioin; 定义约束定义约束o 表级约束表级约束n 与列定义相互独立,不

51、包括在列定义中。通常用于与列定义相互独立,不包括在列定义中。通常用于对多个列一起进行约束,与列定义用逗号分隔。定对多个列一起进行约束,与列定义用逗号分隔。定义表约束时必须指出要约束的那些列的名称义表约束时必须指出要约束的那些列的名称o 定义表级约束的语法为:定义表级约束的语法为:70CONSTRAINT constraint_name constraint_type(column1_name,column2_name,|condition);定义约束定义约束o 注意注意n Oracle约束通过名称进行标识。在定义时可以通过约束通过名称进行标识。在定义时可以通过CONSTRAINT关键字为约束命

52、名。如果用户没有关键字为约束命名。如果用户没有为约束命名,为约束命名,Oracle将自动为约束命名。将自动为约束命名。71添加和删除约束添加和删除约束o 添加约束语法:添加约束语法:o 删除约束语法:删除约束语法:n 可以通过直接指定约束的名称来删除约束,或指定可以通过直接指定约束的名称来删除约束,或指定约束的内容来删除约束约束的内容来删除约束72ALTER TABLE table_name ADD CONSTRAINT constraint_nameconstraint_type(column1_name,column2_name,)condition;ALTER TABLE table_n

53、ame DROP 在在CREATE TABLE中创建约束中创建约束o 列级约束列级约束n 在在PORT_ID列上创建列上创建PRIMARY KEY约束约束n 在在STATUS列上创建列上创建NOT NULL约束约束73在在CREATE TABLE中创建约束中创建约束o 表级约束表级约束n 在在PORT_ID列上创建列上创建PRIMARY KEY约束约束74在在CREATE TABLE中创建约束中创建约束o 例:例:UNIQUE约束约束75在在CREATE TABLE中创建约束中创建约束o 例:例:FOREIGN KEY约束约束76在在CREATE TABLE中创建约束中创建约束o 例:例:CH

54、ECK约束约束77在在CREATE TABLE中创建约束中创建约束o 例:创建表是同时声明多个约束例:创建表是同时声明多个约束78修改约束修改约束o 语法:语法:79ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint_type(column1,) condition| MODIFY column NOT NULL|NULL| DROP CONSTRAINT constraint_name| PRIMARY KEY|UNIQUE(column)通过通过ALTER TABLE创建约束创建约束o 先建表,然后修改列的声明,

55、增加主键约束先建表,然后修改列的声明,增加主键约束80通过通过ALTER TABLE创建约束创建约束o 先建表,然后为列增加主键约束先建表,然后为列增加主键约束81查询约束信息查询约束信息o 通过查询以下视图获取有关约束的信息:通过查询以下视图获取有关约束的信息:n DBA_CONSTRAINTS、ALL_CONSTRAINTS、USER_CONSTRAINTSp CONSTRAINT_TYPE列的值:如果为主键约束,则约束列的值:如果为主键约束,则约束类型为类型为P;如果为唯一性约束,则为;如果为唯一性约束,则为U;如果为外键约束,;如果为外键约束,则为则为R;如果为检查约束,则为;如果为检

56、查约束,则为C。NOT NULL 约束存储约束存储为检查约束。为检查约束。n DBA_CONS_COLUMNS、ALL_CONS_COLUMNS、USER_CONS_COLUMNS82视图(视图(Views)83视图视图o 视图是从一个或多个表或视图中提取出来的数据视图是从一个或多个表或视图中提取出来的数据的一种逻辑表现形式的一种逻辑表现形式o 使用视图具有下列优点:使用视图具有下列优点:n 可以限制对基表数据的访问,只允许用户通过视图看可以限制对基表数据的访问,只允许用户通过视图看到表中的一部分数据到表中的一部分数据n 可以使复杂的查询简单化可以使复杂的查询简单化n 提供了数据的透明性,用户

57、并不知道数据来自于何处提供了数据的透明性,用户并不知道数据来自于何处n 提供了对相同数据的不同显示提供了对相同数据的不同显示84视图视图85HR.EMPLOYEES表表CREATE VIEW创建视图创建视图o 语法:语法:n FORCE:不管基表是否存在都创建视图:不管基表是否存在都创建视图n NOFORCE:仅当基表存在时才创建视图(默认):仅当基表存在时才创建视图(默认)n subquery为子查询,决定了视图中数据的来源为子查询,决定了视图中数据的来源n WITH READ ONLY指明视图为只读视图,不能修改指明视图为只读视图,不能修改n WITH CHECK OPTION指明在使用视

58、图时,检查数指明在使用视图时,检查数据是否符合子查询中的约束条件据是否符合子查询中的约束条件n CONSTRAINT constraint为使用为使用WITH CHECK OPTION选项时指定的约束命名选项时指定的约束命名 86CREATE OR REPLACE FORCE|NOFORCE VIEW schema.view_name(column1,column2,) AS subqueryWITH READ ONLY|WITH CHECK OPTIONCONSTRIANT constraintCREATE VIEW创建视图创建视图o 创建简单视图创建简单视图n 简单视图的子查询只从简单视图

59、的子查询只从一个基表一个基表中导出数据,并且中导出数据,并且不包含连接、组函数不包含连接、组函数等等n 例如:(注:使用例如:(注:使用HR模式中的模式中的employees表)表)87CREATE VIEW创建视图创建视图o 创建复杂视图创建复杂视图n 复杂视图的子查询从复杂视图的子查询从一个或多个表一个或多个表中导出数据,也中导出数据,也可以是可以是经过运算经过运算得到的数据得到的数据n 例如:创建一个视图,包含各个员工的员工号、员例如:创建一个视图,包含各个员工的员工号、员工名及其部门名称(注:使用工名及其部门名称(注:使用SCOTT模式中的表)模式中的表)88CREATE VIEW创建

60、视图创建视图o 内嵌视图内嵌视图n 在在FROM子句中使用的子查询,习惯上又称为内嵌子句中使用的子查询,习惯上又称为内嵌视图。内嵌视图可以将复杂的连接查询简单化,可视图。内嵌视图可以将复杂的连接查询简单化,可以将多个查询压缩成一个简单查询,因此通常用于以将多个查询压缩成一个简单查询,因此通常用于简化复杂的查询简化复杂的查询n 例如:查询各个部门的部门名、部门的最高工资和例如:查询各个部门的部门名、部门的最高工资和最低工资(注:使用最低工资(注:使用SCOTT模式中的表)模式中的表)89视图操作视图操作o 数据查询数据查询、DML操作操作 (数据的插入、删除、修数据的插入、删除、修改改) 等等o

温馨提示

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

评论

0/150

提交评论