FOREIGN KEY Constraint (P8-15)

 

  • s_dept(부서) 테이블 (parent table, 참조를 당하는쪽)
did dname
 10 개발실
 20 기획실
 30

영업부

  •  s_emp(사원) 테이블 (child table, 외래키를 가지고 있는쪽)
eid ename did
 1 kim 10
 2 lee 20
 3 hong 30
 4 park 100

 


  • s_emp 테이블의 did 컬럼은 s_dept 테이블의 did 컬럼을 참조(외래키)

  • s_dept 테이블의 did 컬럼은 기본키(Primary Key)로 선언해야함
  1.  SQL> CREATE TABLE s_dept(
      2  did VARCHAR2(4) PRIMARY KEY
      3  ,dname VARCHAR2(20)
      4  );
  2. Table created.
  3.  
  4. SQL>   CREATE TABLE s_emp(
      2    eid VARCHAR2(4) PRIMARY KEY
      3    ,ename VARCHAR2(30)
      4    ,did VARCHAR2(4) REFERENCES s_dept(did)   // 컬럼수준
      5   );
  5. Table created.

 

 

Rule (P8-16)

  • DB 개념상의 Rule일뿐 오라클이 모두 지원하는 것은 아님
  • No Action : 참조되고 있는 테이블이나 레코드는 삭제가 안됨.(기본값), 갱신도 안됨(s_dept.did)
  • Set to Null : 참조하는쪽 (s_emp.did)의 값이 null 값으로 변경
  • Set to Default : 참조하는쪽 (s_emp.did)의 값이 기본값으로 변경
  • Cascade : 참조하는쪽 (s_emp.did)의 값이 같이 변경 or 삭제 (P8-18)

 

 

CHECK Constraint (P8-19)

  • Check 조건은 WHERE절과 같은 조건
  • s_emp.commission_pct에는 "10, 12.5, 15, 17.5, 20"만 들어갈 수 있다.
  1. SQL> CREATE TABLE s_emp(
      2  commission_pct NUMBER(4,2)
      3  CONSTRAINT s_emp_commission_pct_ck
      4  CHECK( commission_pct IN(10, 12.5, 15, 17.5, 20))
      5  );
  2. Table created.
  3.  
  4. // 10, 12.5, 15, 17.5, 20 이외의 값 입력시 에러~
  5. SQL> INSERT INTO s_emp VALUES(1);
    INSERT INTO s_emp VALUES(1)
    *
    ERROR at line 1:
    ORA-02290: check constraint (SCOTT.S_EMP_COMMISSION_PCT_CK) violated
  6.  
  7. // 10, 12.5, 15, 17.5, 20에 해당되는 값 입력시 성공~
    SQL> INSERT INTO s_emp VALUES(10);
  8. 1 row created.

 

 

Data Dictionary Views (P8-26)

  • USER : 현재 User의 스키마만 포함되는것
  • ALL : 자신 + 자신이 갖고 있는 권한에 해당되는것(권한이 있는 모든 정보)
  • DBA : DBA 권한이 있는것(system, sys계정)

 

 

Query Data Dictionary (P8-27)

  1. SQL> SELECT object_name
      2  FROM user_objects
      3  WHERE object_type='TABLE';
  2.  
  3. OBJECT_NAME
    ----------------------------------------
  4. DEPT
    EMP
    BONUS
    SALGRADE
    BIN$J92fFoOLTCuM2RR+ve0MUg==$0
    BIN$KqqjB2iZTcezR/fGV12zrw==$0
    BIN$YQUbZwM3QAORwmz1f8P9uQ==$0
    BIN$MOosV/OaS52BjFddRSfg3Q==$0
    BIN$e2XKTrA1S+qzuY8Q4yTFiw==$0
    BIN$Kf9Pl0QmSFiFM3XaY93Omg==$0
    BIN$p/BT1OI9TKWn7tOMljvmjA==$0
  5. OBJECT_NAME
    ----------------------------------------
  6. S_DEPT
    BIN$jMcGAkRKTEeP/7vNTOOP9w==$0
    BIN$be+G/ui5ST2gaEsodqwkQg==$0
    S_EMP
    BIN$BX1dGSxkTZ20WKeVEuCiSQ==$0
  7. 16 rows selected. 

이 글은 스프링노트에서 작성되었습니다.

Posted by Gungume
,