天天看點

[每日一題] OCP1z0-047 :2013-08-24 FLASHBACK—TABLE/PRIMARY KEY(FOREIGN KEY?)......98

轉載請注明出處:http://blog.csdn.net/guoyjoe/article/details/10286737

[每日一題] OCP1z0-047 :2013-08-24 FLASHBACK—TABLE/PRIMARY KEY(FOREIGN KEY?)......98
[每日一題] OCP1z0-047 :2013-08-24 FLASHBACK—TABLE/PRIMARY KEY(FOREIGN KEY?)......98

正确答案:D

根據題意如下操作:

一、建立表dept

[email protected]> CREATE TABLE DEPT
  2     (DEPTNO NUMBER(2,0),
  3      DNAME VARCHAR2(14),
  4      LOC VARCHAR2(13),
  5      CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO)
  6    );

Table created.
           

二、建立表emp

[email protected]> CREATE TABLE EMP
  2     (EMPNO NUMBER(4,0),
  3      ENAME VARCHAR2(10),
  4      JOB   VARCHAR2(9),
  5      MGR   NUMBER(4,0),
  6      HIREDATE DATE,
  7      SAL   NUMBER(7,2),
  8      COMM  NUMBER(7,2),
  9      DEPTNO NUMBER(2,0),
 10           CONSTRAINT PK_EMP PRIMARY KEY (EMPNO),
 11           CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO)
 12            REFERENCES DEPT (DEPTNO) ENABLE
 13     );

Table created.
           

三、分别向表dept和表emp插入資料

[email protected]> insert into dept values(10,'IT',null);

1 row created.

[email protected]> insert into dept values(20,'HR',null);

1 row created.
[email protected]> insert into dept(DEPTNO,DNAME) values(10,'IT');

1 row created.

[email protected]> insert into dept(DEPTNO,DNAME) values(20,'HR');

1 row created.

[email protected]> insert into emp(EMPNO,ENAME,DEPTNO) values(1,'KING',10);

1 row created.

[email protected]> insert into emp(EMPNO,ENAME,DEPTNO) values(2,'HARI',20);

1 row created.

[email protected]> COMMIT;

Commit complete.
           

四、查dept和emp的資料及限制。

[email protected]> SELECT deptno,dname FROM dept;

    DEPTNO DNAME
---------- --------------
        10 IT
        20 HR

[email protected]> SELECT EMPNO,ENAME,DEPTNO FROM emp;

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
         1 KING               10
         2 HARI               20


[email protected]> col CONSTRAINT_NAME for a10
[email protected]> col R_CONSTRAINT_NAME for a10
[email protected]> col TABLE_NAME for a10
[email protected]> col INDEX_NAME for a10
[email protected]> select CONSTRAINT_NAME,R_CONSTRAINT_NAME,TABLE_NAME,INDEX_NAME,CONSTRAINT_TYPE,STATUS 
  2  from user_constraints where table_name 
  3  in('EMP','DEPT');

CONSTRAINT R_CONSTRAI TABLE_NAME INDEX_NAME C STATUS
---------- ---------- ---------- ---------- - --------
PK_DEPT               DEPT       PK_DEPT    P ENABLED
PK_EMP                EMP        PK_EMP     P ENABLED
FK_DEPTNO  PK_DEPT    EMP                   R ENABLED
           

五、删除表emp

[email protected]> drop table emp;

Table dropped.
           

六、查資源回收筒,可以看出表和索引同時被删除除

[email protected]> select  OBJECT_NAME,ORIGINAL_NAME,OPERATION,TYPE ,DROPTIME from recyclebin;

OBJECT_NAME                    ORIGINAL_N OPERATION TYPE       DROPTIME
------------------------------ ---------- --------- ---------- -------------------
BIN$5LNox53pT0PgQ4rZqMD+/Q==$0 PK_EMP     DROP      INDEX      2013-08-24:22:33:40
BIN$5LNox53qT0PgQ4rZqMD+/Q==$0 EMP        DROP      TABLE      2013-08-24:22:33:40
           

七、并且可以查出表emp的外鍵也被删除了

[email protected]> select CONSTRAINT_NAME,R_CONSTRAINT_NAME,TABLE_NAME,INDEX_NAME,CONSTRAINT_TYPE,STATUS 
  2  from user_constraints where table_name 
  3  in('EMP','DEPT');

CONSTRAINT R_CONSTRAI TABLE_NAME INDEX_NAME C STATUS
---------- ---------- ---------- ---------- - --------
PK_DEPT               DEPT       PK_DEPT    P ENABLED
           

八、閃回表emp

[email protected]> flashback table emp to before drop;

Flashback complete.
           

九、查資源回收筒,已沒資訊,說明表和唯一索引(主鍵限制)都被閃回了,但外鍵沒有被閃回(失去了外鍵的制約),如下操作。

[email protected]> select  OBJECT_NAME,ORIGINAL_NAME,OPERATION,TYPE ,DROPTIME from recyclebin;

no rows selected

[email protected]> SELECT EMPNO,ENAME,DEPTNO FROM emp;

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
         1 KING               10
         2 HARI               20
[email protected]> col index_name for a50
[email protected]> select index_name from user_indexes where table_name='EMP';

INDEX_NAME
--------------------------------------------------
BIN$5LNox53pT0PgQ4rZqMD+/Q==$0

[email protected]> col CONSTRAINT_NAME for a40 
[email protected]> col index_name for a40
[email protected]> select CONSTRAINT_NAME,R_CONSTRAINT_NAME,TABLE_NAME,INDEX_NAME,CONSTRAINT_TYPE,STATUS 
  2  from user_constraints where table_name 
  3  in('EMP','DEPT');

CONSTRAINT_NAME                          R_CONSTRAI TABLE_NAME INDEX_NAME                               C STATUS
---------------------------------------- ---------- ---------- ---------------------------------------- - --------
PK_DEPT                                             DEPT       PK_DEPT                                  P ENABLED
BIN$5LNox53oT0PgQ4rZqMD+/Q==$0                      EMP        BIN$5LNox53pT0PgQ4rZqMD+/Q==$0           P ENABLED
           

十、插入兩條資料,第一次插入報錯(emp中已存在empno為2的員工了,empno是主鍵),第二次插入成功。

[email protected]> INSERT INTO emp(EMPNO,ENAME,DEPTNO) values(2,'COTT',10);
INSERT INTO emp(EMPNO,ENAME,DEPTNO) values(2,'COTT',10)
*
ERROR at line 1:
ORA-00001: unique constraint (GYJ.BIN$5LNox53oT0PgQ4rZqMD+/Q==$0) violated


[email protected]> INSERT INTO emp(EMPNO,ENAME,DEPTNO) values(3,'ING',55);

1 row created.


[email protected]> SELECT EMPNO,ENAME,DEPTNO FROM emp;

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
         1 KING               10
         2 HARI               20
         3 ING                55
           

十一、閃回索引和限制的名稱還是:BIN$5LNox53pT0PgQ4rZqMD+/Q==$0和BIN$5LNox53oT0PgQ4rZqMD+/Q==$0,最好修改索引和限制,如下操作:

[email protected]> ALTER INDEX "BIN$5LNox53pT0PgQ4rZqMD+/Q==$0" RENAME  TO PK_EMP;

Index altered.

[email protected]> ALTER TABLE EMP RENAME CONSTRAINT "BIN$5LNox53oT0PgQ4rZqMD+/Q==$0" TO PK_EMP;

Table altered.

[email protected]> select CONSTRAINT_NAME,R_CONSTRAINT_NAME,TABLE_NAME,INDEX_NAME,CONSTRAINT_TYPE,STATUS 
  2  from user_constraints where table_name 
  3  in('EMP','DEPT');

CONSTRAINT_NAME                          R_CONSTRAI TABLE_NAME INDEX_NAME                               C STATUS
---------------------------------------- ---------- ---------- ---------------------------------------- - --------
PK_DEPT                                             DEPT       PK_DEPT                                  P ENABLED
PK_EMP                                              EMP        PK_EMP                                   P ENABLED

[email protected]> select index_name from user_indexes where table_name='EMP';

INDEX_NAME
----------------------------------------
PK_EMP
           

呵呵,這樣插入記錄時報錯就能看到正常的限制名稱了。

[email protected]>  INSERT INTO emp(EMPNO,ENAME,DEPTNO) values(2,'COTT',10);
 INSERT INTO emp(EMPNO,ENAME,DEPTNO) values(2,'COTT',10)
*
ERROR at line 1:
ORA-00001: unique constraint (GYJ.PK_EMP) violated
           

總結:flashback table閃回表的同時也閃回了索引(此索引是建主鍵限制時産生的唯一索引,即也閃回了主鍵限制),但沒有閃回外鍵限制。

QQ:252803295

學習交流QQ群:

DSI&Core Search  Ⅰ 群:127149411(技術:已滿)

DSI&Core Search  Ⅱ 群:177089463(技術:未滿)

DSI&Core Search  Ⅲ 群:284596437(技術:未滿)

DSI&Core Search  Ⅳ 群:192136702(技術:未滿)

DSI&Core Search  Ⅴ 群:285030382(閑聊:未滿)

MAIL:[email protected]

BLOG: http://blog.csdn.net/guoyjoe

WEIBO:http://weibo.com/guoyJoe0218

ITPUB: http://www.itpub.net/space-uid-28460966.html

OCM:   http://education.oracle.com/education/otn/YGuo.HTM

繼續閱讀