[MySQL] 트랜잭션 격리 수준(isolation level)
·
DataBase/MySQL
경쟁상태 (Race Condition) 여러 클라이언트가 같은 데이터에 동시 접근 시 생기는 문제 트랜잭션의 격리성(Isolation) 이란? 여러 Transaction은 동시에 수행될 수 있다. 이때 각 Transaction은 다른 Transaction의 연산 작업이 끼어들지 못하도록 보장하여 각각의 트랜젝션은 서로 간섭 없이 독립적으로 수행되어야 한다. 현재 수행 중인 트랜잭션이 완료될 때까지 다른 트랜잭션들이 중간 연산 결과에 접근할 수 없음을 의미한다. 따라서 동시에 수행되는 transaction이 동일한 data를 가지고 충돌하지 않도록 제어해줘야 한다. 이를 동시성제어(concurrency control) 라고한다. 즉, 격리성을 보장하기 위해서는 여러 트랜잭션이 동시에 수행되더라도 마치 순서..
[MySQL] 스토리지 엔진 수준의 락의 종류(레코드 락, 갭 락, 넥스트 키 락, 자동 증가 락)
·
DataBase/MySQL
스토리지 엔진 수준의 락의 종류 MySQL에서 사용되는 락은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다. 스토리지 엔진 레벨의 잠금은 테이블의 데이터를 다루기 위한 락이며, MySQL 엔진 레벨의 잠금은 테이블이나 데이터베이스 등과 같은 부분을 위한 락에 해당한다. 그리고 이번에 살펴볼 잠금은 스토리지 엔진 레벨(테이블의 데이터를 다루기 위한)의 잠금이다. 레코드 락(Record Lock) 갭 락(Gap Lock) 넥스트 키 락(Next Key Lock) 자동 증가 락(Auto Increment Lock) 레코드 락(Record Lock) 일반적으로 레코드 락은 테이블 레코드 자체를 잠그는 락을 의미한다. 레코드 수준의 잠금은 상당히 작은 공간으로 관리되기 때문에 레코드 락이 페이지..
[MySQL] Select 조건절 정리
·
DataBase/MySQL
DML에서 select는 너무 자주 사용되는 쿼리문이다. 그래서 이를 한번 싹~ 정리해보고자 포스팅을 작성한다. 우선 Select의 기본 사용법은 아래와 같다. SELECT FROM [ WHERE condition ] [ GROUP BY ] [ HAVING condition ] [ ORDER BY ]; 사실 SELECT ... FROM ... WHERE 에 가장 익숙할 것이다. 가장 자주 사용하는 키워드이기 때문이다. 그래서 WHERE절에서 사용할 수 있는 조건문, GROUP BY - HAVING 절과 ORDER BY에 대해 알아볼 예정이다. 비교 연산자 비교 연산자 설명 = 왼쪽 피연산자와 오른쪽 피연산자가 같으면 참을 반환함. !=, 왼쪽 피연산자와 오른쪽 피연산자가 같지 않으면 참을 반환함. = ​..
[MYSQL] LIMIT / OFFSET 쿼리 & Paging 처리
·
DataBase/MySQL
limit 결과 중 처음부터 몇개만 가져오기 SELECT * FROM 테이블명 LIMIT 10; -- 처음 부터 10개만 출력하기 (1 ~ 10) SELECT * FROM 테이블명 LIMIT 100, 10; -- 100번째부터 그 후 10개 출력하기 (101 ~ 110) offest 어디서 부터 가져올지 SELECT * FROM 테이블명 ORDERS LIMIT 20 OFFSET 5; -- 5번째 행 부터 25행 까지 출력 (6 ~ 25) -- limit 5, 20 과 같다고 보면 된다. SELECT * FROM 테이블명 ORDERS LIMIT 5, 20 페이징 처리하기 사이트를 만들다보면 무조건 최소 한번은 Paging 을 처리해야하는 화면이 있다. Mysql 에서는 Limit 과 offset 을 제공하..
[MySQL] 파티션(Partition) 개념 & 사용법
·
DataBase/MySQL
파티션(partition) Partition이란 논리적으로 하나의 테이블이지만 실제로는 여러 개의 테이블로 분리해서 관리하는 기법을 말한다. 마치 동일한 형식의 한 개의 테이블을 사용하고 있는 것 같지만, 실제적으로는 여러 개의 물리 파일로 데이터들을 분할하여 보관하는 방식이다. Partition은 주로 대용량의 테이블을 물리적으로 여러 개의 소규모 테이블로 분산하는 목적으로 사용한다. 개념 정리 ​대량의 데이터를 테이블에 저장할 때, 물리적으로 별도의 테이블로 분리해서 저장시키는 기법을 말한다. 단, mysql은 내부적으로 분리되어 처리되기 때문에, 파티션이 얼마나 있든 사용자는 하나의 테이블로 보인다. 특정 DML과 Query의 성능을 향상시키고, 주로 데이터가 실시간으로 쌓이는 데이터베이스 환경에서..
[MySQL] 트리거(Trigger) 개념 & 사용법
·
DataBase/MySQL
Trigger (트리거) 트리거(Trigger)는 사전적 의미로 '방아쇠'라는 뜻이다. MySQL에서 트리거는 테이블에서 어떤 이벤트가 발생했을 때 자동으로 실행되는 것을 말한다. 즉, 어떤 테이블에서 특정한 이벤트(update, insert, delete)가 발생했을 때, 실행시키고자 하는 추가 쿼리 작업들을 자동으로 수행할 수 있게끔 트리거를 미리 설정해 두는 것이다. 예를 들어 고객이 물건을 구매해 구매 테이블에 정보가 insert되면, 등록된 트리거가 발동해 물품 테이블을 자동으로 update 쿼리문을 실행하게 하고, 또 등록된 트리거가 발동해 배송테이블에 insert 쿼리문을 실행시키게 끔 할 수 있다. 데이터베이스 트리거(Database Trigger)는 테이블에 대한 이벤트에 반응해 자동으로..