목록전공 공부 (28)
개발 블로그

트랜잭션 고립성 (transaction isolation) 여러 트랜잭션들이 동시에 실행돼도 다른 트랜잭션들로부터 고립되어 실행되는 것처럼 보여야 하는 성질이다. 트랜잭션 고립성은 일반적으로 4단계로 나눈다. 1. READ_UNCOMMITTED 2. READ_COMMITTED 3. REPEATABLE_READ 4. SERLALIZABLE 1. READ_UNCOMMITTED 이 단계에서는 특정 트랜잭션에서 데이터를 변경했으나 다른 트랜잭션에서 커밋되지 않은 데이터를 읽을 수 있다. 원래는 커밋되어야지 테이블 데이터를 변경할 수 있는데, 커밋 전에 데이터를 읽을 수 있는 이유는 히스토리 로그를 읽어 변경되지 않은 데이터를 읽었기 때문이다. 커밋이 완료되면 변경된 테이블을 읽을 수 있다. 2. READ_COM..

트랜잭션의 동시성 제어 문제와 잠금에 대해 알아본다. 동시성 제어(concurrency control) 문제란? DBMS는 서버로 운용되므로, 여러 클라이언트가 동시에 접속해 삽입, 수정, 삭제, 검색을 할 수 있다. 이러한 트랜잭션을 실행하는데 서로 간의 간섭으로 부정확한 결과가 발생하는 문제를 동시성 제어 문제라고 한다. 예를 들어 상품 테이블에 1억개의 데이터가 있을 때, 사용자 A가 1억개의 모든 데이터를 일괄로 변경하고 있는 중간에 사용자 B가 특정 데이터를 수정하는 경우, 최종 결과를 예측할 수 없다. DBMS는 동시성을 제어하기 위해 LOCK을 사용한다. 잠금(Lock)이란? 잠금은 데이터를 잠가서 읽거나 쓰지 못하게 막는 것을 말한다. 즉 해당 데이터를 읽거나 쓰는데 필요한 권한이다. 명시..
트랜잭션(transaction)이란? DB 상태를 변경하기 위한 작업의 논리적 단위로, 검색/삽입/수정/삭제 명령을 포함하는 컴퓨터 프로그램에 의해 수행된다. 명시적인 트랜잭션 트랜잭션의 범위를 명시적으로 선언하는 것을 말한다. BEGIN, START TRANSACTION 구문을 사용해 트랜잭션을 시작하고 필요한 모든 질의를 전달하고 COMMIT 또는 ROLLBACK으로 트랜잭션을 종료한다. COMMIT은 트랜잭션을 완료하는 것으로, 커밋을 해야 테이블에 변경된 데이터가 실제로 적용된다. ROLLBACK은 트랜잭션이 시작되기 전의 상태로 돌아간다. 트랜잭션은 보통 DBMS Connector를 사용하는 애플리케이션 내에서 사용한다. Auto-Commit 명시적인 트랜잭션 구문을 작성하지 않은 한 문장의 작..

정규화란? 정규화는 관계형 데이터베이스 설계에서 정보를 보존한 상태로 중복을 최소화하는 방향으로 데이터를 구조화하는 과정이다. 정규화가 필요한 이유는? 처음부터 요구 사항을 잘 확인해 ERD를 설계하고 릴레이션 스키마로 잘 사상했으면 상관없지만, 잘못된 설계로 만들어진 경우 체계적인 단계를 이용하여 설계를 고쳐나가야 한다. 정규화의 종류 잘못된 설계를 체계적으로 구분하고, 단계별로 고쳐나가기 위해 정규형을 만들어 특정 규칙을 만족하면 정규형을 만족한다고 한다. 함수적 종속성 (functional dependency) X와 Y를 임의의 속성들의 집합이라고 할 때 X의 값이 Y의 값을 고유하게 결정하면, Y는 X에 함수적으로 종속된다고 말하고 X -> Y로 표기한다. 함수적 종속을 기반으로 문제를 파악하고 ..

릴레이션 분석 지침은 릴레이션이 잘 설계되었는지 아니면 문제가 있는지 간단히 확인하는 기본지침이다. 릴레이션 분석 기본 지침 1. 스키마에서 속성의 의미가 명확한지 확인한다. -> 속성의 이름으로 해당 속성이 어떤 의미를 가졌는지 알 수 있어야 한다. 속성의 이름을 모호하지 않게 작명해야 한다. 예를 들어 회원 릴레이션에서 '날짜, 시간' 속성은 가입 날짜 시간인지 수정 날짜 시간인지 모호하다. 그리고 여러 엔티티의 속성들이 하나의 기본 릴레이션에 혼합되면 안된다. 예를 들어 게시글 릴레이션에는 게시글과 관련된 속성들만 존재해야 한다. 2. 튜플들에서 중복되는 값들이 있는지 확인한다. 속성의 의미가 명확하지 않으면 중복되는 값들이 존재하게 된다. 릴레이션의 속성 중 의미상 별도의 릴레이션으로 분리할 수 ..
관계 대수(relational algebra)란? 관계 모델을 위한 기본적인 연산의 집합으로, 릴레이션 연산 표현에 대한 방법론 중 하나이다. 관계 대수 연산은 두 가지로 나눌 수 있다. 1. 수학적 집합 연산 합집합(union) 교집합(intersection) 차집합(set difference) 카디션 곱(cartesian product) 2. 관계형 데이터베이스를 위해 개발된 연산 셀렉트(select) 프로젝트(project) 조인(join) 디비전(division) 1. 릴레이션 표기법 R(a1, a2, a3, ... ) : R은 릴레이션을 뜻하며, a1, a2, a3는 릴레이션의 속성을 의미한다. 2. SELECT select 연산은 시그마 기호(σ)를 사용하며, 주어진 조건을 만족하는 튜플들만 ..
서브 쿼리란? 완전한 문장으로 구성된 구문 안에 또 하나의 완전한 구문이 있는 것을 서브 쿼리라 한다.

JOIN이란? 두 개 이상의 테이블의 정보를 결합해 원하는 데이터를 만들 수 있도록 돕는 메커니즘이다. JOIN을 사용하는 이유는 두 개 이상의 테이블을 결합해 유의미한 정보로 만들어내는 것이 목표이다. 예시로 게시글 테이블만으로는 게시글 작성자의 정보는 알 수 없다. 게시글 테이블과 작성자 테이블을 결합하면 더 쉽게 게시글의 정보와 회원 정보를 확인할 수 있다. 두 개의 테이블이 있다. 만약 게시글과 게시글을 작성한 회원 정보를 알고 싶다면 SELECT BO_ID, BO_TITLE, BO_CONTENT, BO_M_ID, M_ID, M_MEMBER_ID, M_NAME FROM BOARD INNER JOIN MEMBER ON BO_M_ID = M_ID; JOIN의 유형 두 개 이상의 테이블을 조인하는 여러..

집계 함수란 행들을 집계하는데 행의 개수를 세거나 평균값을 구하거나 총합을 구할 때 사용하는 함수이다. COUNT: 행의 개수 세기 COUNT(칼럼 또는 *) 만약 GOOD 테이블에서 상품의 개수를 세고 싶다면 아래와 같이 작성하면 된다. SELECT COUNT(*) AS totalelements FROM GOODS; SELECT COUNT(*) AS totalelements FROM GOODS WHERE GD_STOCK= 30000; 위의 구문은 같은 연도 같은 월의 주문들의 결제액 총합이 30000원 이상인 연도와 월을 찾는 구문이다.

WHERE과 조건식을 이용해 조건에 맞는 데이터를 필터링하여 결과를 가져오는 방법에 대해 알아보자. 조건절(WHERE) 특정 데이터들을 추출하여 사용하기 위해선 WHERE과 조건식을 사용해 필터링 한다. MEMBER 테이블 SELECT * FROM MEMBER WHERE M_ID=4; 조건식의 결과가 true인 행들만 필터링해 가져온다. 위의 식은 M_ID가 4인 행들만 가져온다. 조건식에 여러 연산자가 사용된다. =, , !=, NOT, 등등 (는 != 와 동일) 범위를 기준으로 행을 찾을 수도 있다. SELECT * FROM MEMBER WHERE M_CREATED_DATETIME BETWEEN '2030-02-02 00:00' AND '2030-02-03 00:00'; 위의 질의는 날짜가 2030/..