ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2.8 SQL 데이터 무결성 제약 조건(NOT NULL, UNIQUE, CONSTRAINT, USER_CONSTRAINTS)
    SQL 과정 2019. 2. 8. 15:58

    1. NUT NULL

     가. 특정 컬럼은 반드시 값이 입력되도록 필수 입력 컬럼으로 지정

     나. 회원가입시 필수입력항목이 이에 해당

     다. NOT NULL 제약조건은 컬럼 레벨로만 정의 가능하다.


    * NOT NULL을 적용하지 않고 emp14테이블을 컬럼명과 데이터 타입을 지정한 뒤 생성하여 컬럼 값에 

      null추가 시 null은 입력된다.


    * NOT NULL 적용(empno, ename)하여 위와 같이 emp15테이블을 생성하면 NOT NULL 무결성 제약 조건에 해당하게 된다.


    * NOT NULL이 적용되어있다면 해당 하는 곳에 반드시 타입에 맞는 값을 입력해야한다.


    2. UNIQUE 제약조건

     가. 특정 컬럼에 대해 자료가 중복되지 않게 하는것

     나. 지덩된 컬럼에는 유일한 값만 저장되게 하는 것

     다. NULL값을 저장하는 것은 허용


    (1) empno에는 UNIQUE를 적용하고, ename에는 NOT NULL 조건을 적용하였다.


    (2) UNIQUE는 유일한 값만이 저장되기 때문에 empno 7435가 중복되어 무결성 제약 조건이 위배되게 된다.


    (3) UNIQUE NULL값을 허용한다.(NULL값은 데이터베이스의 단위가 아니기 때문에 중복이 가능하다.)


    3. 컬럼레벨로 제약조건 설정하기

     가. 사용자 제약 조건명 명명하기

       1) CONSTRAINT라는 키워드와 함께 제약 조건명을 기술


    4. USER_CONSTRAINTS 데이터 딕셔너리

     가. 제약조건을 위배하면, 오류 메시지에 제약조건명만 출력되는데, 오라클이 부여한 제약 조건명으로는 

     어떤 제약조건을 위반했는지 알수 없기 때문에, USER_CONSTRAINTS 데이터 딕셔너리를 검색해야만 어떤 

     제약 조건인지 확인 가능하다.

     나. 사용자가 의미 있게 제약 조건명을 명시 한다면 제약 조건명만으로도 어떤 제약조건을 위배 했는지 

     알수 있게 된다.

     다. 특정 테이블에 지정된 제약조건 검색하기

       1) USER_CONSTRAINTS에서 특정 테이블에 지정된 제약 조건만을 살펴보기 위해서는 WHERE절 내에 

      TABLE_NAME컬럼에 비교 연산자를 적용하여 테이블 명을 반드시 작은 따옴표( '  ' )안에 대문자로 기술

      해야한다.


    * USER_CONSTRAINTS 구조 보기


    (1) SCOTT 계정이 갖고 있는 모든 제약 조건 보기(SYS--> oracle에서 부여, 

    emp17의 NM, UK는 사용자가 제약 조건 명을 지정한 것)


    (2) emp17에 있는 제약 조건만을 보기( (1)에 보이는 것과 같이 EMP라는 대문자로 있기때문에 구분

    해서 해야하며, 반드시 ' ' 안에 넣어야한다.)


    (3) UNIQUE는 중복값(7500)을 허용하지 않기 때문에 (2)EMP17_EMPNO_UK 제약조건 위반이 발생한다.


Designed by Tistory.