sql_DDL(Data Definition Language)

김수경·2023년 12월 28일

SQLD 자격증

목록 보기
6/14

01. 관계형 데이터베이스

https://velog.io/@waterglasses_k/sql관계형-데이터베이스
(이전목차)

02. DLL

1. DDL의 정의와 데이터 유형

DDL(Data Definition Language)

테이블을 다루는 언어

데이터 유형

데이터베이스에 데이터를 저장할 때 어떠한 데이터를 받을지 결정하는 기준
만약 사전에 약속한 데이터와 다른 유형의 데이터를 저장하려고 하면 에러가 발생할 수 있음

대표적인 데이터 유형

  • CHAR
    • 고정길이의 문자열 정보
    • 입력된 값이 더 작으면 남는 부분은 공백으로 채워짐
  • VARCHAR
    • 가변길이 문자열 정보
    • 입력되는 값의 Byte만큼만 적용됨
    • Oracle : VARCHAR2
  • NUMERIC
    • 정수, 실수 등의 숫자정보
    • Oracle : NUMBER
      NUMBER  -- 입력 변형없이 허용가능한 범위 내에서 가변 저장
      NUMBER(5) -- 5자리 숫자를 표현할 수 있음
      NUMBER(5, 3) -- 5자리 숫자 중 소수점을 포함해 3자리까지 소수를 나타냄
      /* 예제 
      123.56 
      precision 5, scale 2 -> NUMBER(5, 2)
      NUMBER(3) -> NUMBER(3,[0]) -> 124
      NUMBER(3, 2) -> 유효숫자가 5자리인데 3자리까지 밖에 표현을 못하므로 ERR
      NUMBER(5, 1) -> 123.6 scale에 따라 반올림 되어 .5까지 표시
      */ 
  • DATETIME
    • 날짜, 시각 정보
    • Oracle : DATE

2. 제약조건

테이블에 부적절한 값이 들어오지 않도록 하는 규칙

  • NOT NULL
  • UNIQUE
  • PRIMARY KEY (NOT NULL + UNIQUE)
    • 테이블당 1개만 기본키로 설정할 수 있음
  • FOREIGN KEY
    • 참조관계를 이용
    • 참조하는 테이블이 먼저 생성되어 있어야 함
    • 외래키가 참조하는 컬럼은 참조하는 테이블의 PK이어야 함
  • DEFAULT
column2 VARCHAR2 DEFAULT 'default text'
  • CHECK
age NUMBER(2) CHECK(age>14)

3. CREATE TABLE

테이블 생성

-- Oracle 테이블 생성 구문
CREATE TABLE PLAYER ( 
	PLAYER_ID CHAR(7) NOT NULL, 
	PLAYER_NAME VARCHAR2(20) NOT NULL, 
	TEAM_ID CHAR(3) NOT NULL, 
	E_PLAYER_NAME VARCHAR2(40), 
	NICKNAME VARCHAR2(30), 
	JOIN_YYYY CHAR(4), 
	POSITION VARCHAR2(10), 
	BACK_NO NUMBER(2), 
	NATION VARCHAR2(20), 
	BIRTH_DATE DATE, 
	SOLAR CHAR(1), 
	HEIGHT NUMBER(3),
	WEIGHT NUMBER(3),
	CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID)
);

테이블 생성 실습

CREATE TABLE pokemon (
pokemon_id CHAR(10) NOT NULL ,
name CHAR(10) NOT NULL,
attr VARCHAR2(10) NOT NULL,
age NUMBER(3) NOT NULL,
CONSTRAINT PK_pokemon PRIMARY KEY (pokemon_id)
) ; 

4. ALTER TABLE

COLUMN 추가

summer_olympic 테이블의 올림픽 개회일 칼럼을 추가하세요.

ALTER TABLE summer_olympic ADD start_date DATE;

CONSTRAINT 추가

player 테이블에 team 테이블에서 team_id를 FK로 추가하기

ALTER TABLE player ADD CONSTRAINT player_fk FOREIGN KEY team_id REFERENCES team(team_id) ;

COLUMN 삭제

summer_olympic 테이블의 올림픽 개회일(start_date) 컬럼을 삭제하세요.

ALTER TABLE summer_olympic DROP COLUMN start_date ;

CONSTRAINT 삭제

friend 테이블에서 name칼럼에 설정된 Primary Key 제약 조건을 삭제하세요.

ALTER TABLE friend DROP CONSTRAINT name_PK;

COLUMN 수정

summer_olympic 테이블의 참가자(competitors) 컬럼의 데이터 유형을 고정 길이(10) 문자형으로 변경하세요.

ALTER TABLE summer_olympic MODIFY (competitors CHAR(10)) ; 

COLUMN/TABLE 이름변경

summer_olympic 테이블의 olympiad 칼럼 이름을 year로 변경하세요.

ALTER TABLE summer_olympic RENAME COLUMN plympiad TO year ;

player 테이블 명을 football_player로 변경하기

RENAME player TO football_player 

5. DROP TABLE, TRUNCATE TABLE

테이블을 전체를 삭제하면 저장된 데이터는 같이 삭제된다.
CASCADE CONSTRAINT는 참조하고 있는 제약조건ㄴ에 대해서 해당 테이블이 삭제될 때 같이 삭제될 지 여부를 물어보는 옵션이다.

-- 참조하고 있는 모든 레코드도 함께 수정
ALTER TABLE ORDERS ADD FOREIGN KEY (product_id) REFERENCES Product(id) ON UPDATE CASCADE;
-- 참조하고 있는 모든 레코드도 함께 삭제
ALTER TABLE ORDERS ADD FOREIGN KEY (product_id) REFERENCES Product (id) ON DELETE CASCADE;
-- 참조하던 레코드가 사라지면 NULL 값으로 변경
ALTER TABLE ORDERS ADD FOREIGN KEY (product_id) REFERENCES Product (id) ON DELETE SET NULL;
  • friend 테이블을 삭제해보세요.
DROP TABLE friend ;

-> 테이블을 삭제할 때 유의 또 유의해야한다!

  • 다음 friend 테이블에 대하여 테이블은 그대로 유지하고 데이터만 삭제해보세요.
TRUNCATE TABLE friend ;
profile
잘 하고 있는겨?

0개의 댓글