《oracle数据库技术第八讲模式对象》由会员分享,可在线阅读,更多相关《oracle数据库技术第八讲模式对象(231页珍藏版)》请在金锄头文库上搜索。
1、第八讲 模式对象,本讲内容,模式概念表管理索引管理索引化表管理分区表与分区索引的管理外部表的管理簇、视图、序列、同义词、数据库链接管理,模式是指一系列逻辑数据结构或对象的集合。 模式与用户相对应,一个模式只能被一个数据库用户所拥有,并且模式名称与拥有用户的名称相同。用户所创建数据库对象都保存在与同名模式中。同一模式中数据库对象的名称必须惟一,而在不同模式中的数据库对象可以同名。默认情况下,用户引用的对象是与同名模式中的对象,如果要引用其他模式中的对象,需要在该对象名之前指明对象所属模式。,1 模式概念,模式选择与切换如果用户以NORMAL身份登录,则进入同名模式;若以SYSDBA身份登录,则进
2、入SYS模式;如果以SYSOPER身份登录,则进入PUBLIC模式。,1 模式概念,2 表,创建表表约束的管理 表参数设置 修改表删除表利用OEM管理表,2.1 创建表,表的创建 创建临时表 利用子查询创建表,2.1.1 表的创建,表的规划与设计表名称列的数量列名称与类型表约束表内部数据的组织方式(标准表、索引化表、分区表)表存储位置、存储空间分配等。,2.1.1 表的创建,使用CREATE TABLE语句 创建表CREATE TABLE table_name(column_name datatype column_level_constraint,column_name datatype c
3、olumn_level_constraint,table_level_constraint) parameter_list;,2.1.1 表的创建,CREATE TABLE employee( empno NUMBER(5) PRIMARY KEY, ename VARCHAR2(15), deptno NUMBER(3) NOT NULL CONSTRAINT fk_emp REFERENCES dept(deptno))TABLESPACE USERSPCTFREE 10 PCTUSED 40STORAGE(INITIAL 50K NEXT 50K MAXEXTENTS 10 PCTINC
4、REASE 25);,表名(table_name)必须是合法标识符数据类型(datatype) 字符类型数字类型日期类型LOB类型二进制类型 行类型,2.1.1 表的创建,2.1.1 表的创建,约束(constraint)表级约束和列级约束2种对列的约束包括主键约束、惟一性约束、检查约束、外键约束和空/非空约束等5种。参数(parameter_list)可以通过参数设置表存储在哪一个表空间中,和存储空间分配等。,CHAR(n):定长字符串,n的取值范围为1-2000字节VARCHAR2(n):可变字符串,n取值范围为1-4000字节NCHAR(n):用来存储Unicode类型字符串。NVARC
5、HAR2(n) :它用来存储Unicode类型字符串。LONG:可变长字符列,最大长度为2GB,字符类型,数字类型,NUMBER(m,n)用于存储整数和实数。m表示数值的总位数(精度),取值范围为138,默认为38;n表示小数位数,若为负数则表示把数据向小数点左边舍入,默认值为0。,日期类型,DATE由世纪、年、月、日、时、分、秒组成。范围为公元前4712年1月1日到公元4712年1月1日。可在会话中使用参数NLS_DATE_FORMAT指定日期和时间的格式。可使用TO_DATE函数,将表示日期和时间的字符串按特定格式转换成日期和时间。,日期类型,TIMESTAMP(n):表示时间戳DATE
6、数据类型的扩展允许存储小数形式的秒值。n表示秒的小数位数,取值范围为19,默认值为6。TIMESTAMP(n) WITH TIME ZONE通过存储一个时区偏差扩展TIMESTAMP类型。时区偏差值为相对于通用协调时间(或称UTC,以前称为格林威治时间或GMT)的时差。,日期类型,TIMESTAMP(n) WITH LOCAL TIME ZONE存储日期时直接转换为数据库时区日期而读取日期时将数据库时区日期转换为用户会话时区日期。INTERVAL YEAR(n) TO MONTH存储以年份和月份表示的时间段。n是表示YEAR的最多数字位数,默认为2。,日期类型,INTERVAL DAY(m)
7、TO SECOND(n)存储以天数、小时数、分钟数和秒数表示的时间段m是表示DAY的最多数字位数,默认为2。n是表示SECOND的小数部分的位数,默认为6。,LOB类型,CLOB:用于存储可变长度的字符数据,如文本文件等,最大数据量为4 GB。NCLOB:用于存储可变长度的Unicode字符数据,最大数据量为4 GB。BLOB:用于存储大型的、未被结构化的可变长度的二进制数据(如二进制文件、图片文件、音频和视频等非文本文件),最大数据量为4 GB。BFILE:用于存储指向二进制格式文件的定位器,该二进制文件保存在数据库外部的操作系统中,文件最大为4 GB。,二进制类型,RAW(n)用于存储可变
8、长度的二进制数据n表示数据长度,取值范围为12000字节;LONG RAW用于存储可变长度的二进制数据最大存储数据量为2 GB。,行类型,ROWID行标识符,表中行的物理地址的伪列类型。ROWID类型数据由18位十六进制数构成,包括对象编号、文件编号、数据块编号和块内行号。UROWID行标识符,用于表示索引化表中行的逻辑地址。,2.1.2 创建临时表,临时表中的数据在特定条件下自动释放,但其结构将一直存在。根据临时表中数据被释放的时间不同,临时表分为事务级别的临时表和会话级别的临时表两类。ON COMMIT DELETE ROWS /事务级临时表ON COMMIT PRESERVE ROWS
9、/会话级临时表,2.1.2 创建临时表,语法使用CREATE GLOBAL TEMPORARY TABLE语句创建临时表使用ON COMMIT子句说明临时表的类型,默认为事务级别的临时表。,2.1.2 创建临时表,事务级别的临时表是在事务提交时系统自动删除表中所有记录。CREATE GLOBAL TEMPORARY TABLE tran_temp(ID NUMBER(2) PRIMARY KEY, name VARCHAR2(20) )ON COMMIT DELETE ROWS;,2.1.2 创建临时表,会话级别的临时表是在会话终止时系统自动删除表中所有记录 。CREATE GLOBAL TE
10、MPORARY TABLE sess_temp(ID NUMBER(2) PRIMARY KEY, name VARCHAR2(20) )ON COMMIT PRESERVE ROWS;,2.1.3 利用子查询创建表,语法CREATE TABLE table_name(column_name column_level_constraint,column_name column_level_constraint,table_level_constraint) parameter_listAS subquery;,2.1.3 利用子查询创建表,注意可以修改表中列的名称,但是不能修改列的数据类型和长
11、度;源表中的约束条件和列的缺省值都不会复制到新表中;子查询中不能包含LOB类型和LONG类型列;当子查询条件为真时,新表中包含查询到的数据;当查询条件为假时,则创建一个空表。,2.1.3 利用子查询创建表,创建一个标准表,保存工资高于3000的员工的员工号、员工名和部门号。语句为CREATE TABLE emp_select(emp_no,emp_name,dept_no)ASSELECT empno,ename,deptno FROM employee WHERE sal3000;,2.1.3 利用子查询创建表,创建一个会话级临时表,保存部门号、部门人数和部门的平均工资。CREATE GLO
12、BAL TEMPORARY TABLE ept_tempON COMMIT PRESERVE ROWSASSELECT deptno,count(*) num,avg(sal) avgsal FROM emp GROUP BY deptno;,2.2 表约束,约束的类别 定义约束 添加和删除约束 设置约束状态 约束的延迟检查 查询约束信息,2.2.1 约束的类别,约束作用在表中定义的用于维护数据库完整性的一些规则。通过对表中列定义约束,可以防止在执行DML操作时,将不符合要求的数据插入到表中。,2.2.1 约束的类别,约束类型PRIMARY KEYUNIQUECHECKFOREIGN KEY
13、NULL/NOT NULL,PRIMARY KEY,特点定义主键,起惟一标识作用,其值不能为NULL,也不能重复;一个表中只能定义一个主键约束;建立主键约束的同时,在该列上建立一个惟一性索引,可以为它指定存储位置和存储参数;主键约束可以是列级约束,也可以是表级约束。,UNIQUE,特点定义为惟一性约束的某一列或多个列的组合的取值必须惟一;如果某一列或多个列仅定义惟一性约束,而没有定义非空约束,则该约束列可以包含多个空值;Oracle自动在惟一性约束列上建立一个惟一性索引,可以为它指定存储位置和存储参数;惟一性约束可以是列级约束,也可以是表级约束。,在一个基本表中只能定义一个PRIMARY KE
14、Y约束,但可定义多个UNIQUE约束;对于指定为PRIMARY KEY的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于UNIQUE所约束的唯一键,则允许为空。不能为同一个列或一组列既定义UNIQUE约束,又定义PRIMARY KEY约束。,PRIMARY KEY与UNIQUE比较,CHECK,特点检查约束用来限制列值所允许的取值范围,其表达式中必须引用相应列,并且表达式的计算结果必须是一个布尔值;约束表达式中不能包含子查询,也不能包含SYSDATE、USER等SQL函数,和ROWID、ROWNUM等伪列;一个列可以定义多个检查约束;检查约束可以是列级约束,也可以是表级约束。,概念F
15、OREIGN KEY约束指定某一个列或一组列作为外部键。系统保证从表在外部键上的取值要么是主表中某一个主键值或唯一键值,要么取空值。保证两个表之间的连接,确保了实体的参照完整性。,FOREIGN KEY,特点定义外键约束的列的取值要么是主表参照列的值,要么为空;外键列只能参照于主表中的主键约束列或惟一性约束列;可以在一列或多列组合上定义外键约束;外键约束可以是列级约束,也可以是表级约束。,FOREIGN KEY,NULL/NOT NULL,特点在同一个表中可以定义多个NOT NULL约束;只能是列级约束。,2.2.2 定义约束,列约束对某一个特定列的约束,包含在列定义中直接跟在该列的其他定义之
16、后,用空格分隔,不必指定列名;表约束与列定义相互独立,不包括在列定义中。用于对多个列一起进行约束,与列定义用,分隔。定义表约束时必须指出要约束的那些列的名称。,定义列级约束的语法为:CONSTRAINT constraint_name constraint_type conditioin; 定义表级约束的语法为:CONSTRAINT constraint_nameconstraint_type(column1_name,column2_name,|condition);注意Oracle约束通过名称进行标识。在定义时可以通过CONSTRAINT关键字为约束命名。如果用户没有为约束命名,Oracle将自动为约束命名。,