[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