ORACLE - 제약 조건

.·2022년 4월 15일
0

ORACLE

목록 보기
7/10

예약어 : CONSTRAINT

  • 테이블의 해당 칼럼에 원하지 않는 데이터를 입력/수정/삭제 되는 것을 방지하기 위해 테이블 생성 또는 변경시 설정하는 조건
    (저장된 데이터의 신뢰성을 높이기 위해 사용)

종류

(1)NOT NULL
: NULL 로 입력이 되어서는 안되는 칼럼에 부여하는 조건으로
칼럼 레벨에서 만 부여할수 있는 제약조건

--> 테이블 제약조건 문법이 없음 -> MODIFY 사용
‘MODIFY + 칼럼명 + 칼럼레벨 제약조건 작성법’ 으로 작성

(2)UNIQUE KEY (유일키)
: 저장된 값이 중복되지 않고 오직 유일하게 유지되어야
할때 사용하는 제약조건이다. (NULL 은 허용된다)

(3)PRIMARY KEY (대표키)
: NOT NULL 조건과 UNIQUE KEY 를 합친 조건

(4)CHECK : 조건에 맞는 데이터만 입력되도록 조건을 부여하는 제약 조건

  • 그 조건이 false이면 row가 만들어지지 않음
 CHECK( loc IN('SEOUL', 'BUSAN'))

(5)FOREIGN KEY (외래키)
: 부모 테이블의 PRIMARY KEY 를 참조하는 칼럼에 붙이는 제약조건
(ex emp 테이블의 deptno 칼럼)

  • 다른 테이블의 특정 칼럼을 참조하기 때문에 그 테이블에 없는 데이터는 넣을 수 없음 !
  • 칼럼명 + 칼럼속성 + CONSTRAINT + 제약조건이름 + REFERENCES + 참조할 테이블(참조하는 칼럼명)

.

제약조건은 테이블을 생성하면서 적용할 수도 있고, 이미 생성된 테이블에 제약조건을 추가할 수도 있다 !

테이블을 생성하면서 제약조건 적용하기

SQL> CREATE TABLE dept2(
  2  deptno NUMBER(2) CONSTRAINT dept2_deptno_pk PRIMARY KEY,
  3  dname VARCHAR2(12) CONSTRAINT dept2_deptno_nn NOT NULL,
  4  loc VARCHAR2(12) CONSTRAINT dept2_loc_ck CHECK( loc IN('SEOUL', 'BUSAN'))
  5  );

제약조건 생성 종류 1. 칼럼 수준의 제약조건

  • 칼럼 수준의 제약조건(column level) : 제약조건 넣을 때 칼럼 바로옆에 적음

칼럼명 + 데이터 속성 + CONSTRAINT + 제약조건이름 + 제약조건명

제약조건 생성 후 데이터를 넣을 때

SQL> INSERT INTO dept2
  2  (deptno, dname, loc)
  3  VALUES(10, 'SALES', 'SEOUL');

제약조건에 위배되지 않게 데이터를 넣어준다 !

  • 제약조건에 위배되는 경우

    1 이미 존재하는 값 넣음

SQL> INSERT INTO dept2
  2  VALUES(10, 'XXX', 'SEOUL');
INSERT INTO dept2
*
1행에 오류:
ORA-00001: 무결성 제약 조건(SCOTT.DEPT2_DEPTNO_PK)에 위배됩니다

2 primary key 안적음

SQL> INSERT INTO dept2
  2  (dname, loc)
  3  VALUES('XXX', 'SEOUL');
INSERT INTO dept2
*
1행에 오류:
ORA-01400: NULL을 ("SCOTT"."DEPT2"."DEPTNO") 안에 삽입할 수 없습니다

3 부서명 집어넣지 않음

SQL> INSERT INTO dept2
  2  VALUES(20, NULL, 'SEOUL');
VALUES(20, NULL, 'SEOUL')
           *
2행에 오류:
ORA-01400: NULL을 ("SCOTT"."DEPT2"."DNAME") 안에 삽입할 수 없습니다

4 체크제약조건 오류

SQL> INSERT INTO dept2
  2  VALUES(20, 'SALES', 'INCHON');
INSERT INTO dept2
*
1행에 오류:
ORA-02290: 체크 제약조건(SCOTT.DEPT2_LOC_CK)이 위배되었습니다

---> 잘못된 데이터가 들어가는 것을 방지 , 신뢰도 ↑↑↑

제약조건 생성 종류 2. 테이블 수준의 제약조건 (TABLE LEVEL)

  • TABLE 수준의 제약조건 : table을 선언할 때 제약조건을 밑에 따로 작성
    어디를 가르키는지 알아야 하기 때문에 칼럼명을 명시해주어야 함 (문법이 더 구체적)

SQL> CREATE TABLE test(
  2  num NUMBER,
  3  name CHAR(10),
  4  deptno NUMBER(2),
  5  CONSTRAINT test_num_pk PRIMARY KEY(num),
  6  CONSTRAINT test_name_u UNIQUE(name),
  7  CONSTRAINT test_name_fk FOREIGN KEY(deptno) REFERENCES dept(deptno));

NOT NULL 제약조건 : 테이블 레벨에서 정의할 수 없음 * **

제약조건 없이 테이블 생성 후 제약조건 동적으로 추가하기

기본적으로
CREATE : 어떤 객체를 만들 때
DROP : 어떤 객체를 삭제할 때
ALTER : 어떤 객체를 변경할 때

제약조건 나중에 추가하는 것은 객체를 변경하는 것이므로 ALTER를 이용해서 추가한다 !

  • ADD CONSTRAINT 제약조건 추가
    (table level 제약조건 작성법이랑 같음)

0개의 댓글

관련 채용 정보