第九章创建和管理表Copyright©OracleCorporation,2001.Allrightsreserved.创建和管理表进度表:时间主题30minutes讲演20minutes练习50minutes总共中国科学院西安网络中心©2005OracleSQL入门9-1第九章创建和管理表9-2Copyright©OracleCorporation,2001.Allrightsreserved.目标完成本课后,您应当能够执行下列操作:•描述主要数据库对象•创建表•描述列定义时可用的数据类型•改变表的定义•删除、改名和截断表课程目标在本课中,你将学习关于表主要数据库对象,以及他们之间的关系。你还将学习怎样创建、修改和删除表。中国科学院西安网络中心©2005OracleSQL入门9-2第九章创建和管理表9-3Copyright©OracleCorporation,2001.Allrightsreserved.数据库对象对象说明表基本存储单元;由行和列组成视图逻辑地从一个或多个表中表示数据子集序列数字值发生器索引改善一些查询的性能同义词给对象可选择的名字数据库对象Oracle数据库能够包含多种数据结构。每一种结构应该在数据设计中描述,以使它能够在数据库开发阶段被创建。Table:存储数据View:来自一个或多个表的数据的子集Sequence:数字值发生器Index:改善一些查询的性能Synonym:给对象一个可替代的名字Oracle9i表结构表可以在任何时间被创建,即使用户正在使用数据库你不需要指定表的大小,表的大小昀终由作为一个整体分配给数据库的空间的数量定义。但是随着时间的过去一个表将使用多少空间是重要的。表结构能够被联机修改。注:除了幻灯片中介绍的数据库对象,还有一些其他的数据库对象,但没有包括在本课程中。教师注释表能够有多达1,000个列,并且必须符合标准的数据库对象命名约定。当使用AS子查询子句时,列定义可以忽略。表在创建时没有数据,除非指定了一个查询。行通常用INSERT语句添加。中国科学院西安网络中心©2005OracleSQL入门9-3第九章创建和管理表9-4Copyright©OracleCorporation,2001.Allrightsreserved.命名规则表命名和列命名:•必须以字母开始•必须是1–30个字符长度•只能包含A–Z,a–z,0–9,_,$,和#•同一个用户所拥有的对象之间不能重名•不能用Oracle服务器的保留字命名规则依照命名Oracle数据库对象的标准规则来命名数据库表和列:表名和列名必须由一个字母开始,长度在1–30之间。名字只能包含A–Z,a–z,0–9,_(下划线),$和#(合法字符,但建议不要使用)。同一个Oracle服务器用户所拥有的对象名字不能重复。名字不能用Oracle服务器的保留字。命名原则使用描述性的名字为表和其他数据库对象命名。注:名字是大小写不敏感的,例如,EMPLOYEES与eMPloyees或eMpLOYEES作为同一个名字来处理。更多信息,见Oracle9iSQLReference,“对象名字与限定”。中国科学院西安网络中心©2005OracleSQL入门9-4第九章创建和管理表9-5Copyright©OracleCorporation,2001.Allrightsreserved.CREATETABLE语句•必须有:–CREATETABLE权限–一个存储区域•指定:–表名–列名、列数据类型和列的大小CREATETABLE[schema.]table(columndatatype[DEFAULTexpr][,...]);CREATETABLE语句用SQL的CREATETABLE语句创建表以存储数据,该语句是数据定义语言(DDL)语句之一,其它的(DDL)语句将在后面讲述。DDL语句是SQL语句的一个子集,用来创建、修改或删除Oracle9i数据库的结构。这些语句会立即作用于数据库,并且他们还将信息记录在数据字典中。为了创建表,用户必须有CREATETABLE权限和用于创建对象的存储区域。数据库管理员用数据控制语言(DCL)语句,DCL语句将在后面讲述,授予权限给用户。在语法中:schema与所有者的名字一样table表的名字DEFAULTexpr指定默认值,在NSERT语句省略值时使用column列的名字datatype列的数据类型和长度教师注释请读9-37页的教师注释中国科学院西安网络中心©2005OracleSQL入门9-5第九章创建和管理表9-6Copyright©OracleCorporation,2001.Allrightsreserved.引用另一个用户的表•表属于另一个用户,不在该用户的方案中•在那些表名字的前面使用所有者的名字作为前缀引用另一个用户的表方案(schema)是对象的集合,方案对象直接反映数据在数据库中的逻辑结构,方案对象包括表、视图、同义词、序列、存储过程、索引、集群和数据库链接。如果一个表不属于本用户,那么,其所有者的名字必须放在表名的前面,例如,如果一个方案命名为USER_B,并且USER_B有一个表EMPLOYEES,那么,其他用户用下面的语句从表中取回数据:SELECT*FROMuser_b.employees;中国科学院西安网络中心©2005OracleSQL入门9-6第九章创建和管理表9-7Copyright©OracleCorporation,2001.Allrightsreserved.DEFAULT选项•在插入时,为一个列指定一个默认值•文字值、表达式或者SQL函数都是合法的值•另一个列名或者伪列是不合法的值•默认数据类型必须与列的数据类型匹配...hire_dateDATEDEFAULTSYSDATE,...DEFAULT选项一个列可以用DEFAULT选项给予一个默认值,列该选项防止插入时输入空值到列中。默认值可以是文字、表达式或SQL函数,例如用SYSDATE和USER。但默认值不能是另一个列的名字或伪列,例如NEXTVAL或CURRVAL。默认表达式必须与列的数据类型相匹配。注:CURRVAL和NEXTVAL在后面的章节中说明。教师注释这里是一个伪列的例子,对于一个查询返回的每一行,ROWNUM伪列返回一个数来指示Oracle服务器从一个表中选择的行顺序。被选择的第一行的ROWNUM为1,第二行为2,等等。对于带有DEFAULT关键字的INSERT和UPDATE语句,其默认值的处理方式将在“操纵数据”一课中讲述。中国科学院西安网络中心©2005OracleSQL入门9-7第九章创建和管理表9-8Copyright©OracleCorporation,2001.Allrightsreserved.CREATETABLEdept(deptnoNUMBER(2),dnameVARCHAR2(14),locVARCHAR2(13));Tablecreated.Tablecreated.•创建表•确认表的创建创建表DESCRIBEdept创建表幻灯片内中的例子创建DEPT表,该表有三个列:DEPTNO、DNAME和LOC。用DESCRIBE命令来确认表的创建。因为创建表是一个DDL语句,当该语句执行时将会发生一个自动提交。教师注释解释CREATETABLE的附加语法可以包括约束等。对于CREATETABLE语法的更多信息,请参考:Oracle9iSQLReference,“创建表”。中国科学院西安网络中心©2005OracleSQL入门9-8第九章创建和管理表9-9Copyright©OracleCorporation,2001.Allrightsreserved.Oracle数据库中的表•用户表:–由用户创建和维护的表的集合–包含用户信息•数据字典:–由Oracle服务器创建和维护的表的集合–包含数据库信息Oracle数据库中的表用户表由用户创建,例如EMPLOYEES。在Oracle数据库中有另一个表和视图的集合称为数据字典(datadictionary),该集合由Oracle服务器创建和维护,其中包含有关数据库的信息。全部数据字典表的所有者是用户SYS。数据字典表的基表很少被用户访问,因为其中的信息不容易理解,因此,用户一般是访问数据字典视图,因为视图中的信息是以容易理解的格式表示的。存储在数据字典中的信息包括Oracle服务器用户的名字,被授予用户的权限,数据库对象名,表结构和审计信息。有四种数据字典视图,每一种有一个特定的前缀来反映其不同的目的。前缀说明USER_这些视图包含关于用户所拥有的对象的信息。ALL_这些视图包含所有用户可访问的表(对象表和相关的表)的信息。DBA_这些视图是受限制的视图,它们只能被分配有DBA角色的用户所访问。V$这些视图是动态执行的视图,包含数据库服务器的性能、存储器和锁的信息。中国科学院西安网络中心©2005OracleSQL入门9-9第九章创建和管理表9-10Copyright©OracleCorporation,2001.Allrightsreserved.SELECTtable_nameFROMuser_tables;SELECT*FROMuser_catalog;查询数据字典•查看本用户所拥有的不同的对象类型•查看本用户所拥有的表、视图、同义词和序列SELECTDISTINCTobject_typeFROMuser_objects;•查看本用户所拥有的表的名称查询数据字典你可以查询数据字典表来查看你所拥有的各种数据库对象。常用的数据字典表有:USER_TABLESUSER_OBJECTSUSER_CATALOG注:USER_CATALOG有一个称为CAT的同义词,你可以在SQL语句中用该同义词代替USER_CATALOG。SELECT*FROMCAT;中国科学院西安网络中心©2005OracleSQL入门9-10第九章创建和管理表9-11Copyright©OracleCorporation,2001.Allrightsreserved.数据类型数据类型说明VARCHAR2(size)可变长度的字符数据CHAR(size)固定长度的字符数据NUMBER(p,s)可变长度的数字数据DATE日期和时间值LONG最大2G的可变长度字符数据CLOB最大4G的字符数据RAWandLONGRAW原始二进制数据BLOB最大4G的二进制数据BFILE最大4G的,存储在外部文件中的二进制数据ROWID一个64进制的数制系统,表示表中一行的唯一地址数据类型数据类型说明VARCHAR2(size)可变长度字符数据(必须指定昀大字符数:昀小字符数是1;昀大字符数是4000)CHAR[(size)]固定长度字符数据,长度的大小以字节为单位(默认和昀小字符数为1;昀大字符数为2000)NUMBER[(p,s)]数字,精度为p,小数为s(p是小数数字的总长度,s是小数点右边的数字长度;p的范围从1到38,s的范围从-84到127)DATE日期和时间值,从公元前4712.1.1到公元9999.12.31LONG昀大2G的可变长度字符数据CLOB昀大4G的字符数据RAW(size)原始二进制数据(必须指定昀大长度,昀大长度为2000)LONGRAW可变长度原始二进制数据,昀大2GBLOB二进制数据,昀大4GBFILE二进制数据存储在一个外部文件中;昀大到4GROWID十六进制串,表示行在所在的表中唯一的行地址。该数据类型主要用于返回ROWID伪列中国科学院西安网络中心©2005OracleSQL入门9-11第九章创建和管理表数据类型(续)在用子查询创建表时,LONG列不会被复制。LONG列不能包括在GROUPBY或ORDERBY子句中。在每个表中只能有一个LONG列。在LONG列上不能定义约束。通常用情况下使用CLOB列而不是LONG列。教师注释Oracle8引入了大对象(LOB)数据类型,它可以存储大的和非结构化的数据,例如文本、图象、视频和空间数据,昀大4G。LONG列可以容