UNIQUE 제약 조건 ?

  • 유일성 제약 조건
  • 하나의 테이블에 두 개 이상 만들 수 있다.
  • 두 개 이상의 컬럼으로 UNIQUE를 만들 수 있다.
  • NULL을 허용하면 NULL추가가 가능하다.

 

예시를 통해 알아보자.

CREATE TABLE test1 (
    id VARCHAR2(50),
    pwd VARCHAR2(100) NOT NULL,
    name VARCHAR2(30) NOT NULL,
    email VARCHAR2(50),
    CONSTRAINT pk_test1_id PRIMARY KEY(id),
    CONSTRAINT uq_test1_email UNIQUE(email)
);
SELECT * FROM USER_CONSTRAINTS WHERE table_name= 'TEST1';
    -- P : PRIMARY KEY, U : UNIQUE (유일성 제약 조건)
SELECT * FROM USER_CONS_COLUMNS WHERE table_name= 'TEST1';

예시용 테이블을 생성하고, 기본키와 UNIQUE 제약조건을 주었다.

CONSTRAINT [제약조건명] 을 통해 기본키와 UNIQUE에 이름을 주어서 SELECT * FROM USER_CONSTRAINT WHERE table_name = 'TEST1'; 을 통해 알아볼 수 있었다. 이 명령어를 통해 보면 CONSTRAINT_TYPE에 P가 PRIMARY KEY를 나타내고, U가 UNIQUE를 나타낸다. C는 CHECK 제약조건.

 

이 테이블에 데이터를 추가해보자.

INSERT INTO test1(id, pwd, name, email) VALUES ('1','1','1','1');
INSERT INTO test1(id, pwd, name, email) VALUES ('2','2','2','1');
    -- 에러. ORA-00001 : email 유일성(UNIQUE) 제약 위반
INSERT INTO test1(id, pwd, name, email) VALUES ('2','2','2',NULL);
    -- UNIQUE 이어도 NULL을 허용하면 NULL 추가 가능하고 NULL은 중복 가능

email 컬럼에 UNIQUE를 주었기 때문에 위에 추가된 id 1이 가지고 있는 이메일과 중복되어 에러가 뜨고 데이터는 추가되지 않는다.

email에 컬럼에 NOT NULL을 주지 않았기 때문에 NULL은 추가가 가능하다. 

 


NOT NULL 제약 조건 ?

  • NULL을 허용하지 않는다.
  • '(길이가 0 인 문자열)' 도 NULL 로 취급한다.

존재하는 테이블에 NOT NULL 제약 조건을 설정하려면

ALTER TABLE 테이블명 MODIFY 컬럼 NOT NULL;

ALTER TABLE 테이블명 ADD [ CONSTRAINT 제약조건 이름] CHECK(컬럼 IS NOT NULL);

ALTER TABLE 명령어를 이용한다.

 

NOT NULL 제약 조건을 삭제하려면

ALTER TABLE 테이블명 MODIFY 컬럼 NULL;

ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건이름;

을 이용한다.

 

새롭게 테이블을 만들어서 실습해보자.

CREATE TABLE test1(
    id VARCHAR2(30),
    pwd VARCHAR2(30),
    name VARCHAR2(30),
    email VARCHAR2(30)
);

-- test1 테이블 id에 기본키 추가

ALTER TABLE test1 ADD PRIMARY KEY ( id );
ALTER TABLE test1 ADD CONSTRAINT pk_test1_id PRIMARY KEY ( id );
-- 두 개 다 가능. 제약조건에 이름을 주는 것이 나중에 확인이 편하다.

-- test1 테이블의 email에 UNIQUE 추가

ALTER TABLE test1 ADD UNIQUE (email);
ALTER TABLE test1 ADD CONSTRAINT uq_test1_email UNIQUE (email);

-- test1 테이블의 pwd, name, email  에 NOT NULL 제약 추가

ALTER TABLE test1 MODIFY pwd NOT NULL;
ALTER TABLE test1 MODIFY name NOT NULL;
ALTER TABLE test1 MODIFY email NOT NULL;

ALTER TABLE test1 MODIFY (pwd NOT NULL, name NOT NULL, email NOT NULL);

--test1 테이블 pwd 폭을 100으로 변경

ALTER TABLE test1 MODIFY pwd VARCHAR2(100);

--test1 테이블 email의 NOT NULL 제약 제거

ALTER TABLE test1 MODIFY email NULL;
ALTER TABLE test1 DROP CONSTRAINT uq_test1_email;

 

+ Recent posts