본문 바로가기
데이터베이스/SQL

SQLD 를 위한 SQL기본문법 정리 4 - DDL, 테이블 생성

by ADELA_J 2024. 2. 13.

DDL - 테이블 생성 규칙

1. 테이블 명

 : 객체 의미할 수 있는 이름, 단수형 권고, 다른 테이블의 이름과 중복되지 않아야 함

2. 컬럼 명

 : 한 테이블 내에 중복되지 않아야함, 테이블 생성시 각 컬럼은 괄호 내 콤마로 구분,

뒤에 데이터 유형이 반드시 지정되어야

3. 테이블명&컬럼명

 : 사전에 정의된 예약어(Reserved word)는 사용 불가(ex) select, from, where etc),

문자 숫자 일부 기호(_, $, #)만 허용, 반드시 문자로 시작되어야 함(숫자, 기호x)

4. 제약 조건명 : 다른 제약조건의 이름과 중복되지 않아야

 

 

<Oracle 주요 데이터 타입>

1. CHAR : 고정 문자열, 고정길이보다 작은 경우 공백이 채워짐

2. VARCHAR2 : 가변 길이 문자열, 고정길이보다 작으면 나머지 공간은 사용 x 

3. NUMBER : 숫자, 10가지 이상의 숫자 타입 지원,

전체자리수와 소수 부분 자리수 명시(ex. NUMBER(8,2) 정수 부분 6자리, 소수 부분 2자리)

4. DATE : 날짜 시각

 

<제약조건 Constraints>

1. Primary Key (기본키) : not null and unique

2. Foreign key (외래키) : 타 테이블 기본키를 참조. 참조 무결성 제약 옵션 선택(삭제나 변경이 쉽지 않도록 하는것)

3. NOT NULL

4. UNIQUE
5. CHECK : 입력할 수 있는 값을 제한하는 조건 ex. CONSTRAINT BACK_NO_CK CHECK(BACK_NO<99) :

백넘버는 99 이하로만 작성할 수 있게 제한

 

▶ 명시적으로 부여할 수도 있고, 암묵적으로 시행할 시 시스템에서 알아서 함

 

<제약 조건의 지정>

1. 

CONSTRAINT STADIUM_PK PRIMARY KEY (STADIUM_ID)

이런식으로 CREATE TABLE 할때도 되지만

(맨 밑에 적으면됨)

 

2.

CREATE TABLE STADIUM (
STADIUM_ID    CHAR(3) PRIMARY KEY ,
STADIUM_NAME  VARCHAR(40) NOT NULL,
HOMETEAM_ID   CHAR(3) UNIQUE,
SEAT_COUNT    int CHECK (SEAT_COUNT >=10 AND SEAT_COUNT <= 100),
TEL           VARCHAR(10) REFERENCES TEAM(TEM_ID)
);

 

 

이런식으로 묵시적으로 지정해주는 방법,

 

3.

그리고 

CREATE TABLE STADIUM (
STADIUM_ID    CHAR(3) CONSTRAINT p2_pk_id PRIMARY KEY ,
STADIUM_NAME  VARCHAR(40) CONSTRAINT p2_nn_name NOT NULL,
HOMETEAM_ID   CHAR(3) CONSTRAINT p2_un_nick UNIQUE,
SEAT_COUNT    int CONSTRAINT p2_ck_seat CHECK(SEAT_COUNT >=10 AND SEAT_COUNT <= 100),
TEL           VARCHAR(10) CONSTRAINT p2_fk_tel REFERENCES TEAM(TEM_ID)
);

 

이런식으로 'CONSTRAINT 제약조건이름' 을 붙여서 명시적으로 지정해주는 방법이 있다.

 

만약 제약 조건을 확인하고 싶다면

 

<FK 제약 조건의 옵션>

: FK는 부모 테이블의 PK에서 가져왔기 때문에 PK의 레코드가 달라지면

FK도 달라져야함 이에 대한 얘기 

 

Referential Triggered Action 을 지정해야함

 > ON UPDATE, ON DELETE 일때

 

- Referential Action

1. RESTRICT(default) : 기본 값의 삭제 또는 갱신의 불허, PK의 레코드가 삭제or업뎃이 안되도록

2. NO ACTION : Restrict 와 동일하게 동작

3. CASCADE : 기본키(PK)가 삭제되면 해당 값을 외래키로 갖는 레코드 삭제 (ON DELETE CASCADE)

 PK가 갱신되면 이를 참조하는 FK도 새로운 값으로 업데이트 (ON UPDATE CASCADE)

 tmi ) 원래 되도록이면 PK는 업뎃을 하면 안된다 ㅠ 없어지고 새로 만들어지는 것이지

4. SET NULL : 기본키가 삭제or갱신되면 이를 참조하는 FK를 NULL로 업뎃 (ON DELETE/UPDATE SET NULL)

 

<기존 테이블을 활용한 테이블 생성>

CREATE TABLE PLAYER_TEMP
AS SELECT * FROM PLAYER;

 

as 뒤에 새로 만들어지고자 하는 다른 테이블의 레코드들을 select문을 통해 조회해 create

▶ 제약조건은 NOT NULL만 복제됨 (PK, FK, UNIQUE, CHECK 등은 수동으로 추가)