《Oracle数据库基础与应用教程》书籍教案人民邮电出版社出版於岳编写作者联系方式:airfish2000@126.com本书内容:本书全面讲述了Oracle数据库的日常管理工作内容。全共14章,包含Oracle简介和安装、Oracle客户端、管理Oracle环境、Oracle体系结构、管理Oracle存储结构、SQL语言、表、约束、视图、同义词和序列、索引、实现数据库安全、DataPump数据导出和导入、数据库备份和恢复。每章结尾提供适量的选择题、简答题和操作题,通过练习和操作实践,帮助读者巩固所学内容。本书适合Oracle爱好者、Oracle工程师、数据库管理员、培训机构以及大专院校计算机专业教师和学生使用。第7章表表简介7.1Oracle内置数据类型7.2创建表7.3修改表7.4截断表7.5删除表7.6使用OEM管理表7.7小结7.87.1表简介7.1.1什么是表表是数据库中一个非常重要的方案对象,被用来存储数据,是Oracle数据库中数据组织的基本单位。一个表定义包括一个表名和列的集合。列标识表中描述的实体的属性,比如员工表中的employee_id列是指员工实体的员工ID属性。当创建表的时候,一般会为每一个列指定列名、数据类型、大小、小数位数、默认值等。如employee_id列指定NUMBER(6)数据类型,表明该列只能包含高达6位数大小的数字数据。大小可以由数据类型预先确定。一个表只能包含一个虚拟列,虚拟列不占用磁盘空间。数据库通过计算一组用户指定的表达式或函数生成派生需求上的虚拟列的值。表创建好之后,可以使用SQL语句进行插入、查询、删除和更新行操作。行是列信息的集合,对应于一个表中的记录,比如员工表描述指定员工的所有属性。7.1.2表类型在Oracle数据库中,表可以分为以下几种类型。1.普通表2.索引组织表3.临时表4.外部表5.分区表6.簇表7.2Oracle内置数据类型创建表的时间需要为列指定数据类型,不同的数据类型存储不同类型的数据。Oracle内置数据类型有字符数据类型、数字数据类型、日期和时间数据类型、二进制数据类型和大对象数据类型。7.2.1字符数据类型在Oracle数据库中,字符数据类型存储数字和字母等组成的字符,常用的字符数据类型有CHAR、NCHAR、VARCHAR2、NVARCHAR2和VARCHAR。1.CHAR(size[BYTE|CHAR])2.NCHAR(size)3.VARCHAR2(size[BYTE|CHAR])4.NVARCHAR2(size)5.VARCHAR7.2.2数字数据类型在Oracle数据库中,数字数据类型所有的数值数据,如整数、分数、双精度数和浮点数等,常用的数字数据类型有NUMBER和FLOAT。1.NUMBER[(p[,s])]以十进制格式进行储存的数字数据类型,p是指精度(指数字的总位数),s是指刻度范围(小数点右边的位数)。p的范围可以是1~38,s的范围可以是-84~127。s的默认值是0,如NUMBER(5)、NUMBER。在指定精度和刻度范围的时候需要遵循以下规则。当s0时,s表示小数点右边的数字的个数。当一个数字的整数部分的长度p-s时,Oracle就会报错。当一个数字的小数部分的长度s时,Oracle就会舍入。当s0时,s表示小数点左边的数字的个数,Oracle就对小数点左边的s个数字进行舍入。当sp时,p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入。2.FLOAT[(p)]具有精度p的NUMBER数据类型的子类型。一个FLOAT值,在内部表示为NUMBER。精度p的范围可以是1~126的二进制数字。一个FLOAT值是1~22字节。3.INTEGER简称INT,相当于刻度范围为0的NUMBER数据类型。7.2.3日期和时间数据类型在Oracle数据库中,日期和时间数据类型存储日期和时间值,常用的日期和时间数据类型有DATE、TIMESTAMP和TIMESTAMPWITHTIMEZONE。7.2.4二进制数据类型在Oracle数据库中,二进制数据类型存储非结构化数据,常用的二进制数据类型有RAW和LONGRAW。1.RAW(size)非结构化数据的可变二进制数据,必须为RAW指定size,最大尺寸为2000字节。2.LONGRAW非结构化数据的可变二进制数据,尺寸可达2GB。不建议使用LONGRAW数据类型,可以使用BLOB数据类型来代替。7.2.5行数据类型在Oracle数据库中,表中每一行数据在数据库中的存储位置可以由行的物理地址和逻辑地址表示,这些地址存储在表的ROWID伪列中,常用的行数据类型有ROWID和UROWID。1.ROWID以64位为基数的字符串,表示一条记录在表中相对唯一的地址值。该数据类型主要是ROWID伪列返回的值。2.UROWID[(size)]以64位为基数的字符串,表示索引组织表的一行的逻辑地址。可选的大小是UROWID类型的列的大小。最大尺寸和默认尺寸为4000字节。7.2.6大对象数据类型在Oracle数据库中,大对象数据类型存储大对象(LargeOBject,LOB),LOB是为图像、视频、音频、文本、空间数据设计的,大对象最大尺寸是(4GB-1)*(数据库块大小),一般数据库块大小为8K,常用的大对象数据类型有CLOB、NCLOB、BLOB、BFILE和LONG。1.CLOB2.NCLOB3.BLOB4.BFILE5.LONG7.3创建表CREATETABLE语句用于创建表。要在自己的方案中创建表,必须要拥有CREATETABLE系统权限。要在另一个用户的方案中创建表,必须要拥有CREATEANYTABLE系统权限。7.4修改表使用ALTERTABLE语句来改变表的定义。要修改表,该表必须在自己的方案中,或者必须在表上拥有ALTER对象权限,或者必须要拥有ALTERANYTABLE系统权限。7.4.1设置表的读写模式指定READONLY把表设置为只读模式。当表处于只读模式时,不能执行任何DML语句或SELECT...FORUPDATE语句来影响表。只要不修改任何表中的数据就可以执行DDL语句。指定READWRITE把表设置为读/写模式。7.4.2为表指定并行处理使用PARALLEL在表上为查询和DML操作更改默认并行度。7.4.3启用或禁用与表相关联触发器使用ENABLEALLTRIGGERS或DISABLEALLTRIGGERS来启用或禁用与表相关联的所有触发器。要启用或禁用触发器,触发器必须在自己的方案中,或者必须要拥有ALTERANYTRIGGER系统权限。7.4.4启用或禁用表锁定如果在操作过程中表被锁定,Oracle数据库只允许在表上进行DDL操作。在DML操作上不需要这样的表锁定。Oracle数据库启用表锁定之前,所有目前正在执行的事物必须提交或回滚;指定DISABLETABLELOCK禁用表锁定,从而防止在表上进行DDL操作。当目标表的表锁定被禁用时,不会执行并行DML操作。7.4.5解除分配未使用的空间使用DEALLOCATEUNUSED子句明确地释放表的末尾未被使用的空间,以供在表空间中其他段的空间使用。禁用表锁定以后,不能解除分配未使用的空间。7.4.6标记列为未使用使用SETUNUSED子句以标记表中的列为未使用。无法将属于SYS的表中的列标记为未使用。对于内部的堆组织表,指定SETUNUSED子句实际上并没有从表中的每一行中删除目标列。可以稍后通过发出ALTERTABLE...DROPUNUSEDCOLUMNS语句删除标记为未使用的列。USER_UNUSED_COL_TABS、ALL_UNUSED_COL_TABS或DBA_UNUSED_COL_TABS数据字典可以用来列出包含未使用列的所有表。这些数据字典中的COUNT列显示在表中未使用的列的数量。7.4.7在表中添加、修改和删除列当修改表的时候,可以在表中添加、修改和删除列。1.添加列2.修改列3.删除列7.4.8为表添加注释COMMENTON语句用于为表添加描述性的注释信息,这样就可以充分地描述表的内容或用法。注释内容可以长达4000个字节,必须存储在单引号内。7.4.9移动表到其他表空间使用MOVE子句可以将表移动到其他的表空间中。7.4.10更改表的日志记录属性使用LOGGING和NOLOGGING可以更改表的日志记录属性,生成重做日志记录。7.4.11压缩表使用COMPRESS来指示Oracle数据库是否压缩数据段来减少磁盘和内存的使用。随着数据库的增长规模,可以考虑压缩表。压缩表将节省磁盘空间,减少数据库缓冲区高速缓存的使用,并在读取时可以显著加快查询执行。7.4.12收缩表使用SHRINKSPACE子句可以对表手动收缩空间,只适用于使用自动段管理的表空间中的段。在默认情况下,Oracle数据库会压缩段,调整高水位,并立即释放空间。压缩段需要先进行行移动(RowMovement),因此必须在收缩表之前启用行移动。收缩表具有以下限制。不支持对带有基于函数的索引的表进行段收缩。不能为压缩表指定SHRINKSPACE子句。7.4.13重命名列使用RENAMECOLUMN子句重命名表中的列。新的列名必须与表中其他列的名称不能相同。7.4.14重命名表要对表进行重命名,可以通过RENAME和ALTERTABLE...RENAMETO语句来实现。1.RENAME语句2.ALTERTABLE...RENAMETO语句7.5截断表TRUNCATETABLE语句用于从表中删除所有数据。使用这种方法删除数据,可以比删除并重新创建表更有效。TRUNCATETABLE语句执行以后不能回滚。7.6删除表DROPTABLE语句用于删除表,将表移动到回收站或从数据库中完全删除表和它的所有数据。对于外部表,此语句只删除数据库中表的元数据。它的实际数据并没有影响,因为它驻留在数据库之外。要删除表,该表必须在自己的方案中,或者必须要拥有DROPANYTABLE系统权限。在删除表的时候,将会执行以下操作。删除表中所有的数据。删除与该表有关的索引、触发器和对象权限。从数据字典中删除表的定义。回收分配给表的存储空间。7.7使用OEM管理表7.7.1使用OEM创建表使用OracleEnterpriseManager按以下步骤创建表。(1)在OracleEnterpriseManager页面中,依次单击【方案】→【数据库对象】→【表】,如图7-1所示,单击【创建】按钮。图7-1表(2)在图7-2所示页面中,指定表组织,在此选择【标准(按堆组织)】单选框,然后单击【继续】按钮。图7-2创建表:表组织(3)在图7-3所示【一般信息】页面中,按以下要求输入内容。图7-3【一般信息】页面(4)在图7-4所示【存储】页面中,指定存储信息,如表空间、区数、空间使用情况、空闲列表、事物处理数、缓冲池和压缩选项等内容。图7-4【存储】页面(5)在图7-5所示【选项】页面中,指定启用行移动、并行和高速缓存选项,然后单击【确定】按钮。图7-5【选项】页面7.7.2使用OEM收缩段对表进行收缩段操作可以压缩空间碎片,然后将恢复的空间释放到表空间,以此节约空间使用。使用OracleEnterpriseManager按以下步骤收缩段。(1)在图7-6所示页面中,搜索方案SYS中的表TABLE_1。选择表TABLE_1,在【操作】下拉框中选择【收缩段】,然后单击【开始】按钮。图7-6搜索表(2)在图7-7所示页面中,指定收缩选项,在此选择【压缩段并释放空间】单选框,然后单击【继续】按钮。图7-7收缩段(3)在图7-8所示页面中,指定作业名称和调度选项,然后单击【提交】按钮。图7-8调度(4)在图7-9所示页面中,显示已经成功创建作业,可以看到调度程序作业正在运行。图7-9调度程序作业7.7.3使用OEM删除表使用OracleEnterpriseManager按以下步骤删除表。(1)在图