본문 바로가기

DataBase

[SQL] DDL 사용법

DDL이란 Data Definition Languaged의 약어로 데이터 정의어를 뜻한다.

데이터 정의어란 데이터베이스를 정의하는 언어이며, 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체의 골격을 결정하는 역할을 하는 언어이다. 

 

종류

  • create 
  • alter 
  • drop
  • truncate

대부분 직접적으로 구조에 관한 명령어들이다.

데이터를 담는 구조는 기본적으로 table을 생각 할 수 있지만 더 많은 종류가 존재한다.

  1. table : 데이터를 저장하는 기본 저장 단위이고, 행과 열로 구성
  2. index : 검색 속도를 향상시키기 위한 db 오브젝트
  3. view : 테이블을 바라보는 쿼리문이 출력되는 결과(하나 이상의 테이블에 있는 데이터의 부분 집합)
  4. sequence : 일련번호 생성기(번호를 생성하는 db 오브젝트)
  5. synonym : 테이블의 또 다른 이름을 부여

CREATE

[ TABLE ]

-- 기본 테이블 생성 방식
create table 테이블명(
	컬럼명 데이터유형(길이),
	컬럼명 데이터유형(길이),
	컬럼명 데이터유형(길이)
);

-- 테이블 구조와 데이터 모두 복사
CREATE TABLE 생성할_테이블명 AS
	SELECT 컬럼1, 컬럼2, ...
	FROM 복사할_테이블명;

컬럼명은 변수명이 되고, 데이터 유형은 대표적인 몇가지만 알아보자.

데이터 유형 설명
VARCHAR2 가변 크기 문자열 데이터 형식입니다. UTF-8 문자 인코딩을 사용합니다.
CHAR 고정 크기 문자열 데이터 형식입니다. UTF-8 문자 인코딩을 사용합니다.
INT 크기: 4 Byte
DATE SQL Server에서 날짜를 정의합니다.

[ SEQUENCE ]

CREATE SEQUENCE  시퀀스명
    START WITH n
    INCREMENT BY n
    MAXVALUE n | NOMAXVALUE
    MINVALUE n | NOMINVALUE
    CACHE n
    NOORDER | ORDER
    NOCYCLE | CYCLE

- START WITH : 초기화 값

- INCREMENT BY : 증가값

- MAXVALUE : 최대값 

- MINVALUE : 최소값

- CACHE : 시퀀스를 빨리 제공하기 위해 메모리에 캐쉬 하는 갯수를 지정합니다. 기본값은 20

- NOORDER | ORDER : 기본값은 NOORDER 입니다. 병렬서버를 사용할 경우 요청 순서에 따라 정확하게 시퀀스를 생성하기를 원할 때 ORDER로 지정합니다. 단일서버일 경우 이 옵션과 관계 없이 정확히 요청 순서에 따라 시퀀스가 생성됩니다.

- NOCYCLE | CYCLE : 기본값을 NOCYCLE 입니다. CYCLE로 지정하면 MAXVALUE에 도달 했을 때 다시 MINVALUE부터 시작하게 됩니다.

 

예제

CREATE SEQUENCE  SEQ_BOARD
    MINVALUE 1
    MAXVALUE 9999999999999999999999999999
    INCREMENT BY 1
    START WITH 1
    CACHE 20
    NOORDER
    NOCYCLE;

[ VIEW ]

- 뷰는 쿼리의 결과를 가상의 테이블로 만드는 것을 말합니다.

--기본 구문
CREATE OR REPLACE VIEW [스키마.][뷰 NAME] AS
SELECT문;

--예제
CREATE OR REPLACE VIEW V1 AS
SELECT
CUS.NAME,
CUS.ADDRESS,
CON.EMAIL,
CON.PHONE
FROM CUSTOMERS CUS
LEFT OUTER JOIN CONTACTS CON ON CUS.CUSTOMER_ID = CON.CUSTOMER_ID 
WHERE CON.CONTACT_ID IS NOT NULL
ORDER BY NAME;

[ INDEX ]

인덱스는 데이터베이스의 모든 블록을 다 읽지 않고, 목적한 데이터가 위치해 있는 블록만을 읽어들이므로, 적절한 상황에서 사용하면 작업을 효율적으로 만들 수 있습니다.

-- 인덱스 하나 생성
create index 인덱스이름K on 테이블이름A(컬럼이름X);

-- 인덱스 한개 이상 생성
create index 인덱스이름K on 테이블이름A(컬럼이름X, 컬럼이름Y);

index 생성 시 고유한 값으로 지정하고 싶다면 unique를 지정하면 된다.

create unique index 인덱스이름K on 테이블이름A(컬럼이름X);

index 생성에는 더 많은 사용법이 있지만 이 글에서는 간단하게 이정도만 알아보자.

 

[ SYNONYM ]

- 동의어(SYNONYM, 시노님)란, SQL에서 객체에 붙인 별명과 유사한 개념입니다.

-- synonym 생성
create synonym 동의어이름s for 객체A;

-- synonym 생성 및 갱신
create or replace synonym 동의어이름s for 객체A;

ALTER

[ TABLE ]

-- 컬럼 추가
ALTER TABLE table_name ADD COLUMN ex_column varchar(32) NOT NULL;

-- 컬럼 변경
ALTER TABLE table_name MODIFY COLUMN ex_column varchar(16) NULL;

-- 컬럼 이름까지 변경
ALTER TABLE table_name CHANGE COLUMN ex_column ex_column2 varchar(16) NULL;

-- 컬럼 삭제
ALTER TABLE table_name DROP COLUMN ex_column;

-- 테이블 이름 변경
ALTER TABLE table_name1 RENAME table_name2;

-- 제약조건 지정(이름x)
ALTER TABLE [테이블명] ADD [제약조건](컬럼명)
ALTER TABLE [테이블명] MODIFY [컬럼명] [제약조건]

-- 제약조건 지정(이름o)
ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건명] [제약조건](컬럼명)

-- 제약조건 삭제
ALTER TABLE [테이블명] DROP CONSTRAINT [제약조건명]

[ INDEX ]

-- 인덱스명 변경
ALTER INDEX [ IF EXISTS ] 이름 RENAME TO 새이름

-- 해당 인덱스의 저장 위치를 지정한 테이블스페스로 바꾸기
ALTER INDEX [ IF EXISTS ] 이름 SET TABLESPACE 테이블스페이스이름

--변경하려는 인덱스에 하위 인덱스를 추가
ALTER INDEX 이름 ATTACH PARTITION 인덱스이름

DROP

[ TABLE ]

-- 테이블과 테이터 삭제
DROP TABLE 테이블명;

-- 제약조건까지 삭제
DROP TABLE 테이블명 CASCADE CONSTRAINTS;

-- 삭제한 테이블을 휴지통에 넣지 않고 삭제
DROP TABLE 테이블명 PURGE;

-- 테이블, 데이터, 제약조건 바로 삭제
DROP TABLE 테이블명 CASCADE CONSTRAINTS PURGE;

[ INDEX ]

DROP INDEX emp_idx01

[ VIEW ]

DROP VIEW 이름;

'DataBase' 카테고리의 다른 글

[SQL] JOIN ON, WHERE 차이  (0) 2023.03.21
[SQL] 기본 함수  (0) 2023.03.21
[DB] SQL 구문 순서, 실행 순서  (0) 2023.03.20
[SQL] JOIN - 2  (0) 2023.03.20
[SQL] Join  (0) 2023.03.20