ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알면 좋은 ☺️ 데이터베이스(DB) 핵심 개념 정리
    기타 2026. 7. 1. 00:19

    데이터베이스 핵심 개념 완전 정리

    프론트엔드 개발자라도 DB 구조를 이해하면 API 설계, 쿼리 최적화, 데이터 모델링 논의에서 훨씬 대화가 수월해진다.

    이 글은 관계형 DB의 핵심 개념을 빠르게 짚어보는 정리본이다.


    1. 릴레이션 기본 용어

    릴레이션(Relation) = 테이블. 행과 열로 구성된 2차원 구조.

    용어 다른 이름 의미
    튜플 행(Row), 레코드 릴레이션의 한 행
    속성 열(Column), 애트리뷰트 릴레이션의 한 열
    카디널리티 - 튜플(행)의
    차수 디그리(Degree) 속성(열)의
    도메인 - 하나의 속성이 가질 수 있는 값의 집합
    릴레이션 스키마 - 릴레이션의 구조 (이름 + 속성 목록)
    릴레이션 인스턴스 - 어느 시점의 실제 데이터 전체

     

    암기 팁: 카디널리티 = 행 수(Card처럼 세는 것), 디그리 = 열 수


    2. 키(Key) 종류

    릴레이션에서 튜플을 식별하거나 참조하기 위한 속성(집합).

    핵심 개념: 유일성 vs 최소성

    • 유일성 — 각 튜플을 고유하게 식별할 수 있어야 한다.
    • 최소성 — 꼭 필요한 속성만으로 구성되어야 한다(불필요한 속성 포함 X).

    키 종류 요약

    유일성 최소성 설명
    슈퍼키 유일성만 만족. 속성 조합이 더 많아도 OK
    후보키 기본키가 될 수 있는 모든 키
    기본키(PK) 후보키 중 대표로 선정. NULL 불가, 중복 불가
    대체키 후보키 중 기본키로 선택되지 않은 나머지
    외래키(FK) 다른 테이블의 기본키를 참조하는 속성. NULL 허용

     

    관계: 슈퍼키 ⊃ 후보키 ⊃ 기본키 / 대체키


    3. 무결성 제약조건

    데이터의 정확성과 일관성을 보장하는 규칙.

    무결성 설명
    개체 무결성 기본키는 NULL이거나 중복값을 가질 수 없다
    참조 무결성 외래키 값은 NULL이거나, 참조 테이블의 기본키 값과 동일해야 한다
    도메인 무결성 속성 값은 정의된 도메인 범위 내의 값이어야 한다
    NULL 무결성 특정 속성이 NULL이 되면 안 된다고 지정한 경우
    고유 무결성 특정 속성은 모든 튜플에서 고유한 값을 가져야 한다
    키 무결성 릴레이션에 최소 하나의 키가 존재해야 한다

     

    자주 나오는 것: 개체 무결성, 참조 무결성 → 이 두 개를 확실히.


    4. 정규화

    데이터 중복을 줄이고 이상(Anomaly)을 방지하기 위해 테이블을 무손실 분해하는 과정.

    암기 키워드: 도부이결다조

    정규형 조건 제거 대상
    1NF 도메인이 원자값 반복 그룹, 다중값 속성
    2NF 1NF + 부분 함수 종속 제거 복합 기본키의 일부에만 종속된 속성
    3NF 2NF + 이행 함수 종속 제거 A→B, B→C 형태의 간접 종속
    BCNF 3NF + 결정자이면서 후보키가 아닌 것 제거 비후보키 결정자
    4NF BCNF + 다치 종속 제거 A→→B 형태의 독립적 다중값
    5NF 4NF + 조인 종속 이용 조인으로 복원 불가한 분해

    함수적 종속 (Functional Dependency)

    X → Y : X의 값이 결정되면 Y의 값이 유일하게 결정됨
    • 완전 함수 종속 — 기본키 전체에 종속 (X 전체가 필요)
    • 부분 함수 종속 — 기본키의 일부에 종속 → 2NF에서 제거
    • 이행 함수 종속 — X→Y, Y→Z이면 X→Z → 3NF에서 제거

    반정규화 (De-normalization)

    정규화를 의도적으로 위배해 성능을 높이는 기법.

    • 성능 ↑, 관리 효율성 ↑
    • 데이터 일관성·정합성 ↓ (트레이드오프)
    • 방법: 테이블 통합/분할, 중복 테이블·속성 추가

    5. 이상(Anomaly)

    정규화가 덜 된 테이블에서 데이터 조작 시 발생하는 부작용.

    이상 발생 상황 설명
    삽입 이상 INSERT 원하는 데이터만 삽입할 수 없고 불필요한 데이터까지 같이 넣어야 함
    삭제 이상 DELETE 특정 데이터를 삭제하면 의도하지 않은 다른 데이터도 함께 삭제됨
    갱신 이상 UPDATE 중복된 데이터 중 일부만 수정되어 데이터 불일치(모순) 발생

     

    발생 원인: 릴레이션 내 데이터 중복 → 정규화로 해결.


    6. 스키마

    데이터베이스의 구조와 제약조건에 관한 전반적인 명세.

    스키마 관점 설명
    외부 스키마 사용자/응용 프로그램 각 사용자가 필요로 하는 논리적 구조. 여러 개 존재 가능
    개념 스키마 조직 전체 전체 DB의 논리적 구조. 하나만 존재
    내부 스키마 물리적 저장장치 실제 저장 형식, 구조, 물리적 순서

     

    DB 설계 순서: 요구조건 분석 → 개념적 설계 → 논리적 설계 → 물리적 설계 → 구현


    7. 트랜잭션 (ACID)

    데이터베이스에서 하나의 논리적 작업 단위. 완전히 실행되거나, 전혀 실행되지 않아야 한다.

    ACID 특성

    특성 영문 핵심
    원자성 Atomicity 전부 성공 or 전부 실패. (Commit / Rollback)
    일관성 Consistency 트랜잭션 전후로 DB가 일관된 상태를 유지
    독립성 Isolation 동시에 실행되는 트랜잭션은 서로 간섭 불가
    지속성 Durability 완료된 트랜잭션 결과는 장애 후에도 영구 보존

    TCL (Transaction Control Language)

    COMMIT;       -- 트랜잭션 결과를 DB에 영구 반영
    ROLLBACK;     -- 트랜잭션 이전 상태로 되돌림
    SAVEPOINT sp; -- 특정 지점 저장 (부분 롤백 가능)
    ROLLBACK TO sp;

    8. 병행 제어와 회복

    병행 제어 (Concurrency Control)

    여러 트랜잭션이 동시에 실행될 때 DB 일관성을 유지하는 기법.

    기법 설명
    로킹 (Locking) 자원에 접근하기 전 잠금(Lock) 설정. 허락된 트랜잭션만 접근 가능
    타임스탬프 트랜잭션마다 고유한 타임스탬프 부여, 순서 보장
    낙관적 검증 일단 수행 후, 종료 시점에 충돌 검증

    로킹 단위: 크면 → Lock 수 ↓, 관리 쉬움, 병행성 ↓ / 작으면 → Lock 수 ↑, 오버헤드 ↑, 병행성 ↑

    회복 기법 (Recovery)

    트랜잭션 도중 오류 발생 시 DB를 정상 상태로 복구.

    기법 설명
    즉시 갱신 수행 중에도 변경 내용을 즉시 DB에 반영
    지연 갱신 Commit 전까지 로그에만 저장, Commit 시 반영
    검사시점 (Checkpoint) 체크포인트 이후 트랜잭션만 회복 대상
    그림자 페이지 현재 페이지 테이블 + 그림자 페이지 테이블 이중 관리
    • REDO — 재수행 (이미 commit된 것을 다시 실행)
    • UNDO — 취소 (commit되지 않은 것을 되돌림)

    9. SQL 문법 정리

    DDL (Data Definition Language) — 구조 정의

    -- 테이블 생성
    CREATE TABLE 학생 (
      학번 INT PRIMARY KEY,
      이름 VARCHAR(20) NOT NULL,
      학년 INT
    );
    
    -- 컬럼 추가 / 수정 / 삭제 (COLUMN 키워드 주의)
    ALTER TABLE 학생 ADD 이메일 VARCHAR(50);
    ALTER TABLE 학생 MODIFY 이름 VARCHAR(30);
    ALTER TABLE 학생 DROP COLUMN 이메일;   -- DROP만 쓰면 테이블 삭제, COLUMN 키워드 필수!
    
    -- 테이블 삭제
    DROP TABLE 학생;            -- 테이블 자체 삭제
    DROP TABLE 학생 CASCADE;    -- 참조하는 테이블까지 함께 삭제
    DROP TABLE 학생 RESTRICT;   -- 참조 중이면 삭제 거부
    
    -- 데이터만 삭제 (구조 유지)
    TRUNCATE TABLE 학생;

    삭제 명령어 비교 — DROP vs TRUNCATE vs DELETE

    명령어 분류 구조 데이터 롤백 속도
    DROP DDL 삭제 삭제 ❌ 불가 빠름
    TRUNCATE DDL 유지 전체 삭제 ❌ 불가 빠름
    DELETE DML 유지 조건부 삭제 ✅ 가능 느림

    DELETE는 WHERE 조건으로 선택 삭제 가능하고 ROLLBACK도 된다. TRUNCATE는 빠르지만 되돌릴 수 없다.

    DML (Data Manipulation Language) — 데이터 조작

    -- 조회
    SELECT [DISTINCT] 속성명
    FROM 테이블명
    WHERE 조건
      -- 범위: BETWEEN A AND B
      -- 패턴: LIKE '패턴%'
      -- NULL 체크: IS NULL / IS NOT NULL
      -- 목록: IN (값1, 값2)
    GROUP BY 속성명
    HAVING 그룹조건
    ORDER BY 속성명 [ASC | DESC];
    
    -- 삽입
    INSERT INTO 학생 (학번, 이름) VALUES (1001, '홍길동');
    
    -- 수정
    UPDATE 학생 SET 학년 = 3 WHERE 학번 = 1001;
    
    -- 삭제
    DELETE FROM 학생 WHERE 학번 = 1001;

    DCL (Data Control Language) — 권한 제어

    -- 권한 부여
    GRANT SELECT, INSERT ON 학생 TO kim, lee;
    
    -- 다른 사람에게도 권한을 줄 수 있는 권한까지 부여
    GRANT ALL ON 학생 TO 홍길동 WITH GRANT OPTION;
    
    -- 권한 회수
    REVOKE SELECT, INSERT ON 학생 FROM lee;
    
    -- "권한을 줄 수 있는 권한"만 빼앗기 (데이터 접근권은 유지)
    REVOKE GRANT OPTION FOR SELECT ON 수강 FROM 박문수;
    
    -- CASCADE: 해당 사용자가 부여한 권한도 연쇄적으로 회수
    REVOKE SELECT ON 수강 FROM 박문수 CASCADE;

    WITH GRANT OPTION: 권한을 받은 사용자가 그 권한을 다시 다른 사용자에게 부여할 수 있게 해주는 옵션.

    집계 함수 + GROUP BY

    -- 과목별 최고/최저/평균 점수 (평균 90 이상인 과목만)
    SELECT 과목, MAX(점수), MIN(점수), AVG(점수)
    FROM 성적
    GROUP BY 과목
    HAVING AVG(점수) >= 90;

    WHERE vs HAVING: WHERE는 행 필터링(그룹 전), HAVING은 그룹 필터링(그룹 후)

    절차형 SQL

    -- 프로시저 (Procedure): 반환값 없음, 비즈니스 로직 처리
    CREATE PROCEDURE 프로시저명(IN param1 INT)
    BEGIN
      -- 처리 로직
    END;
    
    -- 함수 (Function): 반환값 있음
    CREATE FUNCTION 함수명(param1 INT) RETURNS INT
    BEGIN
      RETURN param1 * 2;
    END;
    
    -- 트리거 (Trigger): 이벤트(INSERT/UPDATE/DELETE) 발생 시 자동 실행
    CREATE TRIGGER 트리거명
    AFTER INSERT ON 학생
    FOR EACH ROW
    BEGIN
      -- 자동 실행 로직
    END;

    10. JOIN 완전 정리

    종류 요약

    JOIN 설명
    INNER JOIN 양쪽 테이블에 모두 존재하는 행만 반환
    LEFT OUTER JOIN 왼쪽 테이블 전체 + 오른쪽 일치 행 (없으면 NULL)
    RIGHT OUTER JOIN 오른쪽 테이블 전체 + 왼쪽 일치 행 (없으면 NULL)
    FULL OUTER JOIN 양쪽 테이블 전체 (없으면 NULL)
    CROSS JOIN 두 테이블의 모든 행 조합 (카티전 곱)
    SELF JOIN 자기 자신과 조인 (별칭 필수)
    NATURAL JOIN 동일 이름의 열을 기준으로 자동 조인 (ON 절 불필요)

    코드 예시

    -- INNER JOIN
    SELECT * FROM A INNER JOIN B ON A.id = B.id;
    
    -- LEFT OUTER JOIN
    SELECT * FROM A LEFT OUTER JOIN B ON A.id = B.id;
    
    -- CROSS JOIN
    SELECT * FROM A CROSS JOIN B;
    
    -- SELF JOIN (같은 테이블을 두 번 사용)
    SELECT A1.name, A2.name AS manager
    FROM 직원 A1 INNER JOIN 직원 A2 ON A1.mgr_id = A2.id;

    11. 인덱스 / 뷰 / 시스템 카탈로그

    인덱스 (Index)

    검색 속도를 높이기 위한 별도의 데이터 구조. 테이블 삭제 시 함께 삭제됨.

    CREATE INDEX idx_name ON 학생(이름);  -- 생성
    DROP INDEX idx_name;                  -- 삭제 (ALTER 불가)
    • 조회 성능 ↑, 삽입/수정/삭제 성능 ↓ (인덱스 갱신 부하)
    • 수정 불가 — DROP 후 재생성만 가능

    뷰 (View)

    하나 이상의 테이블로부터 유도된 가상 테이블.

    CREATE VIEW 상위학생 AS
      SELECT 이름, 점수 FROM 학생 WHERE 점수 >= 90;
    
    -- WITH CHECK OPTION: 뷰의 WHERE 조건에 위배되는 데이터 조작 차단
    CREATE VIEW 3학년학생 AS
      SELECT * FROM 학생 WHERE 학년 = 3
      WITH CHECK OPTION;
    -- 이 뷰를 통해 학년이 3이 아닌 학생을 삽입/수정하면 에러 발생
    
    SELECT * FROM 상위학생;  -- 마치 테이블처럼 사용
    
    DROP VIEW 상위학생;      -- 삭제 (ALTER 불가)

    특징:

    • 뷰 자체에 데이터가 저장되지 않음 (질의 시마다 기반 테이블 조회)
    • INSERT / UPDATE / DELETE 제약 있음 (뷰를 통한 데이터 조작은 제한적)
    • 기반 테이블 삭제 시 뷰도 자동 삭제
    • 뷰를 기반으로 또 다른 뷰 생성 가능
    • ALTER 불가 — DROP 후 재생성만 가능

    시스템 카탈로그 (데이터 사전)

    DBMS가 자체적으로 관리하는 메타데이터 DB. 테이블, 뷰, 인덱스, 접근 권한 등의 정보를 담음.

    • 시스템 테이블로 구성 → SQL로 조회 가능
    • 사용자가 직접 갱신 불가 → DDL/DCL 실행 시 시스템이 자동 갱신
    • 메타 데이터, 시스템 카탈로그, 데이터 사전 모두 같은 의미

    12. 관계 대수

    릴레이션 조작을 수학적으로 표현하는 절차적 언어.

    순수 관계 연산자

    연산자 기호 방향 설명
    SELECT σ 수평(행) 조건을 만족하는 튜플 추출
    PROJECT π 수직(열) 지정된 속성만 추출 (중복 제거)
    JOIN ▷◁ - 공통 속성으로 두 릴레이션 합침
    DIVISION ÷ - R÷S : S의 모든 속성값을 포함하는 R의 튜플

    일반 집합 연산자

    연산자 기호 설명
    합집합 두 릴레이션의 튜플 합 (중복 제거)
    교집합 양쪽에 모두 있는 튜플
    차집합 한쪽에만 있는 튜플
    교차곱 × 두 릴레이션 튜플의 모든 순서쌍 (카티전 곱)

    13. 헷갈리기 쉬운 SQL 심화

    윈도우 함수 — 그룹 내 순위 매기기

    집계 함수는 그룹을 하나의 행으로 축약하지만, 윈도우 함수는 행을 유지하면서 그룹 내 계산값을 추가한다.

    -- 부서별 급여 순위
    SELECT 사원명, 부서번호, 급여,
           RANK() OVER (PARTITION BY 부서번호 ORDER BY 급여 DESC) AS 부서별순위
    FROM 사원;
    키워드 역할
    PARTITION BY 그룹 기준 (GROUP BY와 유사하지만 행을 합치지 않음)
    ORDER BY 순위 정렬 기준
    RANK() 동점 있으면 다음 순위 건너뜀 (1,1,3)
    DENSE_RANK() 동점 있어도 순위 연속 (1,1,2)
    ROW_NUMBER() 동점 무관 고유 번호 부여 (1,2,3)

    CASCADE / RESTRICT 옵션

    삭제·회수 시 연결된 데이터를 어떻게 처리할지 결정.

    -- CASCADE: 참조 중인 것까지 연쇄 삭제 (위험)
    DROP TABLE 부서 CASCADE;
    
    -- RESTRICT: 참조 중이면 삭제 자체를 거부 (안전)
    DROP TABLE 부서 RESTRICT;
    옵션 동작
    CASCADE 연쇄 삭제 — 참조하는 테이블/뷰/권한까지 함께 제거
    RESTRICT 안전 모드 — 다른 곳에서 참조 중이면 작업 취소

    14. 서브쿼리

    쿼리 안에 중첩된 또 다른 쿼리. 위치에 따라 종류가 달라진다.

    위치별 종류

    종류 위치 설명
    스칼라 서브쿼리 SELECT 절 단일 값(1행 1열) 반환. 컬럼처럼 사용
    인라인 뷰 FROM 절 결과를 임시 테이블처럼 사용. 별칭 필수
    중첩 서브쿼리 WHERE 절 조건 필터링에 사용. 가장 흔한 형태
    -- 스칼라 서브쿼리: 각 학생의 점수와 전체 평균을 나란히 조회
    SELECT 이름, 점수,
           (SELECT AVG(점수) FROM 성적) AS 전체평균
    FROM 성적;
    
    -- 인라인 뷰: FROM 절에 서브쿼리를 테이블처럼 사용
    SELECT * FROM (
      SELECT 이름, 점수 FROM 성적 WHERE 점수 >= 80
    ) AS 상위학생;
    
    -- 중첩 서브쿼리: WHERE 절 조건으로 사용
    SELECT 이름 FROM 학생
    WHERE 학번 IN (SELECT 학번 FROM 수강 WHERE 과목 = 'DB');

    연산자별 종류

    연산자 반환 설명
    IN 목록 서브쿼리 결과 중 하나라도 일치하면 TRUE
    EXISTS 존재 여부 서브쿼리 결과가 한 행이라도 있으면 TRUE
    ANY / SOME 비교 하나라도 조건 만족하면 TRUE
    ALL 비교 모두 조건 만족해야 TRUE
    -- EXISTS: 수강 기록이 있는 학생만 조회
    SELECT 이름 FROM 학생 s
    WHERE EXISTS (SELECT 1 FROM 수강 WHERE 학번 = s.학번);
    
    -- ALL: 모든 2학년 학생보다 점수가 높은 학생 조회
    SELECT 이름 FROM 성적
    WHERE 점수 > ALL (SELECT 점수 FROM 성적 WHERE 학년 = 2);

    15. NULL 함정

    NULL은 "값이 없음"이지 0이나 빈 문자열이 아니다. 연산 결과가 직관과 다르게 나온다.

    NULL 연산 규칙

    NULL + 1        -- 결과: NULL  (어떤 연산이든 NULL 포함 시 NULL)
    NULL = NULL     -- 결과: NULL  (TRUE가 아님! → 비교 불가)
    NULL != NULL    -- 결과: NULL
    NULL IS NULL    -- 결과: TRUE  (NULL 비교는 IS NULL / IS NOT NULL만 사용)

    NULL 처리 함수

    -- COALESCE: 첫 번째로 NULL이 아닌 값 반환 (표준 SQL)
    SELECT COALESCE(점수, 0) FROM 성적;      -- 점수가 NULL이면 0으로 대체
    
    -- NVL (Oracle 전용): NULL이면 대체값 반환
    SELECT NVL(점수, 0) FROM 성적;
    
    -- NULLIF: 두 값이 같으면 NULL, 다르면 첫 번째 값 반환
    SELECT NULLIF(점수, 0) FROM 성적;        -- 점수가 0이면 NULL 반환

    COUNT와 NULL

    COUNT(*)     -- NULL 포함 전체 행 수
    COUNT(점수)  -- NULL 제외한 행 수만 카운트
    SUM(점수)    -- NULL 무시하고 합산
    AVG(점수)    -- NULL 제외한 행들의 평균 (NULL을 0으로 보지 않음!)

    함정: AVG(점수)는 NULL인 행을 분모에서도 제외한다. NULL을 0으로 포함하려면 AVG(COALESCE(점수, 0)) 사용.


    16. 접근 제어 (DAC / MAC / RBAC)

    누가 어떤 데이터에 접근할 수 있는지 제어하는 정책. 세 가지를 구분하는 문제가 자주 출제된다.

    방식 풀네임 기준 특징
    DAC 임의적 접근 제어 데이터 소유자 소유자가 자유롭게 권한 부여/회수. GRANT/REVOKE가 DAC 방식
    MAC 강제적 접근 제어 보안 등급 비교 주체(사용자)와 객체(데이터)의 등급을 시스템이 강제 비교. 군사·정부 시스템에서 사용
    RBAC 역할 기반 접근 제어 역할(Role) 개인이 아닌 역할에 권한 부여. 역할을 사람에게 할당. 관리 효율 높음

    암기: DAC = 소유자 재량 / MAC = 시스템 강제 / RBAC = 직책 기반

    -- RBAC 예시: 역할에 권한 부여 후 사용자에게 역할 할당
    CREATE ROLE 교수역할;
    GRANT SELECT, INSERT ON 성적 TO 교수역할;
    GRANT 교수역할 TO 홍길동;

    17. 분산 데이터베이스

    데이터가 네트워크로 연결된 여러 컴퓨터에 분산 저장되는 DB.

    4가지 투명성 — 단골 출제

    투명성 설명
    위치 투명성 데이터가 어디 있는지 몰라도 논리적 이름만으로 접근 가능
    중복 투명성 같은 데이터가 여러 곳에 복제되어 있어도 하나처럼 사용. 시스템이 자동 동기화
    병행 투명성 여러 트랜잭션이 동시 실행되어도 결과에 영향 없음
    장애 투명성 일부 노드에 장애가 나도 트랜잭션을 정확히 처리

     

    암기: 위중병장 (위치·중복·병행·장애)

    분산 설계 전략

    전략 설명
    분할 (Fragmentation) 테이블을 조각으로 나눠 분산 저장 (수평/수직 분할)
    복제 (Replication) 동일 데이터를 여러 사이트에 복사본으로 유지
    할당 (Allocation) 어떤 단편을 어느 사이트에 배치할지 결정

    18. 파티셔닝 & 클러스터링

    파티셔닝 (Partitioning)

    대용량 테이블/인덱스를 작은 논리 단위(파티션)로 나누는 것.

    종류 기준 설명
    범위 분할 값의 범위 날짜·숫자 범위로 분할. ex) 월별 파티션
    해시 분할 해시 함수 균등 분산. 특정 범위 조회에는 불리
    목록 분할 값 목록 특정 값 기준. ex) 지역별(서울/부산/대전)
    조합 분할 복합 기준 범위 분할 후 해시 분할 등 두 가지 조합

     

    효과: 쿼리 성능 ↑ (파티션 프루닝), 관리 용이, 가용성 ↑

    클러스터링 (Clustering)

    동일한 성격의 데이터를 같은 물리적 블록에 모아 저장하는 방법.

    • 같은 값을 자주 함께 조회하는 컬럼에 적용
    • 조회 성능 ↑, 저장 공간 효율 ↑
    • 데이터 삽입/수정 시 오버헤드 발생

    빠른 암기 정리

    정규화 순서   : 도부이결다조 (1NF→2NF→3NF→BCNF→4NF→5NF)
    트랜잭션 ACID : 원자 일관 독립 지속
    키 관계       : 슈퍼키 ⊃ 후보키 ⊃ {기본키, 대체키}
    DDL           : CREATE / ALTER / DROP / TRUNCATE / RENAME
    DML           : SELECT / INSERT / UPDATE / DELETE
    DCL           : GRANT / REVOKE
    TCL           : COMMIT / ROLLBACK / SAVEPOINT
    이상 3종      : 삽입 / 삭제 / 갱신
    무결성 핵심 2 : 개체(PK는 NULL·중복 불가) / 참조(FK는 NULL이거나 PK값과 일치)
    삭제 3종 비교 : DROP(구조+데이터, 롤백X) / TRUNCATE(데이터만, 롤백X) / DELETE(조건삭제, 롤백O)
    CASCADE vs RESTRICT  : CASCADE(연쇄삭제) / RESTRICT(참조중이면 거부)
    WITH GRANT OPTION    : 권한을 받은 사람이 다른 사람에게도 그 권한 부여 가능
    WITH CHECK OPTION    : 뷰의 WHERE 조건에 맞지 않는 데이터 조작 차단
    순위 함수     : RANK(1,1,3) / DENSE_RANK(1,1,2) / ROW_NUMBER(1,2,3)
    서브쿼리 위치 : SELECT절(스칼라) / FROM절(인라인뷰) / WHERE절(중첩)
    NULL 규칙     : NULL과의 모든 연산 = NULL / 비교는 IS NULL만 사용
    접근 제어     : DAC(소유자 재량) / MAC(등급 강제) / RBAC(역할 기반)
    분산 DB 투명성: 위중병장 (위치·중복·병행·장애)
    파티셔닝 종류 : 범위 / 해시 / 목록 / 조합
Designed by Tistory.