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