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

[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

활동하기