[데이터베이스 구축] SQL 개요 및 DDL - 테이블 생성

이도연·2024년 6월 13일

정보처리기사

목록 보기
20/21

SQL(Structured Query Language)

  • DB 를 조작하여 원하는 자료를 추출하거나 필요한 데이터를 추가, 삭제, 수정하기 위한 비절차적 프로그래밍 언어
  • 관계형 DB 를 조작
  • 관계 대수와 관계 해석을 기초로 한 혼합 데이터 언어




SQL 명령어 분류

데이터정의어(DDL)

스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 변경/제거 시 사용

CREATE - DB, 테이블, 뷰 생성
ALTER - DB, 테이블 구조 변경
DROP - DB, 테이블, 뷰 삭제

데이터조작어(DML)

테이블 내 레코드 추가, 제거, 변경, 검색

SELECT - 테이블에서 필요한 레코드 검색
INSERT - 테이블에 새로운 레코드 추가
DELETE - 테이블에서 레코드 삭제
UPDATE - 테이블에서 레코드 일부분 변경

데이터제어어(DCL)

DB 보안, 무결성을 유지하기 위한 언어

GRANT - 권한부여명령
REVOKE - 권한회수(박탈)명령

ex) GRANT CONNECT TO LEVEL2; -> 사용자 ID 'LEVEL 2' 에게 일반권한 부여




데이터정의어(DDL) - CREATE

1. 스키마 정의 / 설정

스키마의 식별을 위한 스키마 이름과 해당 스키마의 소유권자 혹 허가권자 정의

CREATE SCHEMA AUTHORIZATION

2. 도메인 정의

테이블을 담을 DB 를 먼저 생성한다.

CREATE DATABASE Company;
USE Company;

3. 테이블 정의

CREATE TABLE 테이블명 (
	필드명 타입 옵션
    ...
);
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    birth_date DATE,
    hire_date DATE,
    job_title VARCHAR(100),
    salary DECIMAL(15, 2),
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

UNIQUE : 유일성 제약 조건. 열의 모든 값이 고유
CHECK : 특정 조건을 만족해야 합니다.
DEFAULT : 기본값을 설정합니다.
AUTO_INCREMENT: 새로운 행이 추가될 때 자동으로 증가하는 값을 할당



옵션사항

NO ACTION
부모 테이블의 데이터가 변경될 때 자식 테이블에서 아무런 동작하지 않음.
DB 시스템에서 부모 테이블의 데이터가 변경될 수 없는 경우에 이 옵션을 사용

CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(100)
);

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE NO ACTION ON UPDATE NO ACTION
);

CASCADE
부모 테이블의 데이터가 변경되면 자식 테이블의 데이터도 자동으로 변경.
예를 들어, 부모 테이블의 행이 삭제되면 자식 테이블의 해당 행도 삭제됨.

CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(100)
);

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE CASCADE ON UPDATE CASCADE
);

SET NULL
부모 테이블의 데이터가 변경되면 자식 테이블의 외래 키 값을 NULL로 설정

CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(100)
);

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE SET NULL ON UPDATE SET NULL
);

SET DEFAULT
부모 테이블의 데이터가 변경되면 자식 테이블의 외래 키 값을 미리 정의된 기본값으로 설정

CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(100)
);

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    department_id INT DEFAULT 1,
    FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE SET DEFAULT ON UPDATE SET DEFAULT
);




RESTRICTED
삭제할 요소를 다른 개체에서 참조하고 있으면, 삭제하지 못함.

COMMIT
트랜잭션이 성공적으로 끝나면 DB 가 새로운 일관성 상태를 가지기 위해, 수행된 모든 변경을 DB 에 반영하여 완료(COMMIT)해야 함.

ROLLBACK
트랜잭션의 일부 작업을 성공적으로 끝내지 못하면 DB 가 비일관성인 상태를 가질 수 있기 때문에, 일부만 완료된 부분은 ROLLBACK 되어야 함.

WITH GRANT OPTION
부여된 권한을 다른 사용자에게 다시 부여할 수 있는 권리

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

SAVEPOINT
트랜잭션 내 ROLLBACK 할 위치인 저장점 지정 명령어

0개의 댓글