Oracle表的類型
heap table | 數據以堆的方式管理 |
index organized tables | 表按索引結構存儲,強制要求行本身有某種物理順序,數據要根據主鍵有序的存儲 |
index clusters tables | cluster是指一個或多個表組成的組,這些表物理的存儲在相同的數據庫塊上,有相同聚簇鍵值的所有行會相鄰地物理存儲; |
hash clusters tables | 這些表類似於聚簇表,但是不使用B樹索引聚簇鍵來定位數據,散列聚簇將鍵散列到聚簇上,從而找到數據應該在哪個數據庫塊上; |
partitioned tables |
|
stored hash clustered table | 有序散列聚簇表是oracle10g中新增的,它結合了散列聚簇表的某些方面,同時兼有IOT的一些方面; |
nested table |
|
temporary table |
|
--建立一張表
CREATE TABLE emp
(empno NUMBER(4),--如果插入有小數,將會4舍5入
ename VARCHAR2(10),
hiredate DATE DEFAULT TRUNC(SYSDATE),
sal NUMBER(7,2),
comm NUMBER(7,2) DEFAULT 0.03
);
通過子查詢創建表
--通過子查詢創建表
CREATE TABLE emp_copyAS SELECT * FROM emp;
通過這種方式創建的表所有的非空約束和檢查約束將存在,而主鍵,唯一鍵和外鍵約束將丟失;這是因爲後面三種約束創建的同時需要索引;
還可以通過聯合查詢來創建新表
CREATE TABLE emp_deptAS SELECT
last_nameename,dapartment_name dname,ROUND(SYSDATE-hire_date) service
FROM employeesNATURAL JOIN departments ORDER BY dname,ename;
--只拷貝表結構,但是不插入原表中的數據
CREATE TABLE emp_strcAS SELECT * FROM employees WHERE 1=2;
改變表結構
--增加一列
ALTER TABLE empADD(job_id NUMBER);
--修改一列
ALTER TABLE empMODIFY (commission_pct NUMBER(4,2) DEFAULT 0.05);
--刪除一列
ALTER TABLE emp DROPCOLUMN commission_pct
--使某一列失效
ALTER TABLE emp SETUNUSED COLUMN job_id;
--重命名列名
ALTER TABLE empRENAME COLUMN hire_date TO recruited;
--將某個表變爲只讀
ALTER TABLE emp READ ONLY;--DML操作會失敗,但是刪除表的操作依然 可以成功
--刪除置爲無效的列
ALTER TABLE tablenameDROP UNUSED COLUMNS;
--刪除表
DROP TABLEtablename;--必須爲空表,表沒有依賴關係
--清空表的內容
TRUNCATE TABLEtablename;
創建和使用臨時表
臨時表對於所有的sessions都是可見的,但是其中的每一行都屬於插入該行的session
--創建臨時表
CREATE GLOBALTEMPORARY TABLE temp_tab_name
(COLUMN datatype,COLUMN datatype)
[ON COMMIT {DELETE |PRESERVE} ROWS];
在臨時表上執行SQL操作要比在正式表上執行快,原因如下:
1、temporary tables are not segments inpermanent tablespaces;他們存在於每個session的PGA中;如果超出PGA的容量,會將數據轉移到用戶的臨時表空間中,臨時表空間的IO要快很多,原因是它不經過database buffer cache;它是通過會話服務器進程和磁盤之間進行的;
2、第二個塊的原因是對於臨時表的DML操作不會產生redo記錄;