1. 관계형 데이터베이스 개요
데이터베이스 (Database)
데이터베이스는 관련된 데이터들을 체계적으로 저장하고 관리할 수 있도록 구성된 데이터의 집합
DBMS (데이터베이스 관리 시스템)
데이터베이스를 관리하기 위한 소프트웨어 시스템
DBMS는 사용자와 데이터베이스 간의 인터페이스 역할을 하며, 데이터의 저장, 검색, 수정, 삭제 등을 수행
- 데이터 정의: 데이터베이스 스키마를 생성, 수정, 삭제할 수 있다.
- 데이터 조작: 데이터 삽입, 수정, 삭제, 검색 (crud)
- 데이터 보안: 데이터 접근 권한을 관리, 민감한 정보 보호 (사용자 접근 차단)
- 데이터 무결성: 데이터가 정확하고 일관성이 유지되게 함.
- 트랜잭션 관리: 여러 작업이 동시에 수행될 때 데이터의 일관성을 유지하고, 시스템 장애가 발생했을 때 데이터를 복구함
SQL (Structured Query Language)
관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 정의, 조작, 제어하기 위해 사용되는 표준화된 프로그래밍 언어
- DDL (Data Definition Language): 데이터베이스 스키마를 생성, 변경, 삭제하기 위한 명령어
- DML (Data Manipulation Language): 데이터를 검색, 삽입, 수정, 삭제하기 위한 명령어
- DCL (Data Control Language): 데이터베이스 사용자의 권한을 관리하기 위한 명령어
- TCL (Transaction Control Language): 데이터베이스 트랜잭션을 관리하기 위한 명령어
- DDL (데이터 정의어)
-> 테이블의 구조를 정의하는 명령어
데이터베이스 테이블
테이블의 구성요소
- 행 (Row): 행은 데이터베이스 테이블에서 개별 레코드
- 열 (Column): 열은 데이터베이스 테이블에서 특정 속성. 각 열은 이름과 데이터 타입을 가지며, 제약 조건이나 기본값 등 추가 속성 설정가능
- 기본 키 (Primary Key): 기본 키는 테이블에서 각 행을 고유하게 식별하는 열입니다. 기본 키로 설정된 열은 NULL 값을 가질 수 없고, 각 행에 대해 고유한 값을 가져야 합니다.
- 외래 키 (Foreign Key): 외래 키는 다른 테이블의 기본 키를 참조하는 열입니다. 외래 키를 사용하면 서로 다른 테이블 간의 관계를 정의하고, 데이터 무결성을 유지할 수 있습니다.
2. DDL
CREATE TABLE문
- 주요 데이터 타입
CREATE TABLE employees (
employee_id NUMBER(6) PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25) NOT NULL UNIQUE,
phone_number VARCHAR2(15),
hire_date DATE NOT NULL,
job_id VARCHAR2(10) NOT NULL,
salary NUMBER(8, 2),
commission_pct NUMBER(2, 2),
manager_id NUMBER(6),
department_id NUMBER(4)
);
테이블 이름 생성 규칙
- 유효한 문자 사용: 테이블 이름은 알파벳, 숫자, 밑줄(_)로 구성되어야 합니다. 특수 문자나 공백을 사용하지 않는 것이 좋습니다.
- 첫 글자: 테이블 이름은 알파벳 문자로 시작해야 합니다. 숫자나 밑줄로 시작하는 이름은 피하세요.
- 길이 제한: 테이블 이름은 일반적으로 길이 제한이 있습니다. 이 제한은 데이터베이스 시스템마다 다르지만, 일반적으로 30자 이내의 길이로 제한됩니다.
- 의미 있는 이름 사용: 테이블 이름은 데이터를 담고 있는 내용을 명확하게 설명할 수 있도록 의미 있는 이름을 사용하세요. 축약어는 가능한 피하고, 전체 단어를 사용하는 것이 좋습니다.
- 단수/복수형 일관성: 테이블 이름에 단수형 또는 복수형을 사용할 때 일관성을 유지하세요. 팀 내에서 사용하는 규칙을 명확하게 정하고 따르는 것이 좋습니다.
- 예약어 피하기
제약조건
ALTER문
- 테이블에 열 추가, 수정, 삭제
- 제약 조건 추가, 수정, 삭제
ALTER TABLE employees ADD (middle_name VARCHAR2(20));
ALTER TABLE employees DROP COLUMN middle_name;
ALTER TABLE employees MODIFY (first_name VARCHAR2(30));
ALTER TABLE employees ADD CONSTRAINT emp_email_unique UNIQUE (email);
ALTER TABLE employees DROP CONSTRAINT emp_email_unique;
DROP TABLE, TRUNCATE TABLE, RENAME
DROP TABLE
- 데이터베이스에서 테이블을 완전히 삭제
-> 테이블의 구조, 인덱스, 제약 조건 등 모두 삭제
DROP TABLE employees;
RENAME
RENAME employees TO staff;
TRUNCATE TABLE
- TRUNCATE TABLE문은 테이블의 모든 데이터만 빠르게 삭제
-> 테이블의 구조, 인덱스, 제약 조건 등은 그대로 유지
TRUNCATE TABLE employees;