본문 바로가기
Database/Oracle

SQL-Oracle_제약조건01] Column에 제약조건(Constraint)걸기/확인하기

by KyoD 2021. 6. 9.
반응형

* Column에 제약조건(Constraint)를 거는 이유

 제약조건을 거는 이유는, 테이블에 부적절한 자료가 입력되거나 부적절하게 변경되는 것을 막아 자료의 신뢰성과 정확성을 확보하는 데 있다. 

 

 제약조건은 테이블을 생성할 때 지정할 수도 있고,

 테이블 생성 후에 Alter를 이용하여 따로 추가하거나 수정이 가능하다.

 

* Constraint의 종류

 

* Not null

CREATE TABLE  테이블이름 (
컬럼이름 데이타타입 CONSTRAINT  제약조건이름 NOT NULL
);

Not null 제약조건을 설정하면 해당 컬럼에는 반드시 데이터를 입력해야 한다.

 

 

Not null 제약조건이 걸린 컬럼을 빈칸으로 두고 Recode를 입력하려 하면 다음과 같은 에러 메시지가 뜬다.

 

cannot insert NULL into ()

 

 

* Unique

CREATE TABLE  테이블이름 (
컬럼이름 데이타타입 CONSTRAINT  제약조건이름 UNIQUE
);

테이블을 만들때 e_id 컬럼에 Unique제약을 걸었다.

Unique 조건을 걸면 데이터의 유일성이 보장되며, 자동 인덱스가 생성된다.

 

같은 데이터를 두번 입력하려 할 때 오류가 뜨는 것을 확인할 수 있다.

 

unique constraint () violated

 

 

* Check

CREATE TABLE  테이블이름 (
컬럼이름 데이타타입 CONSTRAINT  제약조건이름 CHECK  (특정범위 혹은 조건)
);

Emp3 테이블을 만들 때 empsex에 '남자', '여자'라는 단어만 들어갈 수 있도록 check제약을 걸었다.

 

'남성'이라는 단어를 넣을려 하면 에러가 뜨는 것을 확인할 수 있다.

 

 

 

* Default

CREATE TABLE  테이블이름 (
컬럼이름 데이타타입 DEFAULT 자동으로넣어줄값
);

Emp3 테이블에 edate 컬럼에 default sysdate 조건을 걸어서 value를 입력하지 않을 시 현재 시스템 날짜를 넣도록 했다.

 

 

sysdate외에도 date타입의 컬럼이므로 날짜 형식의 데이터도 Default값으로 넣을 수 있다.

 

 

* Constraint 확인하기

SELECT  table_name, constraint_name FROM  user_constraints;

user_contraints 테이블은 시스템 관리를 위한 '딕셔너리 테이블'이다.

그 중에서도 user_constraints 테이블은 constraint가 걸려있는 테이블의 이름과 조건이름, 조건 종류 등을 저장한다.

 

더 자세한 것은 다른 포스트에서 다루도록 한다.

 

위의 명령어를 입력하면 현재 조건이 걸려있는 테이블들과 Constraint를 걸 때 명명한 제약조건의 이름을 알 수 있다. 

 

위에서 EMP3에 걸어둔 조건들을 위와 같이 확인할 수 있다.

반응형