쌓고 쌓다

[Oracle] 무결성 제약조건과 DML 명령문의 영향 본문

프로그래밍/SQL

[Oracle] 무결성 제약조건과 DML 명령문의 영향

승민아 2022. 12. 9. 17:44

무결성 제약조건을 위반하는 데이터는 입력되지 않고 오류 메세지를 출력한다.

오라클에서의 무결성 제약조건 검사 내부 과정

  • 테이블에 데이터를 먼저 입력
  • 무결성 제약조건을 위반한 명령문은 롤백

 

subject 테이블은 아래와 같다.

subno는 DEFERRABLE INITIALLY DEFERRED로 생성했다.

 

즉시 제약조건 검사에 위반되는 경우

INSERT INTO subject
VALUES (1, 'SQL', '1', '필수');


-- subname은 NOT NULL인데 ''로 NULL이니 삽입 에러
INSERT INTO subject
VALUES (2, '', '2', '필수');

-- term은 '1', '2'만 입력 가능해서 CHECK 위배
INSERT INTO subject
VALUES (3, 'JAVA', '3', '선택');

COMMIT;

 

데이터 입력 결과

DML문 실행시 마다 위반 여부를 체크해 위반된 DML 명령문은 롤백 되어

COMMIT후 테이블을 확인해보니 정상적인 입력만 INSERT 되어 있다.

 

지연 제약조건 검사에 위반되는경우

INSERT INTO subject VALUES(4, '데이터베이스', '1', '필수');

INSERT INTO subject VALUES(4, '데이터모델링', '2', '선택');

첫번째 칼럼은 기본 키(PK)로 중복된 값을 허용하지 않는다.

여기서 중복된 값을 입력했음에도 불구하고 데이터가 들어간다.

subno는 DEFERRABLE INITIALY DEFERRED로 트랜잭션이 끝날때만 제약조건 검사를 해놨기에

데이터가 들어갔다.

 

이제 COMMIT을하면 

무결성 제약조건에 의해 위반한 명령문은 롤백이 된다.

 

 

Comments