一個完整的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開始的循環。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章