`
zhanglu0223
  • 浏览: 22710 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

一个完整的Oracle建表的例子

 
阅读更多

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

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;

解释说明如下:
语法

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列必须是唯一的或者是自身的主键,如不是可以用以下语句填加:

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建表例子

    这是个完全的建表的SQL文,包括建表,建关键字,建自增长的列,很实用的例子!

    oracle建表实例

    在Oracle数据库管理系统中,创建表是数据库设计的基础步骤。...在"oracle建表案例"文件中,可能包含了更多复杂的建表示例,涵盖了不同场景下的表设计和优化技巧,这将有助于读者更深入地理解和掌握Oracle建表技能。

    Oracle建表代码及样本数据.rar

    在这个例子中,我们创建了一个包含三个字段的表,并设置了字段1为主键。在Oracle中,主键用于唯一标识表中的每一行,且不允许有重复值。NOT NULL约束则确保字段1的值不能为空。 接下来是“Oracle教程样本数据.xls”...

    Oracle建表脚本

    Oracle建表脚本是数据库管理中的一个重要环节,用于在Oracle数据库中创建新的表格结构。这篇博文链接虽然没有提供具体内容,但我们可以根据常见的Oracle建表脚本格式和常见实践来探讨这个话题。 首先,Oracle建表...

    oracle建表开发手册.docx

    在这个例子中,`EmployeeID`是主键,确保了每条记录的唯一性,`PhoneNumber`和`AreaCode`分离以满足1NF,同时`EmployeeID`和`PhoneNumber`的组合形成一个唯一性约束,符合2NF和3NF。 在设计Oracle数据库表时,遵循...

    oracle建表空间

    oracle建表空间,里面有一个建表空间的例子,适合初学者学习和使用。

    oracle建表总结.pdf

    在Oracle中创建表是构建数据库结构的基础,下面将对"Oracle建表总结"中的关键知识点进行详细说明。 1. **对象命名原则**: - 对象名称必须以字母开头,长度在1到130个字符之间。 - 名称中可以包含AZ, az, 09...

    Oracle存储过程、自定义函数、动态建表存储过程等例子

    例如,一个动态建表存储过程可能包含以下步骤: - 分析输入数据,确定需要的列名和数据类型。 - 使用PL/SQL的动态SQL语法构建CREATE TABLE语句。 - 使用EXECUTE IMMEDIATE执行这个动态生成的SQL,创建新的表。 - ...

    Oracle创建表时考虑列顺序.pdf

    通过一个例子,我们可以看到列顺序的不同对性能的影响。在这个例子中,创建了一个包含10列的表small,并填充了一些数据。然后,执行了两个循环,分别计算sum(n0)和sum(n9),这两个列分别位于表的第一列和最后一列。...

    oracle emp, dept, salgrade 建表语句

    `CONSTRAINT "FK_DEPTNO_1"`定义了一个外键,将`DEPTNO`字段与`DEPT`表的`DEPTNO`字段关联,确保数据完整性。`CONSTRAINT "PK_EMP_1"`定义了基于`EMPNO`字段的主键,同样使用了索引和存储参数。 在创建表之后,我们...

    Oracle轻松取得建表和索引的DDL语句

    以下是一个例子,展示了如何使用DBMS_METADATA来获取单个表和索引的DDL: 1. 获取单个表和索引的DDL: ```sql -- 设置控制台输出格式 SET heading off; SET echo off; SET pages 999; SET long 90000; -- 将输出...

    Oracle__SQL建表小结

    另一个例子展示了如何创建包含外键和组合主键的表: ```sql CREATE TABLE Student ( Sno CHAR(17) PRIMARY KEY, Sname CHAR(10) NOT NULL, Sage INTEGER, Ssex CHAR(2), Sdept CHAR(20) ); CREATE TABLE ...

    建表空间例子

    表空间由一个或多个数据文件组成,并且这些数据文件可以分布在不同的磁盘上,以实现负载均衡和提高性能。 #### 二、创建表空间的命令 创建表空间的基本语法如下: ```sql CREATE TABLESPACE tablespace_name DATA...

    Oracle 临时表用法

    在这个例子中,`Classes` 表是一个事务级临时表,其数据将在每次事务提交或回滚后被自动清除。 #### 四、Oracle临时表的特点与区别 1. **数据保留方式**: - 会话级临时表中的数据在会话结束时被清除。 - 事务级...

    Oracle创建主键自增表(sql语句实现)及触发器应用

    以下是一个创建名为`Test_Increase`的表的例子: ```sql CREATE TABLE Test_Increase ( userid NUMBER(10) NOT NULL PRIMARY KEY, -- 主键,自动增加 username VARCHAR2(20) -- 用户名字段 ); ``` 在上述表结构...

    Oracle创建用户、角色、授权、建表.rar_ground6ss_oracle_rocketmvb_操作指导

    你可以创建一个角色,然后将多个权限授予这个角色,而不是逐一授予每个用户。创建角色的SQL语句如下: ```sql CREATE ROLE role_name; ``` 授予权限给角色使用`GRANT`语句,如: ```sql GRANT privilege_list ...

    ORACLE学习笔记-新建用户及建表篇

    在示例中,创建了一个名为`SA`的用户,并为其指定了密码`2013`。命令如下: ``` create user SA identified by 2013; ``` 2. **授权角色**: Oracle提供了预定义的角色,如`CONNECT`和`RESOURCE`,用于简化权限...

    2020_Oracle19c数据迁移图文详解.docx

    数据迁移是一个复杂的过程,尤其是在源数据库与目标数据库存在字符集差异、表间存在主外键关系以及表空间不一致的情况下。本文将重点讲解数据泵技术的应用,包括解决字符集差异、处理主外键关系冲突及表空间不匹配等...

    基于oracle的在线考试系统的设计

    另一个例子是(EXAM_TAKEN_TRIGGER),当用户参加完考试后,自动更新成绩表,记录其完成情况。 四、函数与存储过程 函数是可重复使用的代码块,返回一个值。在在线考试系统中,可以编写一个函数(CALCULATE_...

Global site tag (gtag.js) - Google Analytics