7장 - SQL 응용

박경서·2024년 4월 10일
post-thumbnail

데이터베이스 기본

트랜잭션

  • 인가받지 않은 사용자로부터 데이터를 보장받기 위해 DBMS가 가져야 할 특성

트랜잭션 특성

  • 원자성
    • 연산 전체가 성공 또는 실패가 되어야 함
  • 일관성
    • 수행 전후 상태가 같아야 함
  • 격리성
    • 서로 영향을 미쳐서는 안됨
  • 영속성
    • 영속적으로 저장되어야 함

병행제어

  • 다수 사용자 환경에서 여러 트랜잭션을 수행 할때 일관성 유지를 위해 상호작용을 제어하는 기법

병행제어 기법 종류

  • 로킹
    • 하나의 트랜잭션이 실행되는 동안 다른 트랜잭션이 접근하지 못하도록 상호배제 기능
  • 타임스탬프 순서
    • 타임스탬프를 부여하여 부여된 시간에 따라 수행

회복기법

  • 트랜잭션 도중 장애로 인해 손상된부분을 정상 상태로 복구
  • REDO
    • 트랜잭션 시작과 완료에 대한 기록이 있음
  • UNDO
    • 트랜잭션 시작만 있고 완료에 대한 기록이 없음

DDL

  • 데이터 정의어
  • 생성, 변경, 삭제, 이름 변경

DDL 대상

  1. 스키마

    • 데이터베이스의 구조, 제약조건을 담고 있음
    • 외부스키마
      • 사용자, 개발자 관점
    • 개념스키마
      • 전체적인 논리적 구조
    • 내부스키마
      • 물리적 저장 장치의 관점
  2. 테이블

    • 데이터를 저장하는 필드로 구성된 집합 = 릴레이션, 엔티티
    • 튜플/ 행
      • 테이블 내의 행
      • 테이블에서 동일 값 가질 수 없음
      • 튜플의 개수 : 카디널리티(특정 데이터 집단의 유니크한 값의 개수)
    • 속성/ 열
      • 열의 개수 : 차수, 디그리
    • 도메인
      • 하나의 속성이 취할 수 있는 같은 타입의 원자값들의 집합
    • 논리 테이블
    • 사용자 관점에서는 테이블과 동일
  3. 인덱스

    • 검색 연산을 최적화
    • 기본키는 자동으로 인덱스 생성

TABLE 관련 DDL 명령어

 CREATE    생성
 ALTER     수정
 DROP      삭제
 TRUNCATE  내용삭제
  1. CREATE TABLE
    • 테이블을 생성하는 명령어
CREATE TABLE 사원
(
 사번 VARCHARE(10) NOT NULL,
 부서번호 VARCHARE(20),
 생년월일 DATE NOT NULL,
 성별 CHAR(1),
 PRIMARY KEY(사번),
 FOREIGN KEY(부서번호) REFERENCES 부서(부서코드),
 CONSTRAINT 성별제약 CHECK 성별 IN('M','F')
 );
- `사원테이블`의 VARCHARE(10)타입인 `사번컬럼`은 NULL이 아니고,
- VARCHARE(20)타입인 `부서번호칼럼`이 있고,
- DATE 타입인 `생년월일칼럼`은 NULL이 아니어야 하고,
- 그 중 `사번컬럼`은 기본키이고,
- `부서번호칼럼`은 `부서테이블`의 `부서코드칼럼`을 참조하고,
- `성별컬럼`은 M과 F값만 허용.
  1. ALTER TABLE

    • 테이블을 수정
    • 칼럼 추가 문법
    ALTER TABLE 테이블명 ADD 칼럼명 데이터타입 [제약조건];
    • 칼럼 수정 문법
    ALTER TABLE 테이블명 ALTER 칼럼명 데이터타입 [제약조건];
    • 칼럼 삭제 문법
    ALTER TABLE 테이블명 DROP COLUMN 칼럼명;
  2. DROP TABLE

    • 테이블을 삭제
    DROP TABLE 테이블명 [CASCADE | RESTRICT];
    • CASCADE
      • 참조하는 테이블까지 제거
    • RESTRICT
      • 다른 테이블이 삭제할 테이블을 참조 중이면 제거하지 않기
  3. TRUNCATE TABLE

    • 테이블 내의 데이터들을 모두 삭제
      TRUNCATE TABLE 테이블명;

VIEW 관련 DDL 명령어

  1. CREATE VIEW
    • 뷰를 생성
    CREATE VIEW 뷰이름 AS
  2. DROP VIEW
    • 뷰를 삭제
       DROP VIEW 뷰이름;

INDEX 관련 DDL 명령어

  1. CREATE INDEX
    • 인덱스를 생성
    CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명(칼럼명1, 칼럼명2);
  2. ALTER INDEX
    • 인덱스를 수정
  3. DROP INDEX
    • 인덱스를 삭제
    DROP INDEX 인덱스명;

DML

  • 데이터 조작어

    SELECT  조회
     INSERT  삽입
     UPDATE  갱신
     DELETE  삭제

SELECT 명령어

  1. SELECT 명령어
    • 데이터의 내용을 조회
    SELECT [ALL | DISTINCT] 속성명1, 속성명2,
     FROM 테이블명
     WHERE 조건
     GROUP BY 속성명1
     HAVING 그룹조건
     ORDER BY 속성 [ASC | DESC];
    • SELECT 조건
      • ALL = *
        • 모든 튜플을 검색
      • DISTINCT
        • 증복된 속성이 있는 경우 그 중 첫 번째 한개만 검색
    • WHERE 조건
      • LIKE 연산자
        • %
          • 글자수 제한 없음
          • '박%'이면 박으로 시작하는 글자수 제한없이 와야 함
        • _
          • 특정위치에 있어야 함
          • '박_' 이면 박 뒤에 무조건 1글자가 있어야 함
  2. 조인
  • 두개 이상의 테이블을 연결하여 테이터 검색
    • 내부조인
      • 조인조건에 맞는것끼리 묶어줌
    SELECT A.칼럼1, A.칼럼2,
            B.칼럼1, B.칼럼2
     FROM 테이블1 A [Inner] JOIN 테이블2 B
     ON 조인조건
     WHERE 검색조건;
    • 왼쪽 외부 조인
      • 왼쪽에 위치한 테이블을 기준으로 조인
    SELECT A.칼럼1, A.칼럼2,
            B.칼럼1, B.칼럼2
     FROM 테이블1 A LEFT [OUTER] JOIN 테이블2 B
     ON 조인조건
     WHERE 검색조건;
    • 오른쪽 외부 조인
      • 오른쪽에 위치한 테이블을 기준으로 조인
    SELECT A.칼럼1, A.칼럼2,
            B.칼럼1, B.칼럼2
     FROM 테이블1 A RIGHT [OUTER] JOIN 테이블2 B
     ON 조인조건
     WHERE 검색조건;
    • 교차 조인
      • 각 테이블의 칼럼끼리 다 조인
    SELECT A.칼럼1, A.칼럼2,
            B.칼럼1, B.칼럼2
     FROM 테이블1 A CROSS JOIN 테이블2 B;
  1. 집합 연산자
    • UNION
      • 중복 행 제거
    • UNION ALL
      • 중복 행 제거 X
    • INTERSERT
      • 중복 레코드만 포함
    • MINUS
      • 첫 쿼리에만 있는 것

INSERT 명령어

  • 데이터의 내용을 삽입
    • INSERT INTO VALUES
INSERT INTO 테이블명(속성명1, 속성명2, ..)
VALUES(데이터1, 데이터2, ..);

UPDATE 명령어

  • 데이터의 내용을 변경
    • UPDATE SET WHERE
UPDATE 테이블명
SET 속성명1 = 데이터1, 속성명2 = 데이터2.. 
WHERE 조건;

DELETE 명령어

  • 데이터의 내용을 삭제
    • DELETE FROM WHERE
DELETE FROM 테이블명
WHERE 조건;

DCL

  • 데이터 제어어

    GRANT 권한부여
    REVOKE 권한취소
  1. GRANT

    • 사용자에게 데이터베이스의 권한 부여
    GRANT 권한 [UPDATE | DELETE] ON 테이블명 TO 사용자;
  2. REVOKE

    • 사용자에게 데이터베이스의 권한 회수
    REVOKE 권한 [UPDATE | DELETE] ON 테이블명 FROM 사용자;
profile
안녕하세요, 박경서입니다.

0개의 댓글