데이터베이스(Database)란

여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합으로, 작성된 목록으로써 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다.

데이터베이스 관리 시스템(DBMS, Database Management System)

다수의 사용자들이 데이베이스 내의 데이터를 접근할 수 있도록 관리해주는 소프트웨어(미들웨어)

ex) Oracle, Mysql, MS_SQL, Postgresql 등

데이터베이스 특징

  • 실시간 접근성 - 비정형적인 질의에 대해 실시간 처리에 의한 응답이 가능
  • 계속적인 변화 - 데이터의 삽입, 삭제, 갱신으로 항상 최신 데이터 유지
  • 동시 공용 - 다수의 사용자가 동시에 같은 내용의 데이터 접근
  • 내용에 의한 참조 - 주소나 위치가 아닌 데이터 내용으로 찾음

데이터베이스 용어

  • Tuple(튜플) : 행을 의미하며, 같은 말로는 Record, Row라고 함
    • Cardinality : 튜플의 수
  • Attribute(어트리뷰트) : 열을 의미하며, Column이라고 함
    • Degree : 어트리뷰트의 수

Schema(스키마)

  • DB의 구조와 제약 조건에 관한 전반적인 병세를 기술한 메타데이터의 집합
  • Entity, Attribute, Relationship 및 데이터 조작시 데이터 값들이 갖는 제약 조건 등에 관한 전반적 정의
  • 외부 스키마, 개념 스키마, 내부 스키마로 나뉨
    • 외부 스키마 = 서브 스키마 = 사용자 View
      • 외부 스키마는 사용자 입장에서 필요로 하는 DB의 논리적 구조 정의
    • 개념 스키마
      • 개체간의 관계와 제약 조건을 나타내고 DB 접근 권한, 보안 및 무결성 규칙에 관한 명세 정의
    • 내부 스키마
      • 물리적 저장장치에서 본 DB 구조

Transaction(트랜잭션)

  • 데이터베이스의 상태를 변환 시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
  • 장애시 데이터를 복구하는 작업의 단위
  • 작업을 서로 분리하는 단위
  • all or nothing - 전체가 수행되거나 전혀 수행되지 않아야 한다.

트랜잭션의 성질

  • 원자성(Atomicity) - all or nothing
  • 일관성(Consistency) - 수행하기 전이나 수행한 후나 일관된 상태 유지
  • 독립성(Isolation) - 수행중인 트랜잭션에 다른 트랜잭션이 끼어들어 데이터를 훼손하지 말아야 한다.
  • 영속성(지속성)(Durability) - 수행이 완료된 트랜잭션은 영구 저장해야 한다.

SQL(Structured Query Language)

  • 비절차적 언어(선언적 언어)
  • 자신이 원하는 바(what)만 명시하며, 원하는 것을 처리하는 방법(how)은 명시할 수 없음
  • 자연어에 가까운 구문을 사용하여 질의를 표현할 수 있음

SQL의 구성요소

  • 데이터 정의어(Data Definition Language:DDL)

    • 데이터 정의어 란? 데이터베이스를 정의하는 언어이며, 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체의 골격을 결정하는 역할을 하는 언어
    • CREATE
      • DOMAIN, TABLE, VIEW, INDEX
    • ALTER
      • TABLE
        • ADD () PRIMARY KEY
        • DROP
    • DROP
      • DOMAIN, TABLE, VIEW, INDEX
  • 데이터 조작어(Data Manipulation Language:DML)

    • 정의된 데이터베이스에 입력된 레코드를 조회하거나 수정하거나 삭제하는 등의 역할을 하는 언어
    • UPDATE
    UPDATE DEPARTMENT
    SET FLOOR = 10
    WHERE DEPTNO = 1;
    
    • DELETE
    DELETE FROM DEPARTMENT
    WHERE DEPTNAME = 총무;
    
    • INSERT
    INSERT INTO DEPARTMENT
    VALUES(5, '연구', 9);
    
    • SELECT
      • RDB에서 정보를 검색하는 SQL문으로 가장 많이 사용 됨
      • 별칭(alias) - 서로 다른 릴레이션에 동이한 이름을 가진 attribute가 있을 때 구분하는 방법, as로 사용됨
      • DISTINCT - 중복 제거
      • %를 사용한 문자 비교
      • 연산자 우선순위
        • 비교 연산자 = > NOT > AND > OR
      • attr BETWEEN A AND B == A ≤ attr ≤ B
      • IN - 리스트를 사용한 검색
      • 산술 연산자(+, -, *, /) 가능
      • NULL 비교는 attr = NULL이 아닌 attr IS NULL, attr IS NOT NULL
      • count(), max(), min(), avg(), sum()
        • 통계함수와 함께 where절을 사용할 시 where조건을 먼저 실행 한 후의 통계값을 추출한다.
      • Group by .. Having
        • 만들어진 그룹에 대해 조건을 줄 경우 사용
        • SELECT는 AVG, MAX 등의 조건을 주지 못함
      • IN - 한 attribute가 집합에 속하는 가
      • EXISTS - 한 attribute가 집합에 속하는 가
        • IN과 EXISTS의 비교는 EXISTS는 ROW를 체크하고 return하지만, IN은 값까지 비교한다.
      • ANY - 한 attribute가 집합에 속하는 하나 이상의 값들과 관계를 갖는가
      • ALL - 한 attribute가 집합에 속하는 모든 값들과 관계를 갖는가
    #--- 사용 예제
    SELECT [DISTINCT] attr1, attr2, ...
    FROM RELATIONS
    [WHERE 조건]
    [GROUP BY attr1]
    [HAVING 조건]
    [ORDER BY attr1]
    
    #---
    SELECT DEPTNAME, FLOOR
    FROM DEPARTMENT AS D, EMPLOYEE AS E
    WHERE DEPTNO = 1 OR DEPOTNO = 3;
    
    #--- %를 이용한 문자열 비교
    SELECT EMPNAME, TITLE, DNO
    FROM EMPLOYEE
    WHERE EMPNAME LIKE '%이%';
    
    #--- IN을 이용한 검색
    SELECT *
    FROM EMPLOYEE
    WHERE DNO IN (1, 3);
    
    #--- 산술 연산자를 이용한 검색
    SELECT EMPNAME, SALARY, SALARY * 1.1 AS NEWSALARY
    FROM EMPLOYEE
    WHERE TITLE = '과장';
    
  • 데이터 제어어(DCL)

    • 데이터베이스에 접근하거나 객체에 권한을 주는 등의 역할을 하는 언어
    • GRANT (특정 데이터베이스 사용자에게 특정 작업을 수행 권한을 부여)
    • REVOKE (특정 데이터베이스 이용자로부터 이미 준 권한을 박탈 함.)
    • SET TRANSACTION ( 트랜잭션 모드 설정 (동시 트랜잭션 격리 수준 (ISOLATION MODE) 등))
    • BEGIN (트랜잭션 시작)
    • COMMIT (트랜잭션의 실행)
    • ROLLBACK (트랜잭션 취소)
    • SAVEPOINT (무작위로 롤백 지점을 설정)
    • LOCK (TABLE 등의 자원을 차지)

Query 실행순서

  1. FROM
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY
  6. HAVING
  7. SELECT
  8. DISTINCT
  9. ORDER BY
  10. TOP

데이터 타입

Untitled

제약조건

  • 기본키(PRIMARY KEY) 제약조건

  • 외래키(FOREIGN KEY) 제약조건

    • ON UPDATE CASCADE 상위 테이블에서 primary 값이 수정될 경우, 하위 테이블의 reference값은 변경된 상위 테이블의 수정된 값을 가지면서 참조 무결성을 유지합니다.

    • ON DELETE CASCADE

      상위 테이블에서 primary 값이 삭제될 경우, 하위 테이블의 reference값은 삭제되면서 참조 무결성을 유지합니다.

  • UNIQUE 제약조건

  • CHECK 제약조건

  • DEFAULT 정의

SELECT - JOIN

  • 조인은 두 개 이상의 릴레이션으로부터 연관된 튜플들을 결합
  • FROM 절에 두 개 이상의 릴레이션들이 열거되고 조건이 WHERE절에 표현 됨

SELECT - 중첩 질의

  • WHERE절에 다시 SELECT … FROM … WHERE 형태로 포함된 SELECT 문
  • subquery(부질의)라고 함
  • INSERT, DELETE, UPDATE에도 사용 됨
SELECT * 
FROM (SELECT * FROM products ORDER BY no DESC) as A
WHERE A.no <= 3;

---

SELECT * 
FROM EMPLOYEE E
WHERE DNO IN (
	SELECT DEPTNO
	FROM DEPARTMENT
  WHERE DEPTNAME = '영업' OR DEPTNAME = '개발'
)

Trigger

  • 명시된 이벤트가 발생할 때마다 DBMS가 자동적으로 수행하는, 사용자가 정의하는 프로시저
  • ECA(Event-Condition-Action)이라고 함
  • 트리거를 명시하려면 트리거를 활성화시키는 사건인 이벤트, 트리거가 활성화되었을 때 수행되는 테스트인 조건, 트리거가 활성화되고 조건이 참일 때 수행되는 프로시저를 표현
CREATE TRIGGER <TRIGGER_NAME>
AFTER <트리거 유발하는 이벤트
ON <릴레이션>
[WHERE <조건>]
BEGIN <SQL문()> END

---

CREATE TRIGGER RAISE_SALARY
ON EMPLOYEE
FOR INSERT
AS
UPDATE EMPLOYEE
SET SALARY = SALARY * 1.1
WHERE SALARY < 1500000;

참고 자료