建表一般来说是个挺简单的事情,但是Oracle的建表语句有很多可选的参数,有些我们可能平时不太用,用的时候又不知道怎么用,这里就写一个较完整的建表的例子:

[sql]

CREATE TABLE banping

  (id  NUMBER(5)

       CONSTRAINT banping_id_pk PRIMARY KEY,

   last_name VARCHAR2(10)

       CONSTRAINT banping_last_name_nn NOT NULL,

   first_name VARCHAR2(10) NOT NULL UNIQUE,

   userid VARCHAR2(8)

       CONSTRAINT banping_userid_uk UNIQUE,

  start_date DATE DEFAULT SYSDATE,

  title VARCHAR2(10),

  dept_id NUMBER(7)

       CONSTRAINT banping_dept_id_fk REFERENCES dept(id),

  salary NUMBER(11,2),

user_type VARCHAR2(4)

      CONSTRAINT banping_user_type_ck CHECK

       (user_type IN(‘IN’,'OUT’)),

CONSTRAINT banping_uk_title UNIQUE (title,salary)

 )

INITRANS 1 MAXTRANS 255

PCTFREE  20  PCTUSED  50

STORAGE( INITIAL  1024K  NEXT  1024K  PCTINCREASE  0  MINEXTENTS  1  MAXEXTENTS  5)

TABLESPACE  data;

解释说明如下:

语法

[sql]

CREATE  TABLE  [schema.]table

(column  datatype [, column  datatype] … )

[TABLESPACE  tablespace]

 [PCTFREE  integer]

 [PCTUSED  integer]

 [INITRANS  integer]

 [MAXTRANS  integer]

 [STORAGE  storage-clause]

 [LOGGING | NOLOGGING]

 [CACHE | NOCACHE] ];

Schema:表的所有者

Table:表名

Column:字段名

Datatype:字段的数据类型

Tablespace:表所在的表空间

Pctfree:为了行长度增长而在每个块中保留的空间的量(以占整个空间减去块头部后所剩余空间的百分比形式表示),当剩余空间不足pctfree时,不再向该块中增加新行。

Pctused:在块剩余空间不足pctfree后,块已使用空间百分比必须小于pctused后,才能向该块中增加新行。

INITRANS:在块中预先分配的事务项数,缺省值为1

MAXTRANS:限定可以分配给每个块的最大事务项数,缺省值为255

STORAGE:标识决定如何将区分配给表的存储子句

LOGGING:指定表的创建将记录到重做日志文件中。它还指定所有针对该表的后续操作都将被记录下来。这是缺省设置。

NOLOGGING:指定表的创建将不被记录到重做日志文件中。

CACHE:指定即使在执行全表扫描时,为该表检索的块也将放置在缓冲区高速缓存的LRU列表最近使用的一端。

NOCACHE:指定在执行全表扫描时,为该表检索的块将放置在缓冲区高速缓存的LRU列表最近未使用的一端。

STORAGE子句:

INITIAL:初始区的大小

NEXT:下一个区的大小

PCTINCREASE:以后每个区空间增长的百分比

MINEXTENTS:段中初始区的数量

MAXEXTENTS:最大能扩展的区数

 如果已为表空间定义了MINIMUM EXTENT,则表的区大小将向上舍入为MINIMUM EXTENT值的下一个较高的倍数。

外键关联的表dept的id列必须是唯一的或者是自身的主键,如不是可以用以下语句填加:

[sql]

alter table dept  add constraint dept_id_pk primary key(id);

块空间使用参数可用来控制对数据段和索引段空间的使用:

控制并发性参数:

INITRANS和MAXTRANS指定初始的和最大的事务位置数,这些事务位置在索引块或者数据块内创建。事务位置用来存储在某一事件点上正在对块进行更改的事务的信息。一个事务只占用一个事务位置,即使它正在更改多行或者多个索引条目。 INITRANS对数据段的缺省值为1,对索引段的缺省值为2,以保证最低程度的并发。例如,如果INITRANS设为3,则保证至少3个事务可以同时对块进行更改。如果需要,也可以从块空闲空间内分配其它事务位置,以允许更多的事务并发修改块内的行。 MAXTRANS的缺省值为255,它设置可更改数据块或者索引块的并发事务数的限制。设置后,该值限制事务位置对空间的使用,从而保证块内有足够的空间供行或者索引数据使用。

控制数据空间使用的参数:

数据段的PCTFREE指定每个数据块中保留空间的百分比,用于因更新块内的行而导致的增长。PCTFREE的缺省值为10%。 数据段的PCTUSED代表Oracle服务器试图为表内的每个数据块维持的已用空间的最低百分比。如果一个块的已用空间低于PCTUSED,则将这块放回到空闲列表中。段的空闲列表示容纳将来所插入内容的可选择块的列表。根据缺省,每个段在创建时都有一个空闲列表。PCTUSED的缺省值为40%。 PCTFREE和PCTUSED都按可用数据空间百分比来计算,可用数据空间是从整个块大小减去块头空间后剩余的块空间。 块空间使用参数只能针对段指定,而不能在表空间级别设置。

下面步骤介绍对PCTFREE=20且PCTUSED=40的数据段如何管理块内空间:

1.向块中插入行,直到块内的空闲空间小等于20%。当行所占用的块内数据空间达到80%(100-PCTFREE)或者更多后,即无法再向该块进行插入。

2.剩余的20%可在行大小增长时使用。例如,更新初始为NULL的列并分配一个值。这样,由于更新,块使用率可能超过80%。

3.如果由于更新,删除了块内的行或者行大小减少,块使用率可能跌至80%以下。但是,仍然无法向块中插入,直到块使用率跌至PCTUSED以下,在本例中PCTUSED为40%。

4.当块使用率跌至PCTUSED以下后,该块可用于插入。随着向块内插入行,块使用率增长,重复从步骤1开始的循环。

一个完整的Oracle建表的例子的更多相关文章

  1. oracle问题:新建了一个PDM文件,建表后生成的sql语句中含有clustered

    问题描述 为了在oracle中新增表,在PDM中建表,使用其生成的sql语句,但是建表不能成功,提示 ORA-00906: 缺失左括号 原因是多了clustered 关键字 情景重现 1. 新建一个p ...

  2. Oracle建表实例

    建表一般来说是个挺简单的事情,但是Oracle的建表语句有很多可选的参数,有些我们可能平时不太用,用的时候又不知道怎么用,这里就写一个较完整的建表的例子: CREATE TABLE banping  ...

  3. 5.oracle建表的时候同时创建主键,外键,注释,约束,索引

    5.oracle建表的时候同时创建主键,外键,注释,约束,索引 1 --主键 )); ) ,constraint aba_pr primary key(id,name1)); --外键 )); --复 ...

  4. PowerDesigner生成的ORACLE 建表脚本中去掉对象的双引号,设置大、小写

    原文:PowerDesigner生成的ORACLE 建表脚本中去掉对象的双引号,设置大.小写 若要将 CDM 中将 Entity的标识符都设为指定的大小写,则可以这么设定: 打开cdm的情况下,进入T ...

  5. oracle 建表时显示ORA-00984: 列在此处不允许

      oracle 建表时显示ORA-00984: 列在此处不允许 CreationTime--2018年7月19日16点10分 Author:Marydon 1.情景展示 使用plsql建表时,报错 ...

  6. oracle 建表时显示ORA-00904无效的标识符

      oracle 建表时显示ORA-00904无效的标识符 CreationTime--2018年7月19日16点03分 Author:Marydon 1.情景展示 使用plsql建表时,报错 字段展 ...

  7. oracle 建表 主键自增序列/////

    oracle 建表 主键自增序列 (2011-10-12 11:59:22) 转载▼ 标签: 杂谈 分类: oracle SQL> create table sms_activity(  2   ...

  8. Oracle建表提示SQL 错误: ORA-00904: : 标识符无效

    Oracle建表提示: 错误报告:SQL 错误: ORA-00904: : 标识符无效00904. 00000 -  "%s: invalid identifier"*Cause: ...

  9. Oracle建表

    1.oracle数据库中的多种数据结构: 1.表结构            存储数据 2.视图 一张表或多张表中数据的字节 3.sequence 主要用来生成主键值 4.index 提高检索性能 我们 ...

随机推荐

  1. meta viewport 理解

    移动设备上的浏览器如果不指明 viewport 这个meta,当你从移动设备上浏览网页的时候,它假设(你浏览的是桌面版并且你想看到所有的内容),不只是一个左上角.因此,它会把viewport的宽度设置 ...

  2. Angular 4 路由介绍

    Angular 4 路由 1. 创建工程 ng new router --routing 2. 创建home和product组件 ng g component home ng g component ...

  3. Server对象,HttpServerUtility类,获取服务器信息

    在Asp.net WebForm中,Server对象是HttpServerUtility类的实例.看下图: 而在Asp.net MVC中,Server对象是HttpServerUtilityBase对 ...

  4. Microsoft Dynamics CRM 2013 相关安装包下载

    90-day trial keys:Microsoft Dynamics CRM Workgroup Server 2013 (5 CAL limit):NX77Y-BTBCV-JP3T3-8W7JH ...

  5. 大数据工具篇之flume1.4-安装部署指南

    一.引言 flume-ng是一个分布式.高可靠和高效的日志收集系统,flume-ng是flume的新版本的意思,其中“ng”意为new generate(新一代),目前来说,flume-ng 1.4是 ...

  6. ICE简介及C++程序例子(转)

    一.ICE简介: 1.ICE是什么? ICE是ZEROC的开源通信协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎,是一个面向对象 ...

  7. 十二、jdk工具之jcmd介绍(堆转储、堆分析、获取系统信息、查看堆外内存)

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  8. 1116 Come on! Let's C (20 分)

    1116 Come on! Let's C (20 分) "Let's C" is a popular and fun programming contest hosted by ...

  9. Python 标准库 ConfigParser 模块 的使用

    Python 标准库 ConfigParser 模块 的使用 demo #!/usr/bin/env python # coding=utf-8 import ConfigParser import ...

  10. C#中char空值的几种表示方式

    C#中char空值的几种表示方式 在C#中char类型的表示方式通常是用单引号作为分隔符,而字符串是用双引号作为分隔符. 例如: 程序代码 程序代码 char a = 'a'; char b = 'b ...