1. 程式人生 > >create table new_table as select ...from old_table ... 建立表後,依附於表的約束、鍵值、索引都不存在

create table new_table as select ...from old_table ... 建立表後,依附於表的約束、鍵值、索引都不存在

emp 表

列名

型別

可為空

預設值

EMPNO

NUMBER(4)

ENAME

VARCHAR2(10)

Y

'YJG'

JOB

VARCHAR2(9)

Y

MGR

NUMBER(4)

Y

HIREDATE

DATE

Y

SAL

NUMBER(7,2)

Y

COMM

NUMBER(7,2)

Y

DEPTNO

NUMBER(2)

Y

鍵值情況

PK_EMP

Primary

EMPNO

Y

N

N

2013-4-25 9:22

FK_DEPTNO

Foreign

DEPTNO

Y

DEPT

DEPTNO

No action

N

N

2013-4-25 9:22

檢查約束情況

EMP_SAL

sal>100

Y

N

N

2013-4-25 9:25

索引情況

SCOTT

EMP_ENAME

Normal

ENAME

N

N

tablespace users pctfree 10 initrans 2 maxtrans 255 storage ( initial 64k minextents 1 maxextents unlimited )

SCOTT

PK_EMP

Unique

EMPNO

N

N

tablespace users pctfree 10 initrans 2 maxtrans 255 storage ( initial 64k minextents 1 maxextents unlimited )

--用 create table  ...as  select ....

CREATE TABLE emp_copy
AS
SELECT * from emp;

emp_copy 表

EMPNO NUMBER(4) Y
ENAME VARCHAR2(10) Y
JOB VARCHAR2(9) Y
MGR NUMBER(4)
Y
HIREDATE DATE Y
SAL NUMBER(7,2) Y
COMM NUMBER(7,2) Y
DEPTNO NUMBER(2) Y

建立好後,除了內容一樣之外,所有約束、鍵值、索引、預設值均沒有了;

表 emp 是與上一樣的結構和鍵值,dept 的主鍵deptno在emp裡作為主鍵;那麼執行

drop   table  dept  casecade constraints; 命令後表dept被刪掉;同時emp上的外來鍵被移除;

如果用 flashback  table  dept  to before drop ;閃回dept 表的話,那麼dept 上的主鍵約束以及索引都能閃回,只是名字有系統自動生成;

並且 emp不會有任何改動;

如果 要加上原來的外來鍵那麼需要執行ALTER TABLE emp ADD CONSTRAINTS fk_deptno FOREIGN KEY(deptno) REFERENCES  dept(deptno);