乙個完整的Oracle建表的例子

2021-05-28 15:01:11 字數 3285 閱讀 2977

建表一般來說是個挺簡單的事情,但是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建表的例子

建表一般來說是個挺簡單的事情,但是oracle的建表語句有很多可選的引數,有些我們可能平時不太用,用的時候又不知道怎麼用,這裡就寫乙個較完整的建表的例子 create table banping id number 5 constraint banping id pk primary key,las...

資料庫建表的乙個坑

今天在預生產環境配置環境的時候出現了個問題,就是我乙個查詢sql竟然花了17秒,這是乙個嚴重的問題.本來以為是環境的問題,後來發現環境沒問題,那就是我的sql有問題,初步認為是沒有走索引.我把控制台 列印的sql放到預生產環境中直接執行,果然花了10多秒.執行了sql計畫發現確實沒有走索引,但是測試...

Oracle的使用 建庫建表

create table student sid number 20 sname varchar2 10 新增一列 alter table student add gender number 1 修改列型別 varchar2 是可變長度型別 char是固定長度 alter table student...