일을 하다보면.. 그러기 싫지만 강제로 DB에 접속해서 쿼리로 업데이트를 해야할때가 많다.

그럴때마다 나는 그냥 쫄아있는 상태로 손을 벌벌 떨면서 ... update table set column = 0 where flag = 1; 과 같은걸 날리고 데이터를 확인하고는 했다.

하지만 그럴때 덜 쫄 수 있는 방법이 있다. 방법은 트랜잭션을 사용하는 것이다. 

R을 제외한 CUD를 칠때는 다음과 같은 방법을 쓴다.

1. 정상적으로 작업했을 때 나오는 카운트 수를 본다. 

select count(*) as c from table where flag = 1;

그럼 쿼리가 실행되면서 몇건인지가 나온다. 그 몇 건을 봐둔다. 

2. 다음과 같은 문구를 미리 작성해둔다. 주석도 포함해서

# start transaction;

# update table set column = 0 where flag = 1; 

# rollback;

# commit;

3. 주석을 하나씩 풀어가면서 진행한다. 우선 트랜잭션을 실행시킨다. 

start transaction; (실행)

# update table set column = 0 where flag = 1; 

# rollback;

# commit;

4. 원래 돌리려고 했던 업데이트 문 실행
update table set column = 0 where flag = 1; 

5. 이때 affected rows가 맨 첨에 날린 카운트수와 일치하는지 본다. 시간 차이가 있겠으나 뭐 얼추 비슷한 값이 나올것이다. 

6. 만약 이상함을 감지했다면 당황하지 않아도 된다. rollback 시키기

rollback;

이렇게 하면 내가 update문을 치기 전으로 돌아간다. 트랜잭션을 걸어놓았으니까 말이다. 

7. 정상적이었다면? commit하기!

commit;을 실행시켜준다. 그러면 끝이당.

'개발개발 > mySql' 카테고리의 다른 글

insert와 bulk insert 무엇을 써야할까요?  (1) 2018.10.04
mysql 월/주차 구하기  (0) 2018.01.06
left join 시 속도 문제  (0) 2016.12.20
SELECT 정렬하기 정리  (0) 2016.12.13
order by varchar to int  (0) 2016.11.24

+ Recent posts