엔진·트랜잭션

InnoDB만 여러 문장을 하나로 커밋하거나 되돌립니다.

엔진

트랜잭션은 InnoDB에서 동작한다. MyISAM 표는 커밋과 롤백이 없으므로 앱의 표로 쓰지 않는다. 만들 때 engine=InnoDB를 붙이면 된다. 최근 MariaDB의 기본 엔진도 InnoDB다.

커밋과 롤백

start transaction;
update posts set title = '임시' where id = 1;
rollback;

rollback이면 그 트랜잭션의 변경이 사라진다. commit이면 남는다. 제목과 재고를 두 표에서 같이 바꿀 때, 둘 다 성공한 뒤에만 commit한다. 한쪽만 남으면 숫자가 어긋난다.

Spring의 서비스 메서드 하나가 이 경계를 맡기는 경우가 많다. SQL을 클라이언트에서 직접 시험할 때는 위의 세 문장으로 확인한다. Postgres의 begin과 같은 역할이다. 설명은 PostgreSQL · 인덱스·트랜잭션에 있다.

인덱스

기본 키 id에는 이미 인덱스가 있다. where에 자주 쓰는 다른 열은 인덱스를 추가한다.

create index idx_posts_title on posts (title);

인덱스는 조회를 돕는다. 행이 바뀔 때마다 그 목록도 갱신되므로, 조건에 쓰지 않는 열까지 만들지는 않는다.