원티드 챌린지 백엔드 2차 - 트랜잭션 / 스토리지 엔진 / 격리수준
트랜잭션(중요)
- 작업의 완전성을 보장한다.
- 사용자의 작업셋을 모두 완벽하게 처리하거나, 처리하지 못하면 원상태로 복구한다.
- 트랜잭션 지원하는 기능 써보기]
- 커밋하기 전까지 하나의 단위
- RDB
스토리지 엔진
- myisam
- InnoDB(중요)
- 요즘은 다 innodb를 사용함
- 장점: 버퍼링 / Foreign key / transaction
- memory(서버꺼지면 날라감)
Database Lock
- 글로벌 락 : 서버 전체에 lock을 거는 것(read는 가능, wirte불가)
- 테이블 락 : 테이블에다가 lock을 걸어 조작을 못하게 하는 것
- read lock : wirte불가
- wirte lock : read 불가
- 네임드 락 : 네임드 락을 획득해야만 작업 가능
- 메타데이터 락
< InnoDB>
- 레코드락 : row에 lock을 거는 것(내가 건드리는 것 모두)
- auto increment lock : 한번에 한명씩만
Isolation level - 격리수준(중요)
- READ UNCOMMITTED
- READ COOMMITTED
- 트랜잭션이 하나면 하나만 보여야 되는데, 커밋되면 바로 불러옴
- REPEATABLE READ
- 일반적으로 사용함(위의 것 보완)
- 커밋한다고 바뀌지 않음(추가를 하든, 수정을 하든)
- SERIALIZABLE : 트랜잭션을 하면 접근 자체가 안됨
- 하나의 트랜잭션에서 락을 가지고 있는 레코드에 따른 트랜잭션이 접근할 수 없음
- 무조건 lock을 획득해야함
- 비효율적이어서 잘 안쓰고, InnoDB에서는 필요 없음