引自:http://www.banping.com/2009/07/08/oracle_create_table/
建表一般来说是个挺简单的事情,但是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关键词.xls》和《Oracle关键词.html》文件,系统地罗列并解释了Oracle数据库中的所有关键词,包含DDL与DML语句,覆盖开发过程中的各个关键环节。 实战导向:提供丰富的函数代码示例《建表...
在本次Oracle建表练习中,我们将会重点讨论建表时使用的主键(Primary Key)和外键(Foreign Key)概念。 首先,我们来详细了解一下主键的概念。主键是数据库表中每一行记录的唯一标识,它保证了表中的每条记录都能...
这是个完全的建表的SQL文,包括建表,建关键字,建自增长的列,很实用的例子!
- 约束定义:Oracle使用`CONSTRAINT`关键字定义约束,而MySQL可以直接在列定义中指定。 - 表空间:Oracle支持表空间概念,用于存储数据文件,而在MySQL中没有这样的概念。 - 创建语句的语法结构:两者在创建表的...
以下是对Oracle建表命令和相关约束的详细总结: 1. **主键(Primary Key)**: 主键是用来唯一标识表中每一条记录的关键字段,不允许有重复值且不能为空。在Oracle中,可以使用`PRIMARY KEY`关键字来创建主键约束...
在Oracle中创建表是构建数据库结构的基础,下面将对"Oracle建表总结"中的关键知识点进行详细说明。 1. **对象命名原则**: - 对象名称必须以字母开头,长度在1到130个字符之间。 - 名称中可以包含AZ, az, 09...
以下是对"Oracle数据库表建立字段唯一性方法"的详细解释: 1. **唯一约束(Unique Constraint)** - **定义**:唯一约束是一种表级约束,用于确保表中的某列或某些列的值都是唯一的。这意味着,除了NULL值之外,...
一般来说建表的时候是不会使用关键字的,可是之前的开发人员或者是数据库运维人员可能为了偷懒吧,在那张表中使用四个Oracle中的关键字, 所以导致查询的时候出现异常。 三、解决方案 找到问题的原因后,问题就好解决...
### Oracle表分区、建表空间与用户管理 #### 一、表空间的创建与管理 在Oracle数据库中,**表空间**(Tablespace)是物理存储的逻辑容器,它由一个或多个数据文件组成。创建一个新的表空间对于数据库的管理非常重要...
- **关键字解释**:`ALTER TABLE`用于修改现有的表结构;`DROP COLUMN`则表示删除指定的列。 - **表名与列名**:在上述命令中,“T2”指的是需要修改的表名,“C2”则是需要删除的字段名称。 - **注意事项**: - 在...
第6章子查询讲解了在SQL语句中如何嵌套使用SELECT语句,包括在查询条件、建表、插入、更新语句中的子查询。ANY/SOME、ALL关键字的使用也在此章节中被涵盖,它们是处理子查询结果时常用的比较操作。 第7章iSQL*Plus...
这时用关键字revoke(撤回), revoke select on emp from lady; 收回lady的查权限 案例: 5 现在scott希望吧查询emp表权限通过lady用户继续给别的用户, Scott > grant select on emp to lady with grant option; ...
为了获取特定数量的记录,**Oracle**使用`rownum`伪列结合`where`子句,而**MySQL**使用`limit`关键字。对于特定范围的记录筛选,Oracle的语法较为复杂,需嵌套查询,而MySQL的`limit`关键字可以轻松实现这一功能。 ...
13 维护数据的完整性 目标 13-2 数据的完整性 13-3 约束的类型 13-4 约束的状态 13-5 约束的检测 13-7 定义即时约束或延迟约束 13-8 强制主键和唯一键 13-9 外部关键字的考虑 13-10 在建表时定义完整性约束 13-11 ...
标识符是数据库对象的名称,需要遵循特定的规则,如以字母开头,可包含字母、数字和特定符号,并避免使用保留关键字。数据类型包括数字(如`NUMBER`)、字符串(如`CHAR`、`VARCHAR2`)和日期(如`DATE`)等。 DDL...
- **Table_name**:定义表的名字,长度不超过 30 个字符,不能以数字开头,且不能与 Oracle 的保留关键字冲突。 - **Column**:定义表中的列,每张表最多包含 254 个列。 - **Datatype**:指定列的数据类型及大小,...
临时用户,特别是那些不需要建表的用户,通常只赋予他们connect role。connect是使用Oracle的简单权限,这种权限只有在对其他用户的表有访问权时,包括select、insert、update和delete等,才会变得有意义。拥有...
2. **事务参数initrans的设置**:对于并发DML事务较多的表,可以在建表时设置较大的initrans参数。如果initrans值过小,可能会导致ITL竞争加剧,进而引发热点块或enqueue问题。 - **使用原则**:每个initrans在...
在 Oracle 中,有些数据类型可以用于建表,如 char、number 等,而有些类型则不能,如 boolean、rowtype 等。 变量定义的完整语法为:变量名 [constant] 变量类型 [not null] [default 值 | := 值];其中,[ ] 表示...
- **ROWNUM关键字**:`ROWNUM`是Oracle的一个伪列,可以用来限制结果集的行数。 ```sql INSERT INTO temp_table SELECT * FROM source_table WHERE ROWNUM ; ``` ##### 1.2 UPDATE (更新数据) - **更新数据**:...