SQL : DDL

Vorhandenheit ·2021년 12월 16일
0

Database

목록 보기
3/28

DDL (Data Definition Language)

DDL 데이터 정의 언어로서 스키마 내의 객체를 관리할 때 사용합니다.

1.테이블 작성, 삭제, 변경

테이블은 데이터베이스 객체의 대표적 유형입니다.

(1) 테이블 작성

CREATE 명령어를 사용해서 작성할 수 있습니다.

CREATE TABLE 테이블명 (열 정의1, 열 정의2...)

(2) 테이블 삭제

DROP TABLE 테이블명

테이블 정의를 그대로 둔 채 , 데이터만 삭제할 때에는 DELETE를 사용합니다.

(3) 테이블 변경

ALTER TABLE 테이블명 변경명령

ALTER TABLE을 사용하면 테이블에 저장되어있는 데이터는 그대로 두고 구성만 변경할 수 있습니다.

  • A. 열 추가(ADD)

    ALTER TABLE 테이블명 ADD 열 정의

열의 이름이 중복되면 추가할 수 없습니다.

열을 추가하는 게 정의를 바꾸는 일인 만큼 영향을 줄 수 있습니다. 변경한 테이블에 행을 추가하는 INSERT 명령은 확인해야합니다. 열을 추가하면 열에 대해 데이터 값을 지정해야하기 때문입니다.

  • B. 열 속성 변경(MODIFY)

    ALTER TABLE 테이블명 MODIFY 열 정의

    EX) ALTER TABLE sample MODIFY newtable int(11)

자료형이나 기본값, NOT NULL 제약 등의 속성은 변경할 수 있습니다.

  • C. 열 이름 변경(CHANGE)

    ALTER TABLE 테이블명 CHANGE 기존열이름 신규 열정의

  • D. 열 삭제(DROP)

    ALTER TABLE 테이블명 DROP 열명

2. 제약

테이블에 제약을 설정함으로 저장될 데이터를 제한할 수 있습니다. 제약에는 NOT NULL , Primary KEY(기본키 제약), 외부참조(정합) 제약 등이 있습니다.

(1) 테이블 작성시 제약 정의

  • 테이블 열에 제약 정의
CREATE TABLE sample (
	a INTEGER NOT NULL // NOT NULL 제약
  	b INTERGER NOT NULL UNIQUE // NOT NULL UNIQUE 제약
)
  • 테이블 제약
CREATE TABLE sample (
	no INTERGER NOT NULL, 
  	sub_no INTERGET NOT NULL, 
  	CONSTRAINT pkey_sample PRIMARY KEY (no, sub_no)
) // 테이블 제약(복수의 열에 제약) (이름은 CONSTRAINT)

하나의 열이 아니라 복수의 열에 제약할 경우 '테이블'제약이라고 합니다.
제약에 이름을 붙이면 나중에 관리하기 쉬워지는 가능한 이름을 붙여야합니다.

(2) 제약 추가

  • 열 제약 추가
ALTER TABLE sample MODIFY c INT(10) NOT NULL;
  • 테이블 제약 추가
ALTER TABLE sample CONSTRANIT sample PRIMARY KEY(a)

기본키는 테이블에 하나만 설정할 수 있습니다.

(3) 제약 삭제

  • 열 제약 삭제
ALTER TABLE sample MODIFY c int(10)

NOT NULL을 제거하고자 한다면 열 정의 변경으로 없앨 수 있습니다.

  • 테이블 제약 삭제
ALTER TABLE sample DROP CONSTRAINT pkey_sample
// DROP 하부명령으로 삭제할 수 있습니다

(4) 기본키

기본키는 테이블의 행 한 개를 특정할 수 있는 검색 키입니다.
그렇기 때문에 기본키 제약이 설정된 열에는 중복된 값을 저장할 수 없습니다.
INSER INTO UPDATE 모두 실행되지 않습니다.

3. 인덱스

'색인'이라고 불리는 인덱스는 데이터베이스 객체 중 하나입니다. 인덱스는 테이블에 붙여진 색인이라 할 수 있습니다.
인덱스는 색인을 붙임으로 검색속도를 향상시킵니다. 여기서 '검색'은 SELECT 명령에 WHERE 구로 조건을 지정하고 일치하는 행을 찾는 걸 말합니다.
인덱스는 이진 탐색과 비슷해 훨씬 빨리 행을 찾을 수 있습니다.

1. 인덱스 작성과 삭제

인덱스는 DDL을 사용하여 작성하거나 삭제합니다.

CREATE INDEX
DROP INDEX

(1) 인덱스 작성

CREATE INDEX 인덱스명 ON 테이블명 (열명1, 열명2...)

CREATE INDEX sample ON sample1(no)

(2) 인덱스 삭제

DROP INDEX 인덱스명 ON 테이블명

2. EXPLAIN

인덱스를 사용해 검색하는지 확인하려면 EXPLAIN 명령을 사용합니다.

EXPLAIN SQL 명령

EXPLAIN SELECT * FROM sample WHERE no 1
이 SQL 명령은 실제로 실행되ㅣㅈ않고 어떤 상태로 실행되는지 데이터베이스가 설명해줄 뿐입니다.

4. 뷰

뷰 역시 데이터베이스 객체 중 하나입니다. 반면에 SELECT 명령은 객체가 아니라 명령에 이름을 지정할 수 도 없고 데이터베이스에 등록할 수도 없습ㄴ다.
이렇게 지정할수 없고 등록할 수 없는 SELECT 명령을 객체로서 이름을 붙여 관리할 수 있도록 한 것이 뷰입니다.
SELECT 명령을 실행했을 때 테이블에 저장된 데이터를 결괏값으로 반환합니다.

1. 뷰 작성과 삭제

(1) 뷰 작성

CREATE VIEW 뷰명 AS SELECT 명령

CREATE VIEW sample AS SELECT FROM sample1
SELECT
FROM sample

CREATE VIEW를 작성한 뒤 SELECT 명령의 FROM 구에 지정해 사용할 수 있습니다.

(2) 뷰 삭제

DROP VIEW 뷰명

2. 뷰의 약점

뷰는 데이터베이스 객체로서 저장공간을 소비하지않는 대신 CPU 자원을 사용합니다.
그렇기 떄문에 뷰의 근원이 되는 테이블에 보관하는 데이터양이 많은 경우, 집계처리 할때도 뷰가 사용된다면 처리속도가 떨어질수 밖에 없습니다.(중첩해서 사용할 때도)
이러한 상황에 회피하기 위해 사용할 수 있는게 머티리얼라이즈드 뷰입니다. (Materialized View)

  • 머티리얼라이즈드 뷰
    데이터를 일시적으로 저장해 사용하는게 아니라 테이블처럼 저장 장치에 저장해두고 사용합니다.
    처음 참조되었을 때 데이터를 저장해두고, 다시 참조할 때 저장해두었던 데이터를 그대로 사용합니다.

또 부모쿼리와 어떤 식으로든 연관된 서브쿼리의 경우에는 뷰의 SELECT 명령으로 사용할 수 없습니다. 이러한 경우는 함수 테이블을 사용하여 회피할 수 있습니다.

profile
읽고 기록하고 고민하고 사용하고 개발하자!

0개의 댓글