Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

데이터베이스 기말고사 정리 본문

2-1/데이터베이스

데이터베이스 기말고사 정리

김브래 2023. 6. 6. 17:37

사용자 정의 함수 - User-Defined Function


사용자 정의함수 (User-Defined Function)

- 사용자 정의 함수는 수학의 함수와 마찬가지로 입력된 값을 가공하여 결과 값을 되돌려줌
- 절차형 SQL을 활용하여 일련의 SQL 처리를 수행하고, 수행 결과를 단일 값으로 반환할 수 있는 절차형 SQL 입니다.
- SELECT 문에 포함
- 예)

SELECT customer_id, order_id, sale_price, fnc_interest(sale_price) 'interest'
FROM orders;

사용자 정의함수 문법

CREATE FUNCTION function_name

(parameter1 datatype, parameter2 datatype, …)

RETURNS return_type

 

BEGIN

    // function_body

    RETURN return_value

END;

VIEW (뷰)


VIEW (뷰)

뷰(view) : 하나 이상의 테이블을 합하여 만든 가상의 테이블
 

뷰의 장점*

편리성 및 재사용성  : 자주 사용되는 복잡한 질의를 뷰로 미리 정의해 놓을 수 있음
→ 복잡한 질의를 간단히 작성
보안성 : 사용자별로 필요한 데이터만 선별하여 보여줄 수 있고, 중요한 질의의 경우 질의 내용을 암호화할 수 있음
→ 개인정보(주민번호)나 급여, 건강 같은 민감한 정보를 제외한 테이블을 만들어 사용
독립성 : 미리 정의된 뷰를 일반 테이블처럼 사용할 수 있기 때문에 편리하고, 사용자가 필요한 정보만 요구에 맞게 가공하여 뷰로 만들어 쓸 수 있음
→ 원본 테이블의 구조가 변해도 응용에 영향을 주지 않도록 하는 논리적 독립성 제공 
 

뷰의 특징*

- 원본 데이터 값에 따라 같이 변함
- 독립적인 인덱스 생성이 어려움*
- 삽입, 삭제, 갱신 연산에 많은 제약이 따름

VIEW 생성

 

CREATE VIEW view_name (column_names) AS

SELECT column1, column2, …

FROM table_name

WHERE condition;

 

VIEW 수정

CREATE OR REPLACE VIEW view_name (column_names) AS
SELECT 
FROM table_name

WHERE condition;

 

VIEW 삭제

DROP VIEW view_name;


저장 프로그램 - 프로시저


저장 프로그램 (Stored Program)

- 저장 프로그램(Stored Program) : 데이터베이스 응용 프로그램을 작성하는데 사용하는 MySQL의 SQL 전용 언어
 
- SQL 문에 변수, 제어, 입출력 등의 프로그래밍 기능을 추가하여 SQL 만으로 처리하기 어려운 문제를 해결함
 
- 저장 프로그램은 Workbench에서 바로 작성하고 컴파일한 후 결과를 실행함
 
- 프로그램 로직을 프로시저 (Procedure)로 구현하여 사용한다.

 

Procedure (프로시저)

- 프로시저를 정의하려면 CREATE PROCEDURE 문을 사용함
 
정의 방법
- 프로시저는 선언부와 실행부(BEGIN-END)로 구성됨
- 선언부에서는 변수와 매개변수를 선언하고 실행부에서는 프로그램 로직을 구현함
- 매개변수(parameter)는 저장 프로시저가 호출될 때 그 프로시저에 전달되는 값
- 변수(variable)는 저장 프로시저나 트리거 내에서 사용되는 값
- 소스코드에 대한 설명문은 /*와 */ 사이에 기술
- 설명문이 한 줄이면 이중 대시(--) 기호 다음에 기술해도 됨

삽입 작업을 하는 프로시

프로시저로 데이터 삽입 작업을 하면 좀 더 복잡한 조건의 삽입 작업을 인자 값만 바꾸어 수행할 수도 있고,

저장해 두었다가 필요할 때마다 호출하여 사용할 수도 있음

 

products 테이블에 한 개의 레코드를 삽입하는 프로시저를 만들어라

새로 만든 프로시저를 이용해 (가디건, 톰브라운, 100000)을 product 테이블에 추가해라

※ 프로시저는 CALL 명령어를 이용한다.

제어문을 사용하는 프로시저

저장 프로그램의 제어문은 어떤 조건에서 어떤 코드가 실행되어야 하는지를 제어하기 위한 문법으로,

절차적 언어의 구성요소를 포함함

데이터를 입력하기 전, 동일한 상품이 있는지 확인하고 삽입하는 프로시저를 만들어라

결과를 변환하는 프로시저

함수와 같이 계산된 결과를 반환해주는 프로시저이다.

 

저장 프로시저 매개변수에는 3가지 모드가 있다*

- IN
프로시저에 값을 전달하며, 프로시저 내부에서 값을 수정할 수는 있지만 프로시저가 반환되고나서 호출자가 수정할 수는 없다
 
- OUT
프로시저의 값을 호출자에게 다시 전달한다.
초기값은 프로시저 내에서 NULL값이며 프로시저가 반환될 때 새로운 값이 호출자에게 리턴된다 
(FUNCTION의 RETURNS ***와 비슷하다)
 
- INOUT
호출자에 의해 하나의 변수가 초기화되고 프로시저에 의해 수정된다. IN+OUT의 결합이다

 

products 테이블에 저장된 상품들의 평균 가격을 반환하는 프로시저를 작성해라

사용자가 설정하는 변수 (User Defined Variable) @value_name으로 설정한다.

 

커서를 사용하는 프로시저

- 커서(cursor)는 실행 결과 테이블을 한 번에 한 행씩 처리하기 위하여 테이블의 행을 순서대로 가리키는 데 사용함

 

- 커서에 사용되는 키워드*

orders 테이블에서 판매 상품에 대한 이익을 계산하는 프로시저를 만들어라
30,000원 이상이면 10%, 미만이면 5%의 이익을 계산해라


트리거


트리거

트리거(trigger) : 데이터의 변경(INSERT, DELETE, UPDATE) 문이 실행될 때 자동으로 따라서 실행되는 프로시저

 

부수적으로 필요한 작업인 데이터 기본값 제공, 데이터 제약 준수, SQL 뷰의 수정 등을 실행

 

※Workbench에서 트리거 작동을 위해 다음 문장 실행

SET global log_bin_trust_function_creators = ON;

 

새로운 상품을 삽입한 후 자동으로 product_log 테이블에 삽입한 내용을 기록하는 트리거 생성

트랜잭션


트랜잭션의 개념

트랜잭션(transaction): DBMS에서 데이터를 다루는 논리적인 작업의 단위

 
데이터베이스에서 트랜잭션을 정의하는 이유
데이터베이스에서 데이터를 다룰 때 장애가 일어날 때 데이터를 복구하는 작업의 단위가 됨
데이터베이스에서 여러 작업이 동시에 같은 데이터를 다룰 때가 이 작업을 서로 분리하는 단위가 됨
 

트랜잭션은 전체가 수행되거나 또는 전혀 수행되지 않아야 함(all or nothing).

트랜잭션의 성질 *

원자성(Atomicity) : 트랜잭션에 포함된 작업은 전부 수행되거나 아니면 전부 수행되지 않아야 (all or nothing) 함
일관성(Consistency) : 트랜잭션을 수행하기 전이나 수행한 후나 데이터베이스는 항상 일관된 상태를 유지해야 함
고립성(Isolation) : 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들어 변경 중인 데이터값을 훼손하는 일이 없어야 함
지속성(Durability) : 수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야 함
 
DBMS는 트랜잭션의 성질을 유지하기 위해 다음 기능들을 수행

동시성 제어


동시성 제어

동시성 제어(concurrency control) : 트랜잭션이 동시에 수행될 때, 일관성을 해치지 않도록 트랜잭션의 데이터 접근을 제어하는 DBMS의 기능

 

같은 데이터를 접근하는 두 트랜잭션의 작업(읽기, 쓰기)에 따라 발생하는 상황

위 [상황 3]을 '갱신손실 문제 (LOST UPDATE)'라고 하며
두 개의 트랜잭션이 한 개의 데이터를 동시에 갱신(update)할 때 발생하며,
데이터베이스에서 절대 발생하면 안 되는 현상

- 갱신손실 문제를 해결하려면 상대방 트랜잭션이 데이터를 사용하는지 여부를 알 수 있는 규칙이 필요함

- 데이터를 수정 중이라는 사실을 알리는 방법의 잠금 장치

락 유형

공유락(LS, shared lock)*: 트랜잭션이 읽기를 할 때 사용하는 락
배타락(LX, exclusive lock)*: 읽고 쓰기를 할 때 사용하는 락

오손 읽기 (Dirty Read)*

- 읽기 작업을 하는 트랜잭션 1이 쓰기 작업을 하는 트랜잭션 2가 작업한 중간 데이터를 읽기 때문에 생기는 문제

 

- 작업 중인 트랜잭션 2가 어떤 이유에서 작업을 철회(ROLLBACK)할 경우
트랜잭션 1은 무효가 된 데이터를 읽게 되고 잘못된 결과를 도출하는 현상

반복불가능 읽기 (Non-Repeatable Read)*

 

- 트랜잭션 1이 데이터를 읽고 트랜잭션 2가 데이터를 쓰고(갱신, UPDATE)

트랜잭션 1이 다시 한 번 데이터를 읽을 때 생기는 문제

- 트랜잭션 1이 읽기 작업을 다시 한 번 반복할 경우 이전의 결과와 다른 결과가 나오는 현상

유령데이터 읽기 (Phantom Read)*

- 트랜잭션 1이 데이터를 읽고 트랜잭션 2가 데이터를 쓰고(삽입, INSERT)
트랜잭션 1이 다시 한 번 데이터를 읽을 때 생기는 문제

 

- 트랜잭션 1이 읽기 작업을 다시 한 번 반복할 경우 이전에 없던 데이터(유령 데이터)가 나타나는 현상

회복


회복

데이터베이스에 장애가 발생했을 때 데이터베이스를 일관성 있는 상태로 되돌리는 DBMS의 기능

데이터베이스 시스템에서 발생할 수 있는 장애 유형

 

시스템 충돌 : 하드웨어 혹은 소프트웨어의 오류로 인하여 주기억장치가 손실되는 것을 말한다. 주기억장치에 상주하여 처리 중인 프로그램과 데이터의 일부 혹은 전부가 손실된다.
미디어 장애 : 헤드의 충돌이나 읽기 장애에 의하여 보조기억장치의 일부 데이터가 손실되는 것을 말한다. 보조기억장치에 저장 중인 데이터의 일부 혹은 전부가 손실된다.
응용 소프트웨어 오류 : 데이터베이스에 접근하는 소프트웨어의 논리적인 오류로 트랜잭션의 수행이 실패하는 것을 말한다.
자연재해 : 화재, 홍수, 지진, 정전 등에 의해 컴퓨터 시스템이 손상되는 것을 말한다.
부주의 혹은 태업(sabotage) : 운영자나 사용자의 부주의로 데이터가 손실되거나 의도적인 손상을 입는 것을 말한다.

 

트랜잭션과 회복

- 트랜잭션은 변경 내용을 한순간에 모두 기록하지 않는다.

- 변경한 내용(버퍼)을 로그(임시 디스크)에 기록한 후 데이터베이스에 반영한다.
- DBMS의 회복 관리자(Recovery Manager)는 트랜잭션의 원자성과 지속성을 보장하여
장애로부터 데이터베이스를 보호한다.

로그 파일

- 트랜잭션이 수행 중이거나 수행이 종료된 후 발생하는 데이터베이스 손실을 방지하기 위해

트랜잭션의 데이터베이스 기록을 추적하는 로그 파일(log file)을 사용함

- 로그 파일 :
트랜잭션이 반영한 모든 데이터의 변경사항을 데이터베이스에 기록하기 전에 미리 기록해두는 별도의 데이터베이스로,
안전한 하드디스크에 저장되며 전원과 관계없이 기록이 남아 있음
 
- 로그 파일에 저장된 로그의 구조

 <트랜잭션번호, 로그의 타입, 데이터 항목 이름, 수정 전 값, 수정 후 값>

 

- ‘로그의 타입’은 트랜잭션의 연산 타입으로 START, INSERT, UPDATE, DELETE, ABORT, COMMIT 등이 있다.
'수정 전 값’은 데이터의 변경 전 값을 나타내고, '수정 후 값’은 연산의 결과로 변경된 값을 나타냄
 

로그 파일을 이용한 회복*

데이터의 변경 기록을 저장해 둔 로그 파일을 이용하면 시스템 장애도 복구할 수 있음

이상현상


이상현상의 개념

삭제이상(Deletion Anomly)

투플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상

= 연쇄삭제(Triggered Deletion) 문제 발생

 

삽입이상(Insertion Anomly)

투플 삽입 시 특정 속성에 해당하는 값이 없어 NULL 값을 입력해야 하는 현상

= NULL 값 문제 발생

 

수정이상(Update Anomly)

투플 수정 시 중복된 데이터의 일부만 수정되어 데이터의 불일치  문제가 일어나는 현상

= 불일치(Inconsistency) 문제 발생

함수 종속성

함수 종속성 개념

어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 의존 관계를
속성 B는 속성 A에 종속한다 (Dependent) 혹은 속성 A는 속성 B를 결정한다(Determine) 라고 함

 

A → B 로 표기하며, A를 B의 결정자라고 함

 

함수 종속성(FD, Functional Dependency)

릴레이션 R과 R에 속하는 속성의 집합 X, Y가 있을 때, X 각각의 값이 Y의 값 한 개와 대응이 될 때

‘X는 Y를 함수적으로 결정한다’라고 하고 X→Y로 표기함.

 

이때 X를 결정자(Determinant)라고 하고, Y를 종속 속성 (Dependent Attribute)이라고 함.

함수 종속성은 보통 릴레이션 설계 때 속성의 의미로부터 정해짐.

함수 종속성 규칙(Functional Dependency Rule)

X, Y, Z가 릴레이션 R에 포함된 속성의 집합이라고 할 때, 함수 종속성에 관한 다음과 같은 규칙이 성립

 

부분집합(Subset) 규칙   : if Y ⊆ X, then X → Y

증가(Augmentation) 규칙   : If X → Y, then XZ → YZ

이행(Transitivity) 규칙   : If X → Y and Y → Z, then X → Z

 

위 세 가지 규칙으로부터 부가적으로 다음의 규칙을 얻을 수 있음

 

결합(Union) 규칙       : If X → Y and X → Z, then X → YZ

분해(Decomposition) 규칙     : If X → YZ, then X → Y and X → Z

유사이행(Pseudotransitivity) 규칙  : If X → Y and WY → Z, then WX → Z

이상현상은 한 개의 릴레이션에 두 개 이상의 정보가 포함되어 있을 때 나타남

= 기본키가 아니면서 결정자인 속성이 있을 때 발생함*

정규화


정규화 (Normalization)

- 이상현상이 발생하는 릴레이션을 분해하여 이상현상을 없애는 과정

- 이상현상이 있는 릴레이션은 이상현상을 일으키는 함수 종속성의 유형에 따라 등급을 구분 가능

- 릴레이션은 정규형 개념으로 구분하며, 정규형이 높을수록 이상현상은 줄어듦

제 1정규형*

릴레이션 R의 모든 속성 값이 원자값을 가지면 제 1정규형이라고 함

 

제 2정규형*

- 릴레이션 R이 제 1정규형이고 기본키가 아닌 속성이 기본키에 완전 함수 종속일 때 제 2정규형이라고 함.

 

완전 함수 종속(Full Functional Dependency) :
A와 B가 릴레이션 R의 속성이고 A → B 종속성이 성립할 때, B가 A의 속성 전체에 함수 종속하고

부분 집합 속성에 함수 종속하지 않을 경우

 

불완전 함수 종속(Partial Functional Dependency) :
A → B 종속성에서 A의 속성 일부를 제거해도 종속성이 여전히 성립하는 경우

제 3정규형*

릴레이션 R이 제 2정규형이고 기본키가 아닌 속성이 기본키에

비이행적(Non-transitive)으로 종속할 때(직접 종속) 제 3정규형이라고 함

 

이행적 종속이란

A → B, B → C가 성립할 때 A → C가 성립되는 함수 종속성

BCNF 정규형*

- 릴레이션 R에서 함수 종속성 X → Y가 성립할 때 모든 결정자 X가 후보키이면 BCNF 정규형이라고 함

정규화 정리

대부분의 릴레이션은 BCNF까지 정규화하면 실제적인 이상현상이 없어지기 때문에 보통 BCNF까지 정규화를 진행함.

관계대수


관계대수(Relational Algebra)

릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 질의하는 방법을 기술하는 언어

관계대수와 관계해석

관계대수 : 어떤 데이터를 어떻게 찾는지에 대한 처리 절차를 명시하는 절차적인 언어이며, DBMS 내부의 처리 언어로 사용됨

 

관계해석 : 어떤 데이터를 찾는지만 명시하는 선언적인 언어로 관계대수와 함께 관계 DBMS의 표준 언어인 SQL의 이론적인 기반을 제공함

 

= 관계대수와 관계해석은 모두 관계 데이터 모델의 중요한 언어이며 실제 동일한 표현 능력을 가지고 있음.

관계대수식

관계대수는 릴레이션 간 연산을 통해 결과 릴레이션을 찾는 절차를 기술한 언어로,
이 연산을 수행하기 위한 식을 관계대수식(Relational Algebra Expression)이라고 함.

 

관계대수식은 대상이 되는 릴레이션과 연산자로 구성되며, 결과는 릴레이션으로 반환됨. 반환된 릴레이션은 릴레이션의 모든 특징을 따름

 

단항 연산자 : 연산자<조건> 릴레이션

이항 연산자 : 릴레이션1 연산자<조건> 릴레이션2

데이터베이스 관리 기본 명령어

(root 계정으로) 시스템에 있는 데이터베이스 현황을 살펴보시오.

#DB에 있는 데이터베이스가 어떤 것이 있는지 보여준다.

기본적으로 mysql, sys 등 관리용 데이터베이스를 확인할 수 있다.

- SHOW DATABASES;
 

#데이터베이스 mysql을 사용하는 명령을 내린다.

- USE mysql;
 

#데이터베이스 mysql에 있는 테이블들을 보여준다.

- SHOW TABLES;

 

#사용자 정보를 저장하는 User 테이블의 구조를 살펴본다.

- DESC User;

 

#사용자 계정 테이블 user의 내용을 확인하고 사용자 계정을 살펴본다.

- SELECT * FROM User;

보안과 권한


보안과 권한

DBMS는
① 로그인 단계에서 DBMS 접근을 제한하는 로그인 사용자 관리

② 로그인한 사용자별로 특정 데이터로의 접근을 제한하는 권한 관리의 기능 제공

로그인 사용자 관리*

로그인 사용자 생성

- CREATE USER [사용자 이름] IDENTIFIED BY [비밀번호];

관리자(root) 계정에서 사용할 수 있다.
사용자 생성시 사용자 이름과 접속가능한 호스트 이름을 같이 표시한다.
따라서 사용자 이름은 'user@hostname'과 같은 모양이다.
사용자 이름이 같아도 접속 호스트 이름이 다르면 다른 계정이라고 생각하면 된다.
 
예시 :

비밀번호는 IDENTIFIED BY 다음에 있는 ‘madang’이다.
CREATE USER madang@localhost IDENTIFIED BY 'madang';

 

외부에서 접속 가능한 madang 사용자는 다음과 같이 생성한다.
CREATE USER madang@'%' IDENTIFIED BY 'madang';

 

특정 사이트 ‘happy.md.kr’ 사이트에서 접속 가능한 madang 사용자 계정은 다음과 같이 생성한다.
CREATE USER madang@'%.happy.md.kr' IDENTIFIED BY 'madang';

권한 관리


권한 관리

소유한 개체에 대한 사용 권한을 관리하기 위한 명령을 DCL(Data Control Language)이라고 함

 

대표적 DCL 문 : 권한 허가 GRANT 문, 권한 취소 REVOKE 

권한 허가 - GRANT

GRANT 권한 [(column_list)]

  [ON 객체] TO {사용자 | ROLE}

  [WITH GRANT OPTION]

 

- 권한 : 허가할 권한

- column_list : 사용 권한을 부여할 테이블의 열 이름들 (꼭 괄호 안에 표시해야 한다)

- 객체 : 사용 권한을 부여할 객체 지정 (테이블이나 뷰이름이 올 수 있다)

- 사용자 : 권한을 부여할 사용자를 지정

- ROLE : 권한 묶음

- WITH GRANT OPTION : 허가받은 권한을 다른 사용자에게 다시 부여할 수 있다. 없으면 재부여는 허가하지 않는다.

권한 취소 - REVOKE

REVOKE 권한 [column_list]

  [ON 객체] FROM {사용자 | ROLE}

  [CASCADE]

 

CASCADE는 사용자가 다른 사용자에게 부여한 권한까지 연쇄적으로 취소하라는 의미로,

사전에 주의 깊게 확인하고 사용해야 함

스토리지 엔진


스토리지 엔진

스토리지 엔진(Storage Engine) 혹은 데이터베이스 엔진(Database Engine)은

DBMS이 필요로 하는 물리적인 데이터를 가져오는 장치이다.

 

- 스토리지 엔진의 특성에 따라 데이터 접근이 얼마나 빠른지, 얼마나 안정적인지,

트랜잭션 등의 기능을 제공하는지 등의 차이점이 발생한다

 

흔히 쓰는 스토리지 엔진 종류 :

1.InnoDB
2.MyISAM
3.Cluster(NDB)
4.Archive
5.Federated
6.CSV 등이 있다.

 

스토리지 엔진의 역할

•트랜잭션(Transaction Manager): 트랜잭션을 스케줄링하고 데이터베이스 상태의 논리적 일관성 보장.

 

•잠금 매니저(Lock Manager): 트랜잭션에서 접근하는 데이터베이스 객체에 대한 잠금을 제어. 동시 수행 작업이 물리적 데이터 무결성을 침해하지 않도록 함.

 

= 트랜잭션과 잠금 매니저는 동시성 제어. 논리적 물리적 데이터 무결성을 보장하고,

동시 수행 작업의 효율적 수행을 담당.

 

•엑세스 메서드(Access Method): 디스크에 저장된 데이터에 대한 접근 및 저장 방식을 정의. 힙 파일/B-트리/LSM 트리 등의 자료구조 사용.

 

•버퍼 매니저(Buffer Manager): 데이터 페이지를 메모리에 캐시.

 

•복구 매니저(Recovery Manager): 로그를 유지 관리하고 장애 발생 시 시스템을 복구

 


InnoDB와 MyISAM 비교


InnoDB

•MyISAM보다 데이터 저장비율이 낮고, 데이터 로드 속도가 느리다.

 

•레코드 기반의 락(Lock)을 제공한다. 즉, 테이블 레벨이 아닌 ROW 레벨의  락을 지원한다. 이로 인해 높은 동시성 처리가 가능한 특징이 있고 안정적이다. (Row - Level Lock)
→  Insert, Update, Delete에 대한 속도가 빠르다

 

•외부키를 지원한다

 

•자동 데드락 감지 : 감지 시 변경된 레코드가 가장 작은 트랜잭션을 롤백해버려서 데드락을 풀어준다.

 

•자동 장애 복구 : 완료하지 못한 트랜잭션이나 일부만 기록되어 손상된 데이터 페이지 등을 자동 복구한다.

 

•데이터 무결성 보장(트랜잭션, 외래키, 제약조건, 동시성 등) - ACID

 

•Primary Key를 기준으로 Clustering되어서 저장된다. 즉, PK를 기준으로 순서대로 디스크에 저장되는 구조로 PK에 의한 Range Scan이 빠르다.
→ 데이터를 PK순서에 맞게 저장한다는 뜻이므로 Order By 등 쿼리에 유리할 수 있다.

 

•인덱스와 더불어 데이터까지 버퍼풀에 저장하기 때문에 모든 데이터가 메모리에 있으면 디스크를 읽지 않아도 된다.
→ 데이터 접근 속도가 빠르다
→ 인덱스와 데이터 모두 메모리에 적재되므로 메모리 사용 효율에 좋지 않다.
→ 메모리 때문에 로그 수집에 대한 용도로 InnoDB를 사용하면 안된다.

 

MyISAM

•구조가 단순해, 속도가 빠르다.

 

•데이터 저장에 실제적인 제한이 없고 매우 효율적으로 저장한다.
→ 메모리 효율이 InnoDB보다 좋음

 

•테이블 작업시 특정 행을 수정하려고 하면 테이블 전체에 락이 걸려서  다른사람이 작업 할 수 없다. (Table-level Lock)
→ 갱신이 많은 용도로는 성능적으로 불리. 동시 서비스에 적합X
→ multi-thread 환경에서는 성능이 저하될 수 있다.

 

•트랜잭션에 대한 지원이 없기때문에 작업도중 문제가 생겨도 이미 DB안으로 데이터가 들어감. DB 프로세스가 비정상 종료하면 테이블이 파손될 가능성이 높다.
→ 데이터 무결성이 보장되지 않는다.

 

•Full-text 검색이 가능하다

 

•주로 select 작업이 많은 경우에 사용된다. 즉, 읽기(READ)작업에 효과적이다.

 

InnoDB와 MyISAM 간단 비교

InnoDB: 복잡해서 속도가 비교적 느리지만 다양한 기능을 제공하고 데이터를 더 안전하게 저장 가능

MyISAM: 단순해서 속도가 비교적 빠르지만 지원하지 않는 기능들도 있어 성능면에서는 비교적 떨어진다.

'2-1 > 데이터베이스' 카테고리의 다른 글

데이터베이스 14주차 정리  (0) 2023.06.04
데이터베이스 13주차 정리  (2) 2023.06.03
데이터베이스 12주차 정리  (0) 2023.05.22
데이터베이스 11주차 정리  (0) 2023.05.15
데이터베이스 10주차 정리  (0) 2023.05.08