개발자 미니민의 개발스터디

[Oracle] 오라클 - UNIQUE 제약 조건 / NOT NULL 제약 조건 / DEFAULT

by mini_min
[Oracle]
오라클 - UNIQUE 제약 조건 / NOT NULL 제약 조건 / DEFAULT

✔️ UNIQUE 제약 조건

: 하나의 테이블에 두 개 이상 만들 수 있다.

: NULL 을 허용하면 NULL도 추가 가능

 

1) 테이블 생성과 동시에 UNIQUE 제약 조건 설정

-- 기본형식

CREATE TABLE 테이블명 (
               컬럼  데이터타입   [ CONSTRAINT 제약조건명 ]  UNIQUE
                                 :
        );

 

 

2) 테이블 레벨 방식의 UNIQUE 제약 조건 설정

-- 기본형식

CREATE TABLE 테이블명 (
               컬럼  데이터타입  [ 제약조건 ] ,
                                 :
               [ CONSTRAINT 제약조건명 ] UNIQUE (컬럼 [,컬럼])
        );

 

 

3) 존재하는 테이블에 UNIQUE 제약 조건 설정

-- 기본형식

ALTER TABLE 테이블명 ADD [ CONSTRAINT 제약조건명 ]  UNIQUE (컬럼 [,컬럼]);

 

 

 

✔️ UNIQUE 제약 조건 삭제

-- 기본형식

ALTER TABLE 테이블명 DROP UNIQUE (컬럼 [,컬럼]);
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
CREATE TABLE test1 (
        id VARCHAR2(50),
        pwd VARCHAR2(100) NOT NULL,
        name VARCHAR2(50) NOT NULL,
        rrn VARCHAR2(30) NOT NULL,
        CONSTRAINT pk_test1_id PRIMARY KEY(id),
        CONSTRAINT uq_test1_rrn UNIQUE(rrn)
    );
    
	-- NULL 허용
	ALTER TABLE test1 MODIFY rrn NULL ;
INSERT INTO test1(id, pwd, name, rrn) VALUES ('1', '1', 'a', '1');
INSERT INTO test1(id, pwd, name, rrn) VALUES ('2', '2', 'b', '1');
                -- 에러 : rrn 이 유니크 제약 위반
💡 rrn 은 유니크 제약 조건인 상태에서, NULL 값을 허용했다. 유니크는 NULL 값이 가능하지만, 중복은 허용하지 않는다.

 

 

 

✔️ NOT NULL 제약 조건

1) 테이블 생성시 NOT NULL 제약 조건 설정

-- 기본형식

CREATE TABLE 테이블명 (
           컬럼   데이터타입  NOT NULL
                :
          );

 

 

2) 존재하는 테이블에 NOT NULL 제약 조건 설정

-- 기본형식

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

 

 

 

✔️ NOT NULL 제약 조건 삭제

-- 기본형식

ALTER TABLE 테이블명 MODIFY 컬럼 NULL;
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건이름;
CREATE TABLE test2 (
        id VARCHAR2(50),
        pwd VARCHAR2(100),
        name VARCHAR2(50) ,
        PRIMARY KEY(id)
    );
ALTER TABLE test2 MODIFY name  NOT NULL;

INSERT INTO test2(id, pwd, name) VALUES (2,'2','');
            -- 에러 : 오라클에서 '' 은 NULL 로 취급한다.
💡 오라클에서 '' 은 NULL 값으로 취급한다.

 

 

 

✔️ DEFAULT

1) 테이블 생성시 DEFAULT 설정

-- 기본형식

CREATE TABLE 테이블명 (
     컬럼  데이터타입  DEFAULT 수식
                                 :
);

 

 

2) DEFAULT 제거

-- 기본형식

ALTER TABLE 테이블명 MODIFY 컬럼 DEFAULT NULL;
CREATE TABLE test3 (
	num NUMBER,
        pwd VARCHAR2(100) NOT NULL,
        name VARCHAR2(50) NOT NULL,
	content VARCHAR2(4000) NOT NULL,
	reg_date DATE DEFAULT SYSDATE,
	hireCount NUMBER DEFAULT 0,
 	 PRIMARY KEY(num)
);
INSERT INTO test3(num, pwd, name, content, hireCount) VALUES (4,'d', 'd','d', NULL);
INSERT INTO test3(num, pwd, name, content, reg_date) VALUES (5,'e', 'e', 'e', DEFAULT);
💡 hireCount 랑 reg_date 는 디폴트 값만 주었지, NOT NULL 제약 조건을 준게 아니라 NULL 값이 들어갈 수 있다.
디폴트 값을 그대로 주고 싶을 때, DEFAULT  기술해도 되지만, 굳이 안줘도 디폴트 값으로 잘 나온다.

 

 

 

✔️ CHECK 제약 조건

: 입력 되는 값을 제한할 때 쓰는 제약 조건이다.

: WHERE 절에 오는 조건과 똑같다.

 

1) 테이블 생성과 동시에 CHECK 제약 조건 설정

-- 기본형식

CREATE TABLE 테이블명 (
   컬럼  데이터타입  [ CONSTRAINT 제약조건명 ] CHECK ( 조건 )
                                 :
);

 

 

2) 존재하는 테이블에 CHECK 제약 조건 설정

-- 기본형식

ALTER TABLE 테이블명
                  ADD [ CONSTRAINT 제약조건명 ] CHECK ( 조건 );

 

 

3) CHECK 제약 조건 삭제

-- 기본형식

ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
CREATE TABLE test4(
        num NUMBER PRIMARY KEY,
        name VARCHAR2(30) NOT NULL,
        kor NUMBER(3) NOT NULL,
        eng NUMBER(3) CHECK(eng BETWEEN 0 AND 100),
        CONSTRAINT ch_test4_kor CHECK(kor BETWEEN 0 AND 100)
    );

 

 

-- sdate <= edate 인 체크 제약 추가

ALTER TABLE test4 ADD CHECK (sdate <= edate);

 

 

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기