[SQL] 제약 조건 DISABLE

DISABLE의 종류

NOVALIDATE

'validate'. 즉, '확인'이라는 뜻이다.

즉, 'novalidate'라는 것은 '확인하지 않는다'라는 뜻이다.

이제 실제로 실습을 한번 해보겠다.

PRIMARY KEY 설정이 돼있는 컬럼에 중복 데이터 삽입해보기

INSERT INTO t_users VALUES(1, 'kevin');
INSERT INTO t_users VALUES(1, 'kevin');
*
-- ERROR at line 1: unique constraint 쏼라쏼라

이렇게 PRIMARY KEY가 설정되어 있는 컬럼이라 중복 데이터를 허용하지 않는다.

이제 제약조건을 확인하지 않기 위해 NOVALIDATE설정을 적용해보겠다.

NOTVALIDATE로 수정하기

ALTER TLABE t_users
DISABLE NOVALIDATE CONSTRAINT u_id_pk;

위와 같이 DISABLE NVALIDATE로 제약조건을 DISABLE하게 되면 CONSTRAINT가 없는 것과 동일하게 작동된다.

DISABLE VALIDATE는 이와 반대로 동작한다.

VALIDATE

이번에는 NOT NULL설정이 된 컬럼(name)에 NULL을 입력해보겠다.

NOT NULL 컬럼에 NULL 입력해보기

INSERT INTO t_users VALUES(2, NULL);
INSERT INTO t_users VALUES(2, NULL);

-- ERROR

이와 같이 name 컬럼에 NOT NULL제약 조건이 설정되어 있어서 NULL값을 허용하지 않습니다.

VALIDATE로 수정하기

ALTER TABLE t_users 
DISALBE VALIDATE CONSTRAINT u_name_nn

INSERT INTO t_users VALUES(2, NULL);

-- ERROR: NO insert/update/delete on table with constraint (u_name_nn) disabled and validated

이렇게 수정 전과 똑같이 입력이 안 된다.

에러 내역을 보면 DISABLE VALIDATE설정이 돼있는 컬럼은 insert/update/delete 작업을 수행할 수 없다는 내용이다.

즉, 이 옵션을 해당 컬럼의 데이터를 변경할 수 없게 하는 옵션이다.

그럼 다른 컬럼의 내용을 변경해야지!

라고 생각했지만... 다른 컬럼에 내용을 insert/update/delete하려고 해도 불가능하다는 에러가 발생합니다.

즉, DISABLE VALIDATE옵션은 테이블의 내용을 변경할 수 없도록 만드는 옵션임을 알 수 있습니다.


DISABLE의 기본 옵션

앞서 알아본 것과 같이, VALIDATE옵션을 설정하면 테이블에 아무 것도 설정할 수 없기 떄문에 DISABLE의 기본 옵션은 NOTVALIDATE이다.

이렇게 DISABLE을 통해 제약조건을 비활성화 할 수 있다면, 활성화 할 수도 있어야 할 것이다.

다음 글에서 알아보겠다.