정규화 공부시 참고사항&제약조건

유동현·2022년 11월 14일
0

오라클

목록 보기
15/18
post-thumbnail
1. 관계(relationship, relation)
   - 모든 엔트리(entry)는 단일값을 가진다.
   - 각 열(column)은 유일한 이름을 가지며 순서는 무의미하다.
   - 테이블의 모든 행(row==튜플==tuple)은 동일하지 않으며 순서는 무의미하다.
   
2. 속성(attribute)
   - 테이블의 열(column)을 나타낸다.
   - 자료의 이름을 가진 최소 논리적 단위 : 객체의 성질, 상태 기술
   - 일판 파일(file)의 항목(아이템==item==필드==field)에 해당한다.
   - 엔티티(entity)의 특성과 상태를 기술
   - 속성(attribute)의 이름은 모두 달라야 한다.
3. 튜플==tuple==엔티티==entity
   - 테이블의 행(row)
   - 연관된 몇 개의 속성으로 구성
   - 개념 정보 단위
   - 일반 파일(file)의 레코드(record)에 해당한다.
   - 튜플 변수(tuple variable)
     : 튜플(tuple)을 가리키는 변수, 모든 튜플 집합을 도메인으로 하는 변수
4. 도메인(domain)     
   - 각 속성(attribute)이 가질 수 있도록 허용된 값들의 집합
   - 속성 명과 도메인 명이 반드시 동일할 필요는 없음
   - 모든 릴레이션에서 모든 속성들의 도메인은 원자적(atomic)이어야 함
   - 원자적 도메인
     : 도메인의 원소가 더 이상 나누어질 수 없는 단일체일 때를 나타냄
     
5. 릴레이션(relation)
   - 파일 시스템에서 파일과 같은 개념
   - 중복된 튜플(tuple==entity==엔티티)을 포함하지 않는다. → 모두 상이함(튜플의 유일성)
   - 릴레이션==튜플(엔티티==entity)의 집합. 따라서 튜플의 순서는 무의미하다.
   - 속성(attribute)간에는 순서가 없다.

무결성(INTEGRITY)

1. 무결성에는 개체 무결성(Entity Integrity)
              참조 무결성(Relational Integrity)
              도메인 무결성(Domain Integrity)이 있다.
2. 개체 무결성(Entity Integrity)            
   개체 무결성은 릴레이션에서 저장되는 튜플(tuple)의
   유일성을 보장하기 위한 제약조건이다.
   ex)  SMITH 있는데 또 SMITH 데이터 넣어봄
        INSERT INTO EMP VALUES
        (7369, 'SMITH', 'CLERK', 7902, TO_DATE(~~), 800, NULL, 20);
        --==>> 실행하면 에러 발생함
               (unique constraint (SCOTT.PK_EMP) violated)
        ==> 오라클이 똑같은 데이터 못 넣게 막아주고 있는거!!
   
   
3. 참조 무결성(Relational Integrity)
   참조 무결성은 릴레이션 간의 데이터 일관성을
   보장하기 위한 제약조건이다.
   ex) DEPT 테이블에 50번 부서 없는데 부서번호 50으로 데이터 넣어봄
       INSERT INTO EMP VALUES
       (9000, 'JHONE', 'CLERK', 7902, SYSDATE, 800, NULL, 50);
       --==>> 실행하면 에러남
              (integrity constraint(SCOTT.FK_DEPTNO) violated 
	           - parent key not found)
              --> 부모의 키가 없다는 뜻. 
               -- 내부적으로는 무결성 제약조건 위반한거
               -- 부모에 50번 없는데, 너 왜 50번 넣으려고 하니?
   
4. 도메인 무결성(Domain Integrity)
   도메인 무결성은 허용 가능한 값의 범위를
   지정하기 위한 제약조건이다.
   --> 큰 의미로 데이터타입이라고 보면 된다.
       ex) EMPNO 는 NUMBER(4)인데 20000 입력하면 에러남
       
 DEPARTMENTS 테이블에는 5000번이라는 DEPARTMENT_ID가 없는데
 EMPLOYEES 새로운 데이터에 DEPARTMENT_ID에 5000이라고 넣으면
 잘못된 데이터가 들어가는 것
 그럼 테이블 신뢰할 수 없게 됨
--> 그래서 ORACLE 이 입력 막아주는 것 → 제약조건
 제약조건 : 데이터베이스 안에 무결점 유지시켜 주기 위해 필요함

5. 제약조건의 종류
   - PRIMARY KEY(PK:P) → 기본키, 고유키
     해당 컬럼의 값은 반드시 존재해야 하며, 유일해야 한다.
     (NOT NULLUNIQUE 가 결합된 형태)
     
     
                      REFERENCE KEY 라고도 함
                      --
   - FOREIGN KEY(FK:F:R) → 외래키, 외부키, 참조키
     해당 컬럼의 값은 참조되는 테이블의 컬럼 데이터들 중 하나와
     일치하거나 NULL 을 가진다.
     
   - UNIQUE(UK:U)
     테이블 내에서 해당 컬럼의 값은 항상 유일해야 한다.
     
     
                 NOT NULLCHECK로 간주되어 표현되는 경우도 있다.
                 ----
   - NOT NULL(NN:CK:C)
     해당 컬럼은 NULL 을 포함할 수 없다.
     
   - CHECK(CK:C)
     해당 컬럼에 저장 가능한 데이터의 값의 범위나 조건을 지정한다.
     --> 데이터 타입으로 정의한 것 이외에 
         조금 더 디테일한 제약조건 주려고 할 때 사용
     ex) NUMBER(3)  : -999 ~ 999 까지 가능
         3자린데 0 ~ 100 점까지만 입력가능하게 하고 싶음
         253, -15 입력 못하게 하고 싶음

✏️제약조건(Constraint)

💪Primary Key

  • 테이블에서 각 행을 유일하게 식별하는 컬럼(Single Primary Key) 또는 컬럼의 집합(Composite Primary Key)이다.

  • 기본 키는 테이블 당 최대 하나만 존재한다.

  • 그러나 반드시 하나의 컬럼으로만 구성되는 것은 아니다.

  • NULL 일 수 없고, 이미 테이블에 존재하고 있는 데이터를 다시 입력할 수 없도록 처리한다.

  • UNIQUE INDEX 가 자동으로 생성된다. (오라클이 자체적으로 만든다.)

  • 형식 및 구조 [] → 생략가능한 부분
    ① 컬럼 레벨의 형식
    컬럼명 데이터타입 [CONSTRAINT CONSTRAINT명] PRIMARY KEY[(컬럼명, ...)]

    ② 테이블 레벨의 형식 (← 가급적이면 테이블 레벨로 지정하는 걸 권장한다.)
    컬럼명 데이터타입,
    컬럼명 데이터타입,
    CONSTRAINT CONSTRAINT명 PRIMARY KEY(컬럼명, ...)

  • CONSTRAINT 추가 시 CONSTRAINT 명을 생략하면 오라클 서버가 자동적으로 CONSTRAINT 명을 부여한다.(→ 나중에 찾기 힘드니, 우리가 직접 이름 짓는게 좋다.)

  • 일반적으로 CONSTRAINT 명은 『테이블명_컬럼명_CONSTRAINT약자』형식으로 기술한다.



➡️Primary Key 지정 방법

CREATE TABLE TBL_TEST1
( COL1  NUMBER(5)       PRIMARY KEY
, COL2  VARCHAR2(30)
);

CREATE TABLE TBL_TEST2
( COL1  NUMBER(4)
, COL2  VARCHAR2(30)
, CONSTRAINT TEST2_COL1_PK PRIMARY KEY(COL1)
--           -------------             -----
--            제약조건명               제약조건 걸 컬럼명
--○ PK 지정 실습(③ 다중 컬럼 PK 지정)
-- 테이블 생성
CREATE TABLE TBL_TEST3
( COL1  NUMBER(5)
, COL2  VARCHAR2(30)
, CONSTRAINT TEST3_COL1_COL2_PK PRIMARY KEY(COL1, COL2)
);

--○ PK 지정 실습(④ 테이블 생성 이후 제약조건 추가 설정)
-- 테이블 생성(← 당시에는 제약 조건 없는 상태로 만듦)
CREATE TABLE TBL_TEST4
( COL1  NUMBER(5)
, COL2  VARCHAR2(30)
);
--==>> Table TBL_TEST4이(가) 생성되었습니다.

--※ 이미 만들어져 있는 테이블에
--   부여하려는 제약조건을 위반한 데이터가 포함되어 있을 경우
--   해당 테이블에 제약조건을 추가하는 것은 불가능하다.

-- 제약조건 추가
ALTER TABLE TBL_TEST4
ADD CONSTRAINT TEST4_COL1_PK PRIMARY KEY(COL1);




🤩UNIQUE(UK:U)

  • 테이블에서 지정한 컬럼의 데이터가
    중복되지 않고 유일할 수 있도록 설정하는 제약조건
    PRIMARY KEY 와 유사한 제약조건이지만, NULL 을 허용한다는 차이점이 있다.
    내부적으로 PRIMARY KEY 와 마찬가지로 UNIQUE INDEX 가 자동 생성된다.

  • 하나의 테이블 내에서 UNIQUE 제약조건은 여러 번 설정하는 것이 가능하다.
    즉, 하나의 테이블에 UNIQUE 제약조건을 여러 개 만드는 것은 가능하다는 것이다.

  • PRIMARY KEY에서 NOT NULL 제약조건 빼면 => UNIQUE

  • UNIQUE 나 PRIMARY KEY 걸어놓으면 ORACLE 이 빨리 찾으려고 INDEX 걸어놓는 개념
    그래서 데이터가 많으면 많을 수록 UNIQUE 나 PRIMARY KEY 는 반드시 있어야 한다.

  • 따로 겹칠 만한 데이터가 없다고 판단하더라도 제약조건 걸어야 한다.

  • 단순히 겹치는 값 없게 하려고 PRIMARY KEY 나 UNIQUE 거는 것 아니다.
    사용자가 검색창에서 많이 찾겠다 할 때도
    제약조건을 걸어야 하는지에 대한 적극적인 판단이 필요하다.

    1. 형식 및 구조
      ① 컬럼 레벨의 형식
      컬럼명 데이터타입 [CONSTRAINT CONSTRAINT명] UNIQUE

      ② 테이블 레벨의 형식
      컬럼명 데이터타입,
      컬럼명 데이터타입,
      CONSTRAINT CONSTRAINT명 UNIQUE(컬럼명, ...)



➡️Unique Key 지정

CREATE TABLE TBL_TEST5
( COL1  NUMBER(5)       PRIMARY KEY
, COL2  VARCHAR2(30)    UNIQUE
);

--○ UK 지정 실습(② 테이블 레벨의 형식)
-- 테이블 생성
CREATE TABLE TBL_TEST6
( COL1  NUMBER(5)
, COL2  VARCHAR2(30)
, CONSTRAINT TEST6_COL1_PK PRIMARY KEY(COL1)
, CONSTRAINT TEST6_COL2_UK UNIQUE(COL2)
);

--○ UK 지정 실습(③ 테이블 생성 이후 제약조건 추가)
-- 테이블 생성
CREATE TABLE TBL_TEST7
( COL1  NUMBER(5)
, COL2  VARCHAR2(30)
);
-- 제약조건 추가
ALTER TABLE TBL_TEST7
ADD CONSTRAINT TEST7_COL1_PK PRIMARY KEY(COL1);
--     +
ALTER TABLE TBL_TEST7
ADD CONSTRAINT TEST7_COL2_UK UNIQUE(COL2);

--     ↓ (두 개 합쳐서)

ALTER TABLE TBL_TEST7
ADD ( CONSTRAINT TEST7_COL1_PK PRIMARY KEY(COL1)
    , CONSTRAINT TEST7_COL2_UK UNIQUE(COL2) );
--==>> Table TBL_TEST7이(가) 변경되었습니다.




CHECK(CK:C)

  • 컬럼에서 허용 가능한 데이터의 범위나 조건을 지정하기 위한 제약조건
    컬럼에 입력되는 데이터를 검사하여 조건에 맞는 데이터만 입력될 수 있도록 한다.
    또한, 컬럼에서 수정되는 데이터를 검사하여
    조건에 맞는 데이터로 수정되는 것만 허용하는 기능을 수행하게 된다.

  • 형식 및 구조
    ① 컬럼 레벨의 형식
    컬럼명 데이터타입 [CONSTRAINT CONSTRAINT명] CHECK(컬럼 조건)

    ② 테이블 레벨의 형식
    컬럼명 데이터타입,
    컬럼명 데이터타입,
    CONSTRAINT CONSTRAINT명 CHECK(컬럼 조건)



Check 지정 방법

--○ CK 지정 실습(① 컬럼 레벨의 형식)
-- 테이블 생성
CREATE TABLE TBL_TEST8
( COL1  NUMBER(5)       PRIMARY KEY
, COL2  VARCHAR2(30)    
, COL3  NUMBER(3)       CHECK(COL3 BETWEEN 0 AND 100)
);
--==>> Table TBL_TEST8이(가) 생성되었습니다.
-- NUBMER(3) 하면 -999 ~ 999 까지 입력가능하지만
-- 여기서 0 ~ 100 까지만 입력가능하게 하고 싶음
-- → CHECK 제약조건 사용하면 됨

--○ CK 지정 실습(② 테이블 레벨의 형식)
-- 테이블 생성
CREATE TABLE TBL_TEST9
( COL1  NUMBER(5)
, COL2  VARCHAR2(30)
, COL3  NUMBER(3)
, CONSTRAINT TEST9_COL1_PK PRIMARY KEY(COL1)
, CONSTRAINT TEST9_COL3_CK CHECK(COL3 BETWEEN 0 AND 100)
);

--○ CK 지정 실습(③ 테이블 생성 이후 제약조건 추가)
-- 테이블 생성
CREATE TABLE TBL_TEST10
( COL1  NUMBER(5)
, COL2  VARCHAR2(30)
, COL3  NUMBER(3)
);

-- 제약조건 추가
ALTER TABLE TBL_TEST10
ADD ( CONSTRAINT TEST10_COL1_PK PRIMARY KEY(COL1)
    , CONSTRAINT TEST10_COL3_CK CHECK(COL3 BETWEEN 0 AND 100) );




FOREIGN KEY(FK:F:R)

 1. 참조 키 또는 외래 키(FK)는 두 테이블의 데이터 간 연결을 설정하고
    강제 적용시키는데 사용되는 열이다.
    한 테이블의 기본 키 값이 있는 열을
    다른 테이블에 추가하면 테이블 간 연결을 설정할 수 있다.
    이 때, 두 번째 테이블에 추가되는 열이 외래키가 된다.

 2. 부모 테이블(참조받는 컬럼이 포함된 테이블)이 먼저 생성된 후
    자식 테이블(참조하는 컬럼이 포함된 테이블)이 생성되어야 한다.
    이 때, 자식 테이블에 FOREIGN KEY 제약조건이 설정된다.
    ex) EMP 테이블 만들고서, DEPT 테이블 만들면 안된다는 거임 !

 3. 형식 및 구조
 ① 컬럼 레벨의 형식
 컬럼명 데이터타입 [CONSTRAINT CONSTRAINT]
                   REFERENCES 참조테이블명(참조컬럼명)
                   [ON DELETE CASCADE | ON DELETE SET NULL]   → 추가 옵션

 ② 테이블 레벨의 형식
 컬럼명 데이터타입,
 컬럼명 데이터타입
 CONSTRAINT CONSTRAINTFOREIGN KEY(컬럼명)
              REFERENCES 참조테이블명(참조컬럼명)
              [ON DELETE CASCADE | ON DELETE SET NULL]        → 추가 옵션


 [ON DELETE CASCADE | ON DELETE SET NULL] 설정하지 않으면
 부모 테이블에서 자식 테이블이 참조하고 있는 PK 삭제 불가하다.
 [ON DELETE CASCADE | ON DELETE SET NULL] 설정해 놓으면
 부모 테이블에서 자식 테이블이 참조하고 있는 PK 삭제가 가능해지고,
 삭제했을 때, 자식 테이블에서
 ON DELETE CASCADE : 참조하고 있는 거 연쇄로 삭제
 ON DELETE SET NULL : 참조하고 있는 거 NULL 로 설정
 → 위험한 추가 옵션임..!FOREIGN KEY 제약조건을 설정하는 실습을 진행하기 위해서는
   부모 테이블의 생성 작업을 먼저 수행해야 한다.
   그리고 이 때, 부모 테이블에는 반드시 PK 또는 UK 제약조건이 
   설정된 컬럼이 존재해야 한다.



Foreign key 지정법

--○ FK 지정 실습(① 컬럼 레벨의 형식)
-- 테이블 생성
CREATE TABLE TBL_EMP1
( SID       NUMBER          PRIMARY KEY
, NAME      VARCHAR2(30)
, JIKWI_ID  NUMBER          REFERENCES TBL_JOBS(JIKWI_ID)
);
  • 제약조건 조회시
HR	SYS_C007081	TBL_EMP1	R	JIKWI_ID		NO ACTION
                           ---                  -----------
                        REFERENCE               ON DELETE CASCADE 나 
                                                ON DELETE SET NULL 이
                                                설정되어 있지 않을 때
                                                나오는 DELETE_RULE       

--○ FK 지정 실습(② 테이블 레벨의 형식)
-- 테이블 생성
CREATE TABLE TBL_EMP2
( SID       NUMBER
, NAME      VARCHAR2(30)
, JIKWI_ID  NUMBER
, CONSTRAINT EMP2_SID_PK PRIMARY KEY(SID)
, CONSTRAINT EMP2_JIKWI_ID_FK FOREIGN KEY(JIKWI_ID)
             REFERENCES TBL_JOBS(JIKWI_ID)
);

3.
--○ FK 지정 실습(③ 테이블 생성 이후 제약조건 추가)
-- 테이블 생성
CREATE TABLE TBL_EMP3
( SID       NUMBER
, NAME      VARCHAR2(30)
, JIKWI_ID  NUMBER
);
--==>> Table TBL_EMP3이(가) 생성되었습니다.

-- 제약조건 추가
ALTER TABLE TBL_EMP3
ADD ( CONSTRAINT EMP3_SID_PK PRIMARY KEY(SID)
    , CONSTRAINT EMP3_JIKWI_ID_FK FOREIGN KEY(JIKWI_ID)
                 REFERENCES TBL_JOBS(JIKWI_ID) );
--==>> Table TBL_EMP3이(가) 변경되었습니다.

주의사항

FOREIGN KEY 생성 시 주의사항
    참조하고자 하는 부모 테이블을 먼저 생성해야 한다.
    참조하고자 하는 컬럼이 PRIMARY KEY 또는 UNIQUE 제약조건이 설정되어 있어야 한다.
    테이블 사이에 PRIMARY KEYFOREIGN KEY 가 정의되어 있으면
    PRIMARY KEY 제약조건이 설정된 컬럼의 데이터 삭제 시
    FOREIGN KEY 컬럼에 그 값이 입력되어 있는 경우 삭제되지 않는다.
    (, 자식 테이블에 참조하는 레코드가 존재할 경우
     부모 테이블의 참조받는 레코드는 삭제할 수 없다는 것이다.), FK 설정 과정에서 『ON DELETE CASCADE』 나 『ON DELETE SET NULL』 옵션을
    사용하여 설정한 경우에는 삭제가 가능하다.
    또한, 부모 테이블을 제거하기 위해서는 자식 테이블을 먼저 제거해야 한다.

캐스케이드

-- 『ON DELETE CASCADE』 옵션 포함된 내용으로 제약조건 다시 지정
ALTER TABLE TBL_EMP1
ADD CONSTRAINT EMP1_JIKWI_ID_FK FOREIGN KEY(JIKWI_ID)
               REFERENCES TBL_JOBS(JIKWI_ID)
               ON DELETE CASCADE;               -- CHECK~!!!

-※ CASCADE 옵션을 지정한 후에는
참조받고 있는 부모 테이블의 데이터를
언제든지 자유롭게 삭제하는 것이 가능하다.
단,부모 테이블의 데이터가 삭제될 경우...
이를 참조하는 자식 테이블의 데이터도
모두 함께 삭제



NOT NULL(NN:CK:C)

-- 1. 테이블에서 지정한 컬럼의 데이터가
--    NULL 인 상태를 갖지 못하도록 하는 제약조건



※ 다른 제약 조건들은 테이블 레벨의 형식으로 더 많이 쓰이지만,
   NOT NULL 제약 조건은 컬럼 레벨의 형식으로 더 많이 쓰인다.

 2. 형식 및 구조
 ① 컬럼 레벨의 형식
 컬럼명 데이터타입 [CONSTRAINT CONSTRAINT] NOT NULL

 ② 테이블 레벨의 형식
 컬럼명 데이터타입
 컬럼명 데이터타입
 CONSTRAINT CONSTRAINTCHECK(컬럼명 IS NOT NULL)



※ 다른 제약 조건들은 기존에 생성된 테이블에 제약조건 추가할 때,
   ALTER 절에 ADD 를 사용했지만,
   NOT NULL 제약 조건은 ALTER 절에 MODIFY 를 더 많이 사용한다.

 3. 기존에 생성되어 있는 테이블에 NOT NULL 제약조건을 추가할 경우
    ADD 보다 MODIFY 절이 더 많이 사용된다.
 ALTER TABLE 테이블명
 MODIFY 컬럼명 데이터타입 NOT NULL;


※  그냥 비어있다, 채워져있다 만으로 제약조건을 구성하다보니
    이미 NULL 이 포함되어 있는데, 그 테이블에 NOT NULL 조건 설정하려고 하면
    에러남으로 가장 많이 접할 수 있는 에러다.

 4. 기존 생성되어 있는 테이블에 
    데이터가 이미 들어있지 않은 컬럼(NULL 인 상태의 컬럼)NOT NULL 제약조건을 갖게끔 수정하는 경우에는 에러 발생한다.(불가능하다)

Not Null 제약조건 부여

--○ NOT NULL 지정 실습(① 컬럼 레벨의 형식)
-- 테이블 생성
CREATE TABLE TBL_TEST11
( COL1  NUMBER(5)       PRIMARY KEY
, COL2  VARCHAR2(30)    NOT NULL        -- 이것도 일반적인 CHECK 와 다르다.
                                        -- CHECK 키워드 없이 사용가능
);

--○ NOT NULL 지정 실습(② 테이블 레벨의 형식)
-- 테이블 생성
CREATE TABLE TBL_TEST12
( COL1  NUMBER(5)
, COL2  VARCHAR2(30)
, CONSTRAINT TEST12_COL1_PK PRIMARY KEY(COL1)
, CONSTRAINT TEST12_COL2_NN CHECK(COL2 IS NOT NULL)
);

--○ NOT NULL 지정 실습(③ 테이블 생성 이후 제약조건 추가)
-- 테이블 생성
CREATE TABLE TBL_TEST13
( COL1  NUMBER(5)
, COL2  VARCHAR2(30)
);
--==>> Table TBL_TEST13이(가) 생성되었습니다.


-- 제약조건 추가
ALTER TABLE TBL_TEST13
ADD ( CONSTRAINT TEST13_COL1_PK PRIMARY KEY(COL1)
    , CONSTRAINT TEST13_COL2_NN CHECK(COL2 IS NOT NULL) );
    
--※ NOT NULL 제약조건만 TBL_TEST13 테이블의 COL2 에 추가하는 경우
--   다음과 같은 방법을 사용하는 것도 가능하다.
ALTER TABLE TBL_TEST13
MODIFY COL2 NOT NULL;    




제약 조건 삭제

- 제약조건 제거
-- 제약조건의 이름만 알고 있으면 된다.
ALTER TABLE TBL_EMP3
DROP CONSTRAINT EMP3_JIKWI_ID_FK;
--==>> Table TBL_EMP3이(가) 변경되었습니다.




각 제약 조건 조회법


SELECT *
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'TBL_TEST1';
--==> HR	SYS_C007061	         P	TBL_TEST1					ENABLED	NOT DEFERRABLE	IMMEDIATE	VALIDATED	GENERATED NAME			2022-03-03	HR	SYS_C007061		
--          -----------         --
--          제약조건 이름(명)   PRIMARY KEY(제약조건타입)


--※ 제약조건이 지정된 컬럼 확인(조회)
SELECT *
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME = 'TBL_TEST1';
--==>> HR	SYS_C007061	TBL_TEST1	COL1	1
--          -----------             ----
--          제약조건 명             대상컬럼



--※ USER_CONSTRAINTS 와 USER_CONS_COLUMNS 를 대상으로
--   제약조건이 설정된 
--   소유주, 제약조건명, 테이블명, 제약조건종류, 컬럼명 항목을 조회한다.
--①관찰
SELECT *
FROM USER_CONS_COLUMNS;
-- (OWNER, CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME, 제약조건종류 없음)
SELECT *
FROM USER_CONSTRAINTS;
-- (OWNER, CONSTARINT_NAME, TABLE_NAME, CONSTRAINT_TYPE, 컬럼명없음)

--②쿼리문 작성
SELECT UC.OWNER, UC.CONSTRAINT_NAME, UC.TABLE_NAME, UC.CONSTRAINT_TYPE
     , UCC.COLUMN_NAME
FROM USER_CONS_COLUMNS UCC JOIN USER_CONSTRAINTS UC
ON UCC.CONSTRAINT_NAME = UC.CONSTRAINT_NAME;

  • 테이블에 따른 제약조건 조회
SELECT UC.OWNER, UC.CONSTRAINT_NAME, UC.TABLE_NAME, UC.CONSTRAINT_TYPE
     , UCC.COLUMN_NAME
FROM USER_CONS_COLUMNS UCC JOIN USER_CONSTRAINTS UC
ON UCC.CONSTRAINT_NAME = UC.CONSTRAINT_NAME
WHERE UC.TABLE_NAME = 'TBL_TEST1';
  • 단 제약조건 명을 생략했을시
/*
    우리가 제약조건명 설정안해서
    오라클이 이름 붙인거                CHECK 가 어떤 조건으로 걸려있는지
    -----------                         ------------------------
HR	SYS_C007071	TBL_TEST8	C	COL3	COL3 BETWEEN 0 AND 100	
HR	SYS_C007072	TBL_TEST8	P	COL1		
*/

이와같이 오라클이 명칭을 지정하게된다.

0개의 댓글