DB/Oracle

테이블 생성 (데이터타입, 제약조건)

hs_developer 2022. 6. 18. 15:04

오라클에서 CREATE TABLE로 테이블을 생성할 수 있는데 

테이블이 있어야 후에 SELECT, INSERT, UPDATE, DELETE가 가능해지기에

일단 테이블을 만들어야 한다.

 

테이블은 아래와 같이 입력해서 만들 수 있는데

 

CREATE TABLE 테이블명 (

컬럼명 데이터타입 제약조건,
컬럼명2 데이터타입 제약조건

);

 

 

여기서 눈 여겨봐야 할 것은 데이터타입과 제약조건이다.

 

 

데이터 타입

CHAR(N) - 고정 길이 문자열, N 이하로 값이 들어오면 나머지 칸은 공백으로 채워진다.

VARCHAR2(N) - 가변 길이 문자열(N 이하로 값이 들어오면 크기에 맞춰 채워짐

NUMBER(N) - N 자리 수만큼 숫자 입력 가능

DATE - 날짜 입력 시 사용

 

 

 

제약 조건

CREATE TABLE FOREIGN_TALBLE ( -- FOREIGN KEY 사용 시 필요 테이블
	VALUE5 VARCHAR2(10) PRIMARY KEY
);

CREATE TABLE TEST (

    VALUE1 VARCHAR2(10) NOT NULL, -- NULL 값 들어오지 못하게 함
    VALUE2 VARCHAR2(10) UNIQUE, -- NULL 허용, 중복 불가
    VALUE3 VARCHAR2(10) PRIMARY KEY, -- NULL, 중복 불가
    VALUE4 VARCHAR2(10) REFERENCES FOREIGN TABLE (VALUE5),
    -- FOREIGN KEY는 다른 테이블에서 PRIMARY KEY에 해당하고 해당 PRIMARY KEY 컬럼에 있는 값만 사용 가능

    VALUE5 VARCHAR2(10) CHECK(VALUE5 BETWEEN 1 AND 10), -- CHECK: 1과 10사이의 값만 들어올 수 있음
    VALUE6 VARCHAR2(10) CHECK(VALUE6 IN ('A', 'B')), -- CHECK: A OR B만 들어올 수 있음
    VALUE7 VARCHAR2(10) DEFAULT '김' -- NULL 값이 들어올 경우 김을 기본 삽입

);

 

 

1. NOT NULL

해당 컬럼에 NULL 값(값을 넣지 않거나 공백처럼 값이 없는 경우)이 들어오지 못하게 함

VALUE1 VARCHAR2(10) NOT NULL

 

2. UNIQUE

NULL은 허용하나 중복은 불가능함

VALUE3 VARCHAR2(10) PRIMARY KEY

 

3. PRIMARY KEY

NULL, 중복 불가능

 

 

4. FOREIGN KEY

NULL 가능, 다른 테이블의 PRIMARY여야하고, 해당 테이블의 컬럼에 삽입되지 않은 값은 사용 불가

VALUE4 VARCHAR2(10) REFERENCES 참조할_테이블(참조할_테이블의_PRIMARY_KEY)

 

5. CHECK 

특정 범위나 특정 값만 들어올 수 있게 함

VALUE5 VARCHAR2(10) CHECK(VALUE5 BETWEEN1 AND 10)
VALUE6 VARCHAR2(10) CHECK(VALUE6 IN('A', 'B'))

 

6. DEFAULT

NULL 값이 들어올 시 지정된 값을 삽입함

VALUE7 VARCHAR2(10) DEFAULT '김'

 

 

 

발생할 수 있는 에러

 

ORA-02291:integrity constraint violated-parent key not found

- 참조한 테이블의 PRIMARY KEY에 내가 FOREIGN KEY로 지정하려는 값이 없음

EX) FOREIGN_TABLE의 PRIMARY KEY에는 'A'라는 값만 넣어놨는데 실제 FOREIGN KEY로 사용하려 하는 테이블에서는 'B'라는 값을 FOREIGN KEY로 사용하려는 경우

 

 

ORA-02290: check constraint violated

- CHECK 조건에 걸린 경우, CREATE TABLE시 작성한 CHECK 조건 확인

 

 

 

'DB > Oracle' 카테고리의 다른 글

INNER JOIN, OUTER JOIN(LEFT, RIGHT, FULL)  (0) 2022.06.18
서브쿼리  (0) 2022.06.18
ALIAS  (0) 2022.06.18
INSERT, UPDATE, DELETE, SELECT  (0) 2022.06.18
Oracle SQL 기초  (0) 2022.06.18