: 트랜잭션이란 SQL 쿼리문으로 예를 들면, 여러개의 쿼리 단위가 실행될 때, 일부만 commit되고, 일부는 commit되지 않는 현상을 방지하기 위한 기능으로, 작업의 완전성을 보장해주기 위한 것이다.
: Lock은 트랜잭션과는 달리 동시에 수정 쿼리가 들어왔을 때 그 순서를 유지하기 위한 기능이다. 예를 들어, transaction A가 update 요청을 하고, 동시에 tansaction B가 update요청을 했다면, 둘중에 먼저 들어온 요청에 Lock을 걸고 나중에 들어온 요청은 waiting 상태로 두게 된다. 그 다음에 lock을 걸어놓은 트랜잭션이 commited 되면 다시 lock을 풀고, 그 다음 트랜잭션의 요청에 락을 걸게 된다. 정리해보면, 락은 한시점에 하나의 커넥션만 변경할 수 있도록 해주는 것이고, 트랜잭션은 데이터의 정합성을 위한 기능이다.
: DeadLock이란 예를 들어, transaction A가 id=201에 대해서 update 요청을 했을 때, 아직 commit을 하지않은채로 있다면 락이 걸려있을 것이다. 이 때, 이렇게 아직 commit되지 않았을 때 또다른 transaction B가 id=305에 대해서 update요청을 보내오면 이 tansaction B에 대해서도 역시 락이 걸릴 것이다. 그렇게되면 tansaction A,B가 lock이 풀릴 때까지 서로를 기다리게되는 상황이되는데 이러한 상황을 데드락이라고 한다. 이는 강제적으로 풀어주지 않는 이상 그대로 유지되는 교착상태인데, 사다리를 내려오려는 사람과 올라가려는 사람이 같은 사다리에서 만났을 때를 비유해볼 수 있다. 서로가 지나가기를 기다리지만, 지나갈 수 없어서 무한히 기다리는 상황이라고 할 수 있다.
:: 참고하면 좋을 블로그