Oracle關於表的常用sql
建表
建表語法
create table tab_name(
col1 type1 [not null][primary key],
col2 type2 [not null],
col3 type3 [default]..
constraint cheek_name primary key (col_name)
)tablespace tbsp // tbsp爲表空間
storage(initial 256k); //指定爲該表分配的第一個盤區的大小
pctfree 20 //數據塊管理參數
pctused 40; //數據塊管理參數
initrans 10; //數據塊管理參數,10 個事務條目
根據已有的表創建新表
select * into table_new from table_old (使用舊錶創建新表)
- 創建新表,僅複製表結構,不需要數據。
CREATE TABLE NEW_TAB AS SELECT * FROM OLD_TAB WHERE 1=0;
- oracle 創建新表,並複製舊錶數據
CREATE TABLE NEW_TAB AS SELECT * FROM OLD_TAB;
數據完整性和約束性
- 非空約束、主鍵約束、唯一約束、外鍵約束、檢查約束和默認約束
非空約束
alter table tab_name modify col_name [not] null;
主鍵約束
alter table tab_name add CONSTRAINT cheek_name primary KEY(col_name);
alter table tab_name add primary KEY(col_name);
alter TABLE tab_name drop CONSTRAINT cheek_name; -- 刪除約束
唯一約束
alter table tab_name add CONSTRAINT cheek_name unique(col_name);
alter TABLE tab_name drop CONSTRAINT cheek_name; -- 刪除約束
外鍵約束 on delete cascade級聯刪除
alter table tab_name add CONSTRAINT cheek_name foreign key(col_name) REFERENCES tab_name2(col_name2) [on delete cascade];
alter TABLE tab_name drop CONSTRAINT cheek_name; -- 刪除約束
禁用約束
alter TABLE tab_name disable CONSTRAINT cheek_name;
在禁用主鍵約束時,Oracle 會默認刪除約束對應的唯一索引;而在重新激活約束時,Oracle將會重新建立唯一索引。如果希望在刪除約束時保留對應的唯一索引,可以在禁用約束時使用關鍵字 KEEP INDEX(通常放在約束名稱的後面)。
激活約束
alter table table_name enable [novalidate | validate] constraint con_name;
- novalidate:該關鍵字表示在激活約束時不驗證表中已經存在的數據是否滿足約束,如果沒有使用該關鍵字,或者使用 VALIDATE 關鍵字,則在激活約束時系統將驗證表中的數據是否滿足約束的定義。
註釋
在ORACLE中給表、列增加註釋以及讀取註釋
給表填加註釋
comment on table 表名 is '表註釋";
給列加註釋
comment on column 表.列 is '列註釋';
讀取表註釋
select * from user_tab_comments where comments is not null;
讀取列註釋
SELECT *
FROM USER_COL_COMMNENTS
WHERE COMMENTS IS NOT NULL AND
TABLE_NAME = '表名';
約束
通過約束名查看錶名的方法
SELECT TABLE_NAME FROM ALL_CONSTRAINTS WHERE CONSTRAINT_NAME = 'PK_ID';
SELECT CONSTRAINT_NAME,
CONSTRAINT_TYPE,
TABLE_NAME
FROM ALL_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'PK_ID';
查詢表中的所有約束
SELECT TABLE_NAME,
CONSTRAINT_NAME,
CONSTRAINT_TYPE,
STATUS
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'SCOTT.EMP'
SELECT CONSTRAINT_NAME,
TABLE_NAME,
COLUMN_NAME
FROM USER_CONS_COLUMNS
WHERE CONSTRAINT_NAME = 'SYS_C005121'
查詢Oracle表中受約束的列名及其約束名稱
SELECT A.TABLE_NAME,
A.COLUMN_NAME,
A.CONSTRAINT_NAME,
B.CONSTRAINT_TYPE
FROM USER_CONS_COLUMNS A,
USER_CONSTRAINTS B
WHERE A.TABLE_NAME = 'TABLENAME' AND
A.COLUMN_NAME = 'COLUMNNAME' AND
B.CONSTRAINT_TYPE = 'CONSTRAINTTYPE' AND
A.CONSTRAINT_NAME = B.CONSTRAINT_NAME;
其中WHERE子句中TABLENAME,COLUMNNAME,CONSTRAINTTYPE分別爲表名,列名,約束類型(如P,U等),這些屬性不需要的時候可以忽略。
刪除表
drop table table_name [cascade constraints];
- 如果該表存在約束、關聯的視圖和觸發器等,則必須使用“cascade constraints”這個可選的子句才能將其刪除
恢復刪除了的表
select object_name,original_name
from recyclebin where original_name = 'tab_name';
flashback table tab_name to before drop;
修改表
修改表名
alter table table_old_name rename to table_new_name
增加字段
alter TABLE tab_name add(col_name TYPE);
刪除字段
alter table tab_name drop column col_name; -- 一個字段
alter table tab_name drop (col_name1,col_name2); -- 多個字段
修改字段
alter table table_name modify column_name column_property
- column_property:要修改列的屬性,包括數據類型的長度、數字列的精度、列的數據類型和列的默認值等
修改字段名稱
alter table tab_name rename column oldCName to newCName;
修改表空間
alter TABLE tab_name move tablespace tbsp;
修改表的狀態
alter table tab_name read only; -- 將表置於只讀的 read only 狀態
alter table tab_name read write;