1、1,第8章 管理表,表是最重要的数据库对象之一,同时也是最常用的模式对象。由于表是存储数据的主要手段,因此对表的管理也是非常重要的。另外,通过在表定义约束,可以用最简单的方式实现一些基本的应用逻辑,同时也是对表中数据的有效性和完整性进维护。在Oracle 11g系统中,表有多种类型,本章讲述最基本的堆表,以及对堆表和约束的操作进行详细介绍。,2,本章知识要点:,定义表结构 Oracle表的特性 修改表 数据的完整性约束 设置各个完整性约束的状态 在表中使用大对象类型,3,8.1 创建表,数据库中的数据是以表的形式存储。数据库中的每一个表都被为一个模式(或用户)所拥用,因此表是一种典型的模式对象
2、。在创建表时,Oracle将在一个指定的表空间中为其分配存储空间。,8.1.1 表结构,表是常见的一种组织数据的方式,一张表一般都具有多个列,或者称为字段。每个字段都具有特定的属性,包括字段名、字段数据类型、字段长度、约束、默认值等,这些属性在创建表时被确定。从用户角度来看,数据库中数据的逻辑结构是一张二维表,在表中通过行和列来组织数据。在表中的每一行存放一条信息,通常称表中的一行为一条记录。,4,8.1.2 创建表,创建表时需要使用CREATE TABLE语句,为了在用户自己的模式中创建一个新表,则用户必须具有CREATE TABLE系统权限。如果要在其他用户模式中创建表,则必须具有CREA
3、TE ANY TABLE的系统权限。此外,用户还必须在指定的表空间中具有一定的配额存储空间。,5,6,8.1.3 表特性,当用户在Oracle中建立模式对象(如表)时,Oracle允许用户规定该对象如何使用磁盘上的存储空间。如果仅为表指定了表空间,而没有设置存储参数,它将自动采用所属表空间的默认存储参数设置。然而表空间的默认存储参数设置并不一定对表空间中的每一个表都适合,因此,当表所需的存储参数与表空间的默认存储参数不同时,需要在创建表时显式指定存储参数以替换表空间的默认存储设置。,7,8.2 修改表,在创建表后,如果发现对表的定义有不满意的地方,还可以对表进行修改。这些修改操作包括:增加或删
4、除表中的字段、改变表的存储参数设置,以及对表进行增加、删减和重命名等操作。普通用户只能对自己模式中的表进行修改,如果想要对任何模式中的表进行修改操作,则用户必须具有ALTER ANY TABLE系统权限。,8.2.1 增加和删除字段,使用ALTER TABLE ADD语句能够向表中添加新的字段。例如,利用下面的语句在EMPLOYEES表中增加一个名为AGE的新字段:,8,SQL alter table employees add(age number(2); 表已更改。SQL desc employees名称 是否为空? 类型- - -EMPNO NOT NULL NUMBER(10)ENAM
5、E VARCHAR2(20)SEX CHAR(2)SALARY NUMBER(8,2)HIREDATE DATEJOB VARCHAR2(10)EMAIL VARCHAR2(50)DEPTNO NOT NULL NUMBER(3)AGE NUMBER(2),8.2.2 更新字段,除了在表中增加和删除字段之外,还可以根据实际情况更新字段的有关属性。包括更新字段的数据类型的长度、数字列的精度、列的数据类型和列的默认值等。使用ALTER TABLE MODIFY语句更新字段属性的语法形式如下:,9,alter table table_name modify column_name type;,10,
6、8.2.3 重命名表,在创建表后,如果想要修改表的名称,则可以使用ALTER TABLE RENAME语句对表进行重命名。,11,8.2.4 改变表的存储表空间和存储参数,在创建表时,通过一些相应的参数可以规定表的存储位置、存储参数等。在表创建后,如果发现这些参数设置不合适时,还可以对其进行修改。,8.2.5 删除表定义,当不再需要某个表时,就可以删除该表的定义。需要注意,一般情况下用户只能删除自己模式中的表,如果用户要删除其他模式中的表,则用户必须具有DROP ANY TABLE系统权限。删除表所使用的DROP TABLE语句如下:,12,SQL drop table employees;
7、表已删除。,8.2.6 修改表的状态,Oracle 11g推出了一个新的特性,用户可以将表置于read only(只读)状态。处于该状态的表不能执行DML操作和某些DDL操作。在Oracle 11g之前,为了使某个表处理READ ONLY状态,只能通过将整个表空间或者数据库置于read only状态。,13,8.3 定义和管理数据完整性约束,数据库不仅仅是存储数据,它也必须保证所存储数据的正确性。如果数据不准确或不一致,那么该数据的完整性可能就受了到破坏,从而给数据库本身的可靠性带来问题。为了维护数据库中数据的完整性,在创建表时常常需要定义一些约束。约束可以限制列的取值范围,强制列的取值来自合
8、理的范围。在Oracle 11g系统中,约束的类型包括:非空约束、主键约束、惟一性约束、外键约束、检查约束和默认约束等。,14,15,8.3.1 非空约束,非空约束就是限制必须为某个列提供值。空值是不存在的,它即不是数字0,也不是空字符串,而是没有、未知。在表中,当某些字段的值是不缺少的,那么就可以为该列定义为非空约束。这样当插入数据时,如果没有为该列提供数据,那么系统就会出现一个错误消息。,16,8.3.2 主键约束,主键约束用于惟一地确定表中的每一行数据。在一个表中,最多只能有一个主键约束,主键约束即可以是一个列组成的,也可能是由两个或两个以上列组成的。对于表中的每一行数据,主键约束列都是
9、不同的,主键约束同时也具有非空约束。,8.3.3 惟一性约束,惟一性约束强调所在的列不允许有相同的值。但是,它的定义比主键约束弱,即它所在的列允许空值。UNIQUE约束的主要作用是在保证除主键列外、其他列值的惟一性。,17,8.3.4 外键约束,外键FOREIGN KEY约束是几种约束是最复杂的,外键约束可以使两个表进行关联。外键是指引用另一个表中的某个列或某几个列,或者本表中另一个列或另几个列的列。被引用的列应该具有主键约束,或者惟一性约束。,18,8.3.6 禁止和激活约束,为什么要禁用约束呢?这是因为约束的存在会降低插入和更改数据的效率,系统必须确认这些数据是否满足定义的约束条件。当执行
10、一些特殊操作时,如使用SQL*Loader从外部数据源向表中导入大量数据,并且事先知道操作的数据满足了定义的约束,为提高运行效率,就可以禁用这些约束。,19,8.3.7 删除约束,如果不再需要某个约束时,则可以删除该约束。可以使用带DROP CONSTRAINT子句的ALTER TABLE语句删除约束。删除约束与禁用约束不相同,禁用约束是可以激活的,但是删除的约束在表中就完全消失了。,20,8.4 使用大对象数据类型,在Oracle 11g系统中,提供了4种常用的大对象类型。这4种大对象类型分别为:CLOB类型;字符LOB类型可以用来存储各种字符数据,主要用于存储英语字符;NCLOB类型,国际语言字符LOB类型,使用多字节存储各种语言的字符,主要用于存储非英语字符。BLOB类型,二进制LOB类型主要用于存储二进制数据;BFILE类型,二进制FILE类型,用于存储指向数据库系统外面的文件系统中文件的指针。,21,