Base/Database

[Database] 테이블 생성(CREATE TABLE) 및 제약조건(CONSTRAINT)

반응형

 테이블 생성하기

CREATE TABLE table_name (column_name datatype [DEFAULT expr]  [column_constraint], [table_constraint ])

 

column_constraint - 컬럼수준에서 제약조건을 거는것 / 각 컬럼마다 적는다.

table_constraint - 컬럼을 다 만들고 마지막에 테이블 수준에서 제약조건을 건다.

 

table_name, column_name - 테이블 이름 지정, 컬럼 이름 지정

datatype - 컬럼의 데이터 타입, 크기 지정

DEFAULT expr - 해당 컬럼에 적용될 자동 기본값

 

 

테이블 생성 조건

 

테이블 및 컬럼 이름

문자로 시작 , 30자 이하

영문대/소문자, 숫자, 특수문자, 한글만 포함가능

중복되는 이름은 사용 할 수 없음

예약 키워드는 사용할 수 없음

 

예제

CREATE TABLE TEST(
	ID NUMBER(5),
    NAME CHAR(10),
    ADDRESS VARCHAR2(50)
);

 

 

제약조건(CONSTRAINT)

테이블을 만들때는 제약조건을 넣을수 있다..

WQQ2

NOT NULL - 해당 컬럼에 NULL이 들어가선 안된다.

UNIQUE - 해당 컬럼 또는 컬럼 조합 값이 유일하도록 한다.

PRIMARY KEY - 각 행을 유일하게 식별할 수 있도록 한다.

REFERENCES TABLE - 외래키로서 부모키와 관계를 가진다. 이건 부모키에 의존하는 데이터이거나 NULL값만 허용 한다.

CHECK - 해당 컬럼에 특정 조건을 항상 만족시키도록 한다(전처리)

제약조건을 설정 할 수있고  나머지는 테이블과 컬럼레벨에서 다 가능하다.

제약 조건을 만들 때 컬럼부분에서 제약조건을 설정하는 방법과 컬럼부분이 끝난뒤 맨 마지막에 제약조건을 설정하는 테이블 수준의 제약조건 설정을 하는 방법 2가지가 있다.

제약 조건을 통해 데이터가 들어올때 전처리를 한다. 

 

NOT NULL 제약조건

 

NOT NULL 조건에서 아래와 같이 NULL을 입력하면 오류가 뜬다.

여기 아래에서 오류가 난 이유는 위에서 말했듯이 NOT NULL 제약 조건은 테이블 레벨에서 할 수 없고 컬럼 레벨에서 해야 된다.

 

REFERENCES 제약조건

 

CHECK 제약조건 / PRIMARY KEY 제약 조건

입력되는 값을 체크하여 설정된 값이외의 값이 들어오면 오류와 함께 쿼리가 실행이 되지 않게 만든다.

# 변하는 값은 조건으로 사용할 수 없다.

 

 

 


 

 

교차 테이블 생성하는 방법

관계형 데이터 베이스는 다대다를 구현할 수 없다. 다대다를 교차 테이블을 하나만들어서 풀어준다.

테이블이 두개일때 테이블을 하나 더만들어서 이런 다대다 관계를 풀어 준다.

 

여기서 TB_CLASS_PROFESSOR 과 같다. 이런경우에 외래키 이면서 기본키이다.

이런경우에는 컴퍼짓 키는 테이블의 조건으로 하고 각각의 외래키는 컬럼수준으로 한다.

 

이런 테이블의 쿼리다. 컬럼수준에서는 외래키를 잡고 테이블 수준에서 복합키를 잡으면 된다.

 


서브쿼리를 활용해 테이블을 생성

 

CREATE TABLE table_name [|(column_name)] AS SUBQUERY

 

서브쿼리를 사용하기 때문 물리적인 메모리 공간을 차지하는 단점이 있긴하다.

 

EMPLOYEE 테이블에 데이터가 있었기 때문에 새로만든 서브쿼리 테이블에도 데이터가 들어간다.

 

 

 

 

 

반응형