<aside> 💡 실패하는 트랜잭션을 만들면 안됨.

</aside>

트랜잭션은 데이터베이스에서 수행되는 하나의 논리적인 작업 단위를 말합니다. 트랜잭션은 데이터베이스의 일관성과 무결성을 보장하기 위해 사용됩니다. 일련의 데이터베이스 작업들을 논리적으로 묶어서 하나의 트랜잭션으로 처리함으로써, 작업의 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)을 유지할 수 있습니다.

트랜잭션은 다음과 같은 특징을 가지고 있습니다:

  1. 원자성(Atomicity): 트랜잭션 내의 작업들은 모두 성공하거나 모두 실패해야 합니다. 어느 하나의 작업이라도 실패할 경우, 트랜잭션은 롤백되어 이전 상태로 복원됩니다. 모든 작업이 성공할 경우에만 트랜잭션은 커밋되어 영구적으로 적용됩니다.
  2. 일관성(Consistency): 트랜잭션이 실행되기 전과 실행된 후의 데이터베이스 상태는 일관성이 유지되어야 합니다. 데이터베이스에 정의된 제약 조건들을 위배하지 않아야 합니다.
  3. 고립성(Isolation): 동시에 여러 트랜잭션이 실행될 때, 각 트랜잭션은 서로에게 영향을 주지 않고 독립적으로 실행되는 것처럼 보여야 합니다. 다른 트랜잭션의 작업이 완료되기 전까지는 해당 작업의 결과를 다른 트랜잭션에서 볼 수 없어야 합니다.
  4. 지속성(Durability): 트랜잭션이 커밋되면, 해당 트랜잭션의 결과는 영구적으로 데이터베이스에 저장되어야 합니다. 시스템 장애 또는 전원 손실과 같은 예기치 않은 상황이 발생해도 데이터의 지속성을 보장해야 합니다.

트랜잭션은 데이터베이스 시스템에서 중요한 개념으로, 데이터의 일관성과 무결성을 유지하는 데에 필수적입니다.

트랜잭션으로 묶는다는것은 일의 최소단위로 묶는다는 이야기이다.

만약 내가 읽는중에 누가 쓰거나 삭제한다면 읽을 수 없게되니까

이걸 하난의 트랜잭션으로 묶어서 내가 읽는동안 트랜잭션을 걸어서

그 행위를 못하게 만들어야 한다.

select는 여러 클라이언트가 동시에 접속하여도 괜찮지만

insert를 여러명이 동시에 하면 안되니까 락을 걸어버림

즉 insert같은 db에 변형을 주는 요청은 동시에 들어오면

다른 클라이언트는 wait가 걸린다.