mysql transaction관련 db반영시기

sunn_ni·2024년 6월 14일
0

새로운 기능을 만들기전 어떻게 만들까 하고 사수와 얘기를 하던 도중이였다.
transaction범위에 대해 얘기하고 아 그럼 추가될 기능을 코드 어디쯤부터 넣어야할까 순서에 대한 얘기를 하고 있었는데, 이 transaction시에 update/delete 시기 관련해서 깊은 오해가 있음을 깨달았다.

그동안에 디버깅을 했었을때 의도한 대로 잘 돌아갔어서 눈치를 채지 못했었는데,
의식적으로 그 시기에 대해 생각을 하다보니 update/delete는 당연히 commit과 동시에 이뤄지기 때문에,
변경된 값을 확인하기 위해서는

update/delete -> commit -> select 해야 반영된 값을 가져올 수 있다고 생각을 해버린것이다.

다른분들은 이렇게 생각하지 마시라고.. 블로그에 창피하지만 작성을 해본다.

맞아요.. commit과 동시에 DB에 반영되는것이 맞습니다.
다만, 한 transaction범위 내에서 update/delete 이후 commit전 select을 해도 수정된 상태가 select이 됩니다.
DB에 반영이 안 될 뿐이에요..

예를들어, A의 돈이 1000원 있다 하자.
transaction시작 하고 A돈 2000원으로 업데이트를 했다고 하자. 이때, 아직 commit은 하지 않았다.

A가 transaction내에서 A의 돈을 출력하면 2000원으로 출력하지만,
다른 B가 해당 transaction범위 밖에서 동시에 A의 돈을 출력하면 1000원이 출력된다는 것이다.

기본기를 탄탄히 하자..

profile
방황중인 서버개발자

0개의 댓글