Oracle10g数据库基础教程第9章模式对象Oracle10g数据库基础教程本章内容模式概念表管理索引管理分区表与分区索引的管理视图、序列、同义词、数据库链接管理Oracle10g数据库基础教程本章要求掌握表的管理掌握索引的管理掌握分区的概念及分区管理了解视图、序列、同义词、数据库链接等的管理Oracle10g数据库基础教程9.1模式模式概念模式与用户的关系模式选择与切换Oracle10g数据库基础教程模式概念是指一系列逻辑数据结构或对象的集合。模式与用户的关系模式与用户相对应,一个模式只能被一个数据库用户所拥有,并且模式的名称与这个用户的名称相同。通常情况下,用户所创建数据库对象都保存在与自己同名的模式中。同一模式中数据库对象的名称必须惟一,而在不同模式中的数据库对象可以同名。默认情况下,用户引用的对象是与自己同名模式中的对象,如果要引用其他模式中的对象,需要在该对象名之前指明对象所属模式。Oracle10g数据库基础教程模式选择与切换如果用户以NORMAL身份登录,则进入同名模式;若以SYSDBA身份登录,则进入SYS模式;如果以SYSOPER身份登录,则进入PUBLIC模式。Oracle10g数据库基础教程9.2表创建表表约束的管理表参数设置修改表删除表利用OEM管理表Oracle10g数据库基础教程9.2.1创建表表的创建创建临时表利用子查询创建表Oracle10g数据库基础教程(1)表的创建表的规划与设计表名称列的数量列名称与类型表约束表内部数据的组织方式(标准表、索引化表、分区表)表存储位置、存储空间分配等。Oracle10g数据库基础教程使用CREATETABLE语句创建表CREATETABLEtable_name(column_namedatatype[column_level_constraint][,column_namedatatype[column_level_constraint]…][,table_level_constraint])[parameter_list];Oracle10g数据库基础教程CREATETABLEemployee(empnoNUMBER(5)PRIMARYKEY,enameVARCHAR2(15),deptnoNUMBER(3)NOTNULLCONSTRAINTfk_empREFERENCESdept(deptno))TABLESPACEUSERSPCTFREE10PCTUSED40STORAGE(INITIAL50KNEXT50KMAXEXTENTS10PCTINCREASE25);Oracle10g数据库基础教程表名(table_name)必须是合法标识符,长度为1~30字节,并且以字母开头,可以包含字母(A~Z,a~z)、数字(0~9),下划线(_)、美元符号($)和井号(#)。此外,表名称不能是Oracle数据库的保留字数据类型(datatype)字符类型数字类型日期类型LOB类型二进制类型行类型Oracle10g数据库基础教程CHAR(n)定长字符串,n的取值范围为1-2000字节VARCHAR2(n)可变字符串,n取值范围为1-4000字节自动调整数据长度NCHAR(n)用来存储Unicode类型字符串。NVARCHAR2(n)它用来存储Unicode类型字符串。LONG可变长字符列,最大长度为2GB用于不需设置成索引的字符,不常用字符类型Oracle10g数据库基础教程数字类型NUMBER(m,n)用于存储整数和实数。m表示数值的总位数(精度),取值范围为1~38,默认为38;n表示小数位数,若为负数则表示把数据向小数点左边舍入,默认值为0。Oracle10g数据库基础教程日期类型DATE可以存储的日期范围为公元前4712年1月1日到公元4712年1月1日,由世纪、年、月、日、时、分、秒组成。可以在用户当前会话中使用参数NLS_DATE_FORMAT指定日期和时间的格式,或者使用TO_DATE函数,将表示日期和时间的字符串按特定格式转换成日期和时间。TIMESTAMP[(n)]:表示时间戳,是DATE数据类型的扩展,允许存储小数形式的秒值。n表示秒的小数位数,取值范围为1~9,默认值为6。TIMESTAMP[(n)]WITHTIMEZONE:通过存储一个时区偏差来扩展TIMESTAMP类型。时区偏差值为相对于通用协调时间(或称UTC,以前称为格林威治时间或GMT)的时差。Oracle10g数据库基础教程TIMESTAMP[(n)]WITHLOCALTIMEZONE与TIMESTAMP[(n)]WITHTIMEZONE的不同之处在于,存储日期时直接转换为数据库时区日期,而读取日期时将数据库时区日期转换为用户会话时区日期。INTERVALYEAR(n)TOMONTH存储以年份和月份表示的时间段。n是表示YEAR的最多数字位数,默认为2。例如,INTERVAL'2-11'YEARTOMONTH表示2年11个月。INTERVALDAY(m)TOSECOND(n)存储以天数、小时数、分钟数和秒数表示的时间段。m是表示DAY的最多数字位数,默认为2。n是表示SECOND的小数部分的位数,默认为6。例如,INTERVAL'510:30:40'DAYTOSECOND表示5天10小时30分40秒。Oracle10g数据库基础教程LOB类型CLOB用于存储可变长度的字符数据,如文本文件等,最大数据量为4GB。NCLOB用于存储可变长度的Unicode字符数据,最大数据量为4GB。BLOB用于存储大型的、未被结构化的可变长度的二进制数据(如二进制文件、图片文件、音频和视频等非文本文件),最大数据量为4GB。BFILE用于存储指向二进制格式文件的定位器,该二进制文件保存在数据库外部的操作系统中,文件最大为4GB。Oracle10g数据库基础教程二进制类型RAW(n)用于存储可变长度的二进制数据,n表示数据长度,取值范围为1~2000字节;LONGRAW用于存储可变长度的二进制数据,最大存储数据量为2GB。Oracle10g数据库基础教程行类型ROWID行标识符,表中行的物理地址的伪列类型。ROWID类型数据由18位十六进制数构成,包括对象编号、文件编号、数据块编号和块内行号。UROWID行标识符,用于表示索引化表中行的逻辑地址。Oracle10g数据库基础教程约束(constraint)在Oracle数据库中对列的约束包括主键约束、惟一性约束、检查约束、外键约束和空/非空约束等5中,定义方法有表级约束和列级约束2种。参数(parameter_list)在定义表时,可以通过参数设置表存储在哪一个表空间中,和存储空间分配等。Oracle10g数据库基础教程(2)创建临时表临时表中的数据在特定条件下自动释放,但其结构将一直存在。根据临时表中数据被释放的时间不同,临时表分为事务级别的临时表和会话级别的临时表两类。ONCOMMITDELETEROWS//事务级临时表ONCOMMITPRESERVEROWS//会话级临时表语法使用CREATEGLOBALTEMPORARYTABLE语句创建临时表使用ONCOMMIT子句说明临时表的类型,默认为事务级别的临时表。Oracle10g数据库基础教程事务级别的临时表是在事务提交时系统自动删除表中所有记录。CREATEGLOBALTEMPORARYTABLEtran_temp(IDNUMBER(2)PRIMARYKEY,nameVARCHAR2(20))ONCOMMITDELETEROWS;Oracle10g数据库基础教程会话级别的临时表是在会话终止时系统自动删除表中所有记录。CREATEGLOBALTEMPORARYTABLEsess_temp(IDNUMBER(2)PRIMARYKEY,nameVARCHAR2(20))ONCOMMITPRESERVEROWS;Oracle10g数据库基础教程(3)利用子查询创建表语法CREATETABLEtable_name(column_name[column_level_constraint][,column_name[column_level_constraint]…][,table_level_constraint])[parameter_list]ASsubquery;Oracle10g数据库基础教程注意通过该方法创建表时,可以修改表中列的名称,但是不能修改列的数据类型和长度;源表中的约束条件和列的缺省值都不会复制到新表中;子查询中不能包含LOB类型和LONG类型列;当子查询条件为真时,新表中包含查询到的数据;当查询条件为假时,则创建一个空表。Oracle10g数据库基础教程创建一个标准表,保存工资高于3000的员工的员工号、员工名和部门号。语句为CREATETABLEemp_select(emp_no,emp_name,dept_no)ASSELECTempno,ename,deptnoFROMemployeeWHEREsal3000;Oracle10g数据库基础教程创建一个会话级临时表,保存部门号、部门人数和部门的平均工资。CREATEGLOBALTEMPORARYTABLEept_tempONCOMMITPRESERVEROWSASSELECTdeptno,count(*)num,avg(sal)avgsalFROMempGROUPBYdeptno;Oracle10g数据库基础教程9.2.2表约束约束的类别定义约束添加和删除约束设置约束状态约束的延迟检查查询约束信息Oracle10g数据库基础教程(1)约束的类别约束作用是在表中定义的用于维护数据库完整性的一些规则。通过对表中列定义约束,可以防止在执行DML操作时,将不符合要求的数据插入到表中。约束类型PRIMARYKEYUNIQUECHECKFOREIGNKEYNULL/NOTNULLOracle10g数据库基础教程PRIMARYKEY特点定义主键,起惟一标识作用,其值不能为NULL,也不能重复;一个表中只能定义一个主键约束;建立主键约束的同时,在该列上建立一个惟一性索引,可以为它指定存储位置和存储参数;主键约束可以是列级约束,也可以是表级约束。Oracle10g数据库基础教程UNIQUE特点定义为惟一性约束的某一列或多个列的组合的取值必须惟一;如果某一列或多个列仅定义惟一性约束,而没有定义非空约束,则该约束列可以包含多个空值;Oracle自动在惟一性约束列上建立一个惟一性索引,可以为它指定存储位置和存储参数;惟一性约束可以是列级约束,也可以是表级约束。Oracle10g数据库基础教程在一个基本表中只能定义一个PRIMARYKEY约束,但可定义多个UNIQUE约束;对于指定为PRIMARYKEY的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于UNIQUE所约束的唯一键,则允许为空。不能为同一个列或一组列既定义UNIQUE约束,又定义PRIMARYKEY约束。PRIMARYKEY与UNIQUE比较Oracle10g数据库基础教程CHECK特点检查约束用来限制列值所允许的取值范围,其表达式中必须引用相应列,并且表达式的计算结果必须是一个布尔值;约束表达式中不能包含子查询,也不能包含SYSDATE、USER等SQL函数,和ROWID、ROWNUM等伪列;一个列可以定义多个检查约束;检查约束可以是列级约束,也可以是表级约束。Oracle10g数据库基础教程概念FOREIGNKEY约束指定某一个列或一组列作为外部键,其中,包含外部键的表称为从表,包含外部键所引用的