《表格模板-chap6管理和维护表 精品.ppt》由会员分享,可在线阅读,更多相关《表格模板-chap6管理和维护表 精品.ppt(76页珍藏版)》请在第一文库网上搜索。
1、chap6 chap6 管理和维护表管理和维护表王之仓 青海师范大学6.1 表的概述 在Oracle数据库中,每个关系表都由许多列组成。给每一列指派特定的数据类型来定义将在这个列中存储得数据类型。一、 标量数据类型1、CHAR 最多可以以固定长度的格式存储2000个字符或字节。默认指定为以字符形式进行存储,这个数据类型是固定长度的,并且当位数不够时,需要在其右边添加空格来补满。 CREATE TABLE test(name char(20)2、VARCHAR和VARCHAR2 最多可以以可变长度来存储4000B,因此不需要空格来作补充。VARCHAR2 比 VARCHAR 更适合使用,由于兼容
2、性的原因,所以仍然在 Oracle 数据库中保留着 VARCHAR 。 CREATE TABLE test(name varchar2(20)一、标量数据类型3、NCHAR NLS(national language support , 国际语言支持)的数据类型仅可以存储由数据库 NLS 字符集定义的 Unicode 字符集。该数据类型最多可以存储2000B。NCHAR 的列在位数不够时需要在右边填充空格。CREATE TABLE test(name Nchar(20)注意:在 Oracle9i 数据库及其更新的版本中,仅使用 Unicode 数据类型4、NVARCHAR2NLS 的数据类型与
3、 VARCHAR2 数据类型等价。这个数据类型最多可存储4000B 。CREATE TABLE test(name Nvarchar2(20)注意:在 Oracle9i 数据库及其更新的版本中,仅使用 Unicode 数据类型一、标量数据类型5、NUMBER用于存储零、正数、定长负数以及浮点数。以 NUMBER(P,S)的形式来定义数字的精度和范围。 p 表示精度 (1-38),它表示存储在列中数字的总长度是 p 位。 s 表示范围,它表示小数点后的位数。该取值范围可以从-84 到 127 。#使用精度 5 来定义一个正数(如 12345)CREATE TABLE test(name numb
4、er(5)#使用精度 5 和范围 2 来定义一个数字。如 12.34。CREATE TABLE test(name number(5,2)6、LONGLONG 类型的列存储可变长度的字符串,最多可以存储 2GB 的数据。LONG 类型的列有很多在 VARCHAR2 类型列中所具有的特征。可以使用 LONG 类型的列来存储 LONG 类型的文本字符串。LONG 数据类型的使用是为了向前兼容的需要。建议使用 LOB 数据类型来代替 LONG 类型。例如:CREATE TABLE test(name long)一、标量数据类型7、DATE用于在数据库中存储日期和时间。存储时间的精度可以达到 1/10
5、0s。不提供时区的相关信息。CREATE TABLE test(name DATE)8、TIMESTAMP使用年、月、日、小时、分钟、秒域来对日期/时间提供更详细的支持。最多可以使用 9 位数字的精度来存储秒(受底层操作系统支持的限制)。这个数据类型没有时区的相关信息,CREATE TABLE test(timestamp_column TIMESTAMP);一、标量数据类型9、RAW用于存储 raw 类型的二进制数据。最多可以存储 2000B。建议使用 BLOB 来代替它。CREATE TABLE test(raw_column RAW(2000);10、LONG RAW用于存储 raw 类
6、型的二进制数据。最多可以存储 2GB 的数据。建议使用BLOB来代替它。CREATE TABLE test(raw_column LONG RAW);一、标量数据类型11、CLOB用于存储基于字符的大对象。可存储4GB。CREATE TABLE test(clob_column CLOB);13、BLOB最多可以存储 4GB 数据的二进制大对象,比如照片、PPT、二进制图像等。CREATE TABLE test(blob_column BLOB);一、标量数据类型14、BFILE存储指向数据库外部文件的定位符。外部文件最大为 4GB。CREATE TABLE test(bfile_column
7、 BFILE);二、集合数据类型-嵌套表 一种数据挖掘模型配置,该配置中表的一个列包含一个表。1、嵌套表的定义 嵌套表是表中之表。一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。在某种意义上,它是在一个表中存储一对多关系的一种方法。考查一个包含部门信息的表,在任何时间内每个部门会有很多项目正在实施。在一个严格的关系模型中,将需要建立两个独立的表department和project。 二、集合数据类型-嵌套表2 举例说明嵌套表的使用假设有一个关于动物饲养员的表,希望其中具有他们饲养的动物的信息。用一个嵌套表,就可以在同一个表中存储饲养员和其饲养的
8、全部动物的信息。1)创建类型animal_ty:此类型中,对于每个动物都包含有一个记录,记载了其品种、名称和出生日期信息。CREATE TYPE animal_ty AS OBJECT (breed varchar2(25),name varchar2(25),birthdate date);2)创建animals_nt:此类型将用作一个嵌套表的基础类型。CREATE TYPE animal_nt as table of animal_ty;3)创建表breeder:饲养员的信息表create table breeder(breedername varchar2(25),animals ani
9、mal_nt)nested table animals store as animals_nt_tab;二、集合数据类型-嵌套表3、向嵌套表中插入记录insert into breeder values(mary,animal_nt(animal_ty(dog,butch,31-MAR-97), animal_ty(dog,rover,31-MAR-97), animal_ty(dog,julio,31-MAR-97) );insert into breeder values(jane,animal_nt(animal_ty(cat,an,31-MAR-97), animal_ty(cat,j
10、ame,31-MAR-97), animal_ty(cat,killer,31-MAR-97);commit;二、集合数据类型-嵌套表4、查询嵌套表select name,birthdate from table(select animals from breeder);select name,birthdate from table (select animals from breeder where breedername=mary)where name=dog;二、集合数据类型(2)-VARRY固定长度(长度使用extend方法增加)一维数组(相当于类,有其方法和构造方法【类型名】)序号
11、连续对象类型create or replace type type_name as varry(3) of varchar(20)或者在程序的定义区中声明:type type_name is varry(3) of varchar(20);初始化:object_name type_name :=type_name();赋值: object_name(i):=n;三、关系数据类型-游标Cursor1 概念 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果
12、显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。 三、关系数据类型-游标Cursor2 类型 Cursor类型包含三种: 隐式Cursor 显式Cursor Ref Cursor(动态Cursor) 四、ROWID1.rowid的介绍1)SQL select ROWID from Bruce_test where rownum CREATE TABLE s_dept(id NUMBER(7) CONSTRAINT s_dept_id_pk PRIMARY KEY,name VARCHAR2(25) CONSTRAINT s_dept_name_nn NO
13、T NULL,region_id NUMBER(7) CONSTRAINT s_dept_region_id_fk REFERENCES region (id), CONSTRAINT s_dept_name_region_id_uk UNIQUE(name, region_id);通过子查询建表的例子SQLCREATE TABLE emp_41 AS SELECT id, last_name, userid, start_dateFROM s_emp WHERE dept_id = 41;在 SQL Developer中创建表 Oracle SQL Developer提供了所见即所得的数据表
14、设计器窗口,可以通过导航面板的树状视图,展开数据库连接节点,右击数据表节点,选择新建表.菜单项,将显示表设计器窗口。 在创建表窗口中,可以通过添加列按钮添加新的列,从下拉列表框中选择列数据类型及约束,并可单击DDL标签页来查看创建表的数据定义语言。创建表时的命名规则和注意事项 命名规则1)表名和字段名的命名规则:必须以字母开头,可以含符号A-Z,a-z,0-9,_,$,#2)大小写不区分3)不用SQL里的保留字, 一定要用时可用双引号把字符串括起来4)用和实体或属性相关的英文符号长度有一定的限制 注意事项:1)建表时可以用中文的字段名, 但最好还是用英文的字段名2)创建表时要把较小的不为空的字
15、段放在前面, 可能为空的字段放在后面3)建表时如果有唯一关键字或者唯一的约束条件,建表时自动建了索引4)一个表的最多字段个数也是有限制的,254个.约束名的命名规则和语法 约束名的命名规则约束名如果在建表的时候没有指明,系统命名规则是SYS_Cn(n是数字) 约束名字符串的命名规则同于表和字段名的命名规则创建invoice表并指定主键CREATE TABLE invoice (invoice_id NUMBER PRIMARY KEY, -自动编号,唯一,不为空vendor_id NUMBER NOT NULL, -供应商ID invoice_number VARCHAR2(50) NOT N
16、ULL, -发票编号 invoice_date DATE DEFAULT SYSDATE, -发票日期 invoice_total NUMBER(9,2) NOT NULL, -发票总数 payment_total NUMBER(9,2) DEFAULT 0 -付款总数 ) 在列属性中使用CONSTRAINT关键字CREATE TABLE invoice ( -自动编号,唯一,不为空invoice_id NUMBER CONSTRAINT invoice_pk PRIMARY KEY, -供应商IDvendor_id NUMBER CONSTRAINT vendor_id_nn NOT NULL, -发票编号invoice_number VARCHAR2(50) CONSTRAINT vendor_number_nn NOT NULL, -发票日期invoice_date DATE DEFAULT SYSDATE, -发票总数invoice_total NUMBER(9,2) CONSTRAINT invoice_total_nn NOT NULL, -付款总数payment_tota