Transcation
select @@autocommit;
set autocommit = false;
create database sampleDB;
create table BusinessCard(Name varchar(255), Address varchar(255), Telephone varchar(255));
insert into BusinessCard values ('Bob', 'Seocho-dong 123', '123-4567');
commit;
rollback;
Lock
select engine, support from information_schema.engines where support='DEFAULT';
set default_storage_engine = InnoDb;
set default_storage_engine = MyISAM;
select engine from information_schema.tables where table_name = 'city' and table_schema='world';
alter table 'city' engine = InnoDB;
Isolation level
select @@tx_isolation;
set tx_isolation = 'READ-COMMITED';
commit;
트랜잭션의 격리수준 Transcation IsolationLevel
ACID ( Atomicity / Consistency / Isolation / Durability )
- 원자성 Atomicity : All or Nothing, Commit / Rollback
- 일관성 Consistency : 트랜잭션 전후에 데이터가 손상을 받으면 안됨, 같은 데이터가 다른 값을 가지면 안됨
- 고립성/격리수준 Isolation : 여러 개의 트랜잭션이 수행될 때 성능과 데이터 안정성간의 trade-off
- 지속성 Durability : 트랜잭션이 종료된 이후에도 데이터에 문제가 없어야 됨
Read Uncommitted
- 트랜잭션이 종료되지 않는 상태의 대상 데이터를 읽어가는 것
- 트랜잭션이 처리되는 도중에 다른 트랜잭션이 해당 데이터를 읽기를 허용 ( uncommitted date )
- 트랜잭션이 종료되면 데이터 값이 변경 될 수 있음
- 예를 들면 개표가 진행 중인 득표 현황으로 현재 값을 참고하지만 최종 값은 변경 될 수 있음
- 성능은 높지만 데이터의 안정성이 떨어짐
Read Committed
- 트랜잭션이 종료 된 상태의 데이터만 읽는 것 ( committed data )
- 오라클이나 일반적인 DBMS 의 기본 격리수준
- 현재 트랜잭션이 진행되면서 데이터를 참고할 때 다른 트랜잭션에서는 작업이 종료된 데이터만을 읽는 다는 것
- 이 경우 트랜잭션에서 동일한 쿼리는 여러 번 수행시킬 때 쿼리 값이 달라지는 경우가 생길 수 있음
- 이 경우를 해결해 주는 것이 Repeatable Read
Repeatable Read
- 트랜잭션이 진행되는 도중에는 쿼리를 반복 수행하더라도 결과 값은 계속 동일
- 즉, 데이터가 캐싱/버퍼링 됨
- DB 백업 시간이 오래 걸릴 경우 백업이 진행되는 도중에는 데이터가 수정되어도 백업 시작 시점의 데이터를 백업하도록 함
- 다른 트랜잭션이 업데이트하는 것은 금지하지만 레코드 추가하는 것은 허용하는 방식
- MariaDB 의 기본 격리 수준
Serializable
- 트랜잭션끼리 겹치는 일이 발생하지 않음
- 트랜잭션이 동시에 수행되는 것이 금지되고 순차적으로 수행됨
- 대신 성능이 가장 낮음, 안정성은 높음
CAP ( Consistency / Availability / Partition Tolerance )