본문으로 바로가기

DDL(Data Define Language)

 - DB 구조, 데이터 형식, 접근 방식 등 DB을 구축하거나 수정할 목적으로 사용하는 언어

 - DDL에는 CREATE SCHEMA, CREATE DOMAIN, CREATE TABLE, CREATE VIEW, CREATE INDEX, ALTER TABLE, DROP 등이 있음

명령어 기능
CREATE SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의
ALTER TABLE에 대한 정의를 변경하는데 사용
DROP SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 삭제

CREATE SCHEMA

 - 스키마를 정의하는 명령문

 - 스키마의 식별을 위해 스키마 이름과 소유권자나 허가권자를 정의


CREATE DOMAIN

 - 도메인을 정의하는 명령문

 - 임의의 속성에서 취할 수 있는 값의 범위가 SQL에서 지원하는 전체 데이터 타입의 값이 아니고 일부분일 때, 사용자는 그 값의 범위를 도메인으로 정의할 수 있음

 - 정의된 도메인명은 일반적인 데이터 타입처럼 사용


CREATE TABLE

 - 테이블을 정의하는 명령문

 - 기본 테이블에 포함될 모든 속덩에 대하여 속성명과 그 속성의 데이터 타입, 기본 값, NOT NULL 여부를 지정

 - UNIQUE : 대체키로 사용할 속성 또는 속성의 집합을 지정하는 것으로 UNIQUE로 지정한 속성은 중복된 값을 가질 수 없음

 - FOREIGN KEY ~ REFERENCES ~

   - 참조할 다른 테이블과 그 테이블을 참조할 때 사용할 외래키 속성을 지정

   - 외래키가 지정되면 참조 무결성의 CASCADE법칙이 적용

   - ON DELETE 옵션 : 참조 테이블의 튜플이 삭제되었을 때 기본 테이블에 취해야 할 사항을 지정, 옵션에는 NO ACTION, CASCADE, SET NULL, SET DEFAULT가 있음

   - ON UPDATE 옵션 : 참조 테이블의 참조 속성 값이 변경되었을 때 기본 테이블에 취해야 할 사항을 지정, 옵션에는 NO ACTION, CASCADE, SET NULL, SET DEFAULT가 있음

   ※ NO ACTION : 참조 테이블에 변화가 있어도 기본 테이블에는 아무런 조취를 취하지 않음

   ※ CASCADE : 참조 테이블의 튜플이 삭제되면 기본 테이블의 관련 튜플도 모두 삭제되고 속성이 변경되면 관련 튜플의 속성 값도 모두 변경

   ※ SET NULL : 참조 테이블에 변화가 있으면 기본 테이블의 관련 튜플의 속성 값을 NULL로 변경

   ※ SET DEFAULT : 참조 테이블에 변화가 있으면 기본 테이블의 관련 튜플의 속성 값을 기본값으로 변경

 - CONSTRAINT : 제약 조건의 이름을 지정

 - CHECK : 속성 값에 대한 제약 조건을 정의


CREATE VIEW

 - 뷰를 정의하는 명령문


CREATE INDEX

 - 인덱스를 정의하는 명령문

 - UNIQUE

   - 사용된 경우 : 중복 값이 없는 속성으로 인덱스를 생성

   - 생략된 경우 : 중복 값을 허용하는 속성으로 인덱스를 생성

 - 정렬 여부 지정

   - ASC : 오름차순

   - DESC : 내림차순

   - 생략된 경우 : 오름차순으로 정렬

 - CLUSTER : 사용하면 인덱스가 클러스터드 인덱스로 설정


ALTER TABLE

 - 테이블에 대한 정의를 변경하는 명령문

 - ADD : 새로운 속성(열)을 추가할 때 사용

 - ALTER : 특정 속성의 Default 값을 변경할 때 사용

 - DROP COLUMN : 특정 속성을 삭제할 때 사용


DROP

 - 스키마, 도메인, 기본 테이블, 뷰 테이블, 인덱스, 제약 조건 등을 제거하는 명령문

 - CASCADE : 제거할 요소를 참조하는 다른 모든 개체를 함께 제거, 즉 주 테이블의 데이터 제거 시 각 외래키와 관계를 맺고 있는 모든 데이터를 제거하는 참조 무결성 제약 조건을 설정하기 위해 사용

 - RESTRICTED : 다른 개체가 제거할 요소를 참조중일 때는 제거를 취소


DCL(Data Control Languate)

 - 데이터의 보안, 무결성, 회복, 병행 제어 등을 정의하는데 사용하는 언어

 - DCL은 데이터베이스 관리자(DBA)가 데이터 관리를 목적으로 사용

 - DCL에는 GRANT, REVOKE, COMMIT, ROLLBACK, SAVEPOINT 등이 있음

명령어 기능
COMMIT 명령에 의해 수행된 결과를 실제 물리적 디스크로 저장하고 데이터베이스 조작 작업이 정상적으로 완료되었음을 관리자에게 알려줌
ROLLBACK 데이터베이스 조작 작업이 비정상적으로 종료되었을때 원래의 상태로 복구
GRANT 데이터베이스 사용자에게 사용 권한을 부여
REVOKE 데이터베이스 사용자의 사용 권한을 취소

GRANT / REVOKE

 - 데이터베이스 관리자가 데이터베이스 사용자에게 권한을 부여하거나 취소하기 위한 명령어

 - GRANT : 권한 부여를 위한 명령어

 - REVOKE : 권한 취소를 위한 명령어

 - 사용자등급 지정 및 해제

 - GRANT OPTION FOR : 다른 사용자에게 권한을 부여할 수 있는 권한을 취소

 - CASCADE : 권한 취소 시 권한을 부여받았던 사용자가 다른 사용자에게 부여한 권한도 연쇄적으로 취소


COMMIT

 - 트랜잭션이 성공적으로 끝나면 데이터베이스가 새로운 일관성 상태를 가지기 위해 변경된 모든 내용을 데이터베이스에 반영하여야 하는데 이때 사용하는 명령이 COMMIT

 - COMMIT 명령을 실행하지 않아도 DML문이 성공적으로 완료되면 자동으로 COMMIT되고 DML이 실패하면 자동으로 ROLLBACK이 되도록 Auto Commit기능을 설정할 수 있음


ROLLBACK

 - 아직 COMMIT되지 않은 변경된 모든 내용들을 취소하고 데이터베이스를 이전 상태로 되돌리는 명령어

 - 트랜잭션 전체가 성공적으로 끝나지 못하면 일부 변경된 내용만 데이터베이스에 반영되는 비일관성인 상태를 가질 수 있기 때문에 일부분만 완료된 트랜잭션은 롤백되어야 함


SAVEPOINT

 - 트랜잭션 내에 ROLLBACK 할 위치인 저장점을 지정하는 명령어

 - 저장점을 지정할 때는 이름을 부여하고, ROLLBACK 시 지정된 저장점까지의 트랜잭션 처리 내용이 취소됨


DML(Data Manipulation Language)

 - 데이터베이스 사용자가 응용 프로그램이나 질의어를 통해 저장된 데이터를 실질적으로 관리하는데 사용되는 언어

 - 데이터베이스 사용자와 데이터베이스 관리 시스템 간의 인터페이스를 제공

명령문 기능
SELECT 테이블에서 튜플을 검색
INSERT 테이블에 새로운 튜플을 삽입
DELETE 테이플에서 튜플을 삭제
UPDATE 테이블에서 튜플의 내용을 갱신

삽입문(INSERT INTO~)

 - 기본 테이블에 새로운 튜플을 삽입할 때 사용

 - 대응하는 속성과 데이터는 개수와 데이터 유형이 일치해야 함

 - 기본 테이블의 모든 속성을 사용할 때는 속성명을 생략할 수 있음

 - SELECT문을 사용하여 다른 테이블의 검색 결과를 삽입할 수 있음


삭제문(DELETE FROM~)

 - 기본 테이블에 있는 튜플들 중에서 특정 튜플(행)을 삭제할 때 사용

 - 모든 레코드를 삭제할 때는 WHERE절을 생략

 - 모든 레코드를 삭제하더라도 테이블 구조는 남아 있기 때문에 디스크에서 테이블을 완전히 제거하는 DROP과는 다름


갱신문(UPDATE~SET~)

 - 기본 테이블에 있는 튜플들 중에서 특정 튜플의 내용을 변경할때 사용


SELECT절

 - PREDICATE : 불러올 튜플 수를 제한할 명령어를 기술

   - ALL : 모든 튜플을 검색할때 지정하는 것으로 주로 생략

   - DISTINCT : 중복된 튜플이 있으면 그 중 첫 번째 한 개만 검색

   - DISTINCTROW : 중복된 튜플을 제거하고 한 개만 검색하지만 선택된 속성의 값이 아닌 튜플 전체를 대상으로 함

 - 속성명 : 검색하여 불러올 속성(열) 또는 속성을 이용한 수식을 지정

   - 기본 테이블을 구성하는 모든 속성을 지정할때는 *를 기술

   - 두 개 이상의 테이블을 대상으로 검색할 때는 테이블명.속성명으로 표현

 - 그룹함수 : GROUP BY절에 지정된 그룹별로 속성의 값을 집계할 함수를 기술

 - WINDOW 함수 : GROUP BY절을 이용하지 않고 속성의 값을 집계할 함수를 기술

    - PARTITION BY : WINDOW 함수가 적용될 범위로 사용할 속성을 지정

    - ORDER BY : PARTITION 안에서 정렬 기준으로 사용할 속성을 지정

 - GROUP BY절 : 특정 속성을 기준으로 그룹화하여 검색할때 사용

 - HAVING절 : GROUP BY와 함께 사용되며, 그룹에 대한 조건을 지정


병행제어

 - 다중 프로그램의 이점을 활요하여 동시에 여러개의 트랜잭션을 병행수행할때 동시에 실행되는 트랜잭션들이 데이터베이스의 일관성을 파괴하지 않도록 트랜잭션 간의 상호작용을 제어하는 것


병행제어의 목적

 - 데이터베이스의 공유를 최대화

 - 시스템의 활용도를 최대화

 - 데이터베이스의 일관성을 유지

 - 사용자에 대한 응답시간을 최소화


병행수행의 문제점

 - 갱신 분실 : 두 개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할때 갱신 결과의 일부가 없어지는 현상

 - 비완료 의존성(임시 갱신) : 하나의 트랜잭션 수행이 실패한 후 회복되기 전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상

 - 모순성(불일치 분석) : 두 개의 트랜잭션이 병행수행될때 원치 않는 자료를 이용함으로써 발생하는 문제

 - 연쇄 복귀 : 병행수행되던 트랜잭션들 중 어느 하나에 문제가 생겨 Rollback하는 경우 다른 트랜잭션도 함께 Rollback되는 현상


로킹

 - 병행제어 기법 중 하나로 주요 데이터의 액세스를 상호 배타적으로 하는 것


로킹 단위

 - 로킹 단위는 병행제어에서 한꺼번에 로킹할 수 있는 객체의 크기를 의미

 - 데이터베이스, 파일, 레코드, 필드 등은 로킹 단위가 될 수 있음

 - 로킹 단위가 크면 로크 수가 작아 관리하기 쉽지만 병행성 수준이 낮아지고 데이터베이스 공유도가 저하

   (로킹 단위가 크다 -> 로크의 수가 적어진다 -> 제어 기법이 간단해 진다 -> 병행성이 감소한다)

 - 로킹 단위가 작으면 로크 수가 많아 관리하기 복잡해 오버헤드가 증가하지만 병행성 수준이 높아지고 데이터베이스 공유도가 증가

   (로킹 단위가 작다 -> 로크의 수가 많아진다 -> 제어 하기 까다롭다 -> 병행성이 증가한다)