일을 하다보면.. 그러기 싫지만 강제로 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 월/주차 구하기 (1) | 2018.01.06 |
left join 시 속도 문제 (0) | 2016.12.20 |
SELECT 정렬하기 정리 (0) | 2016.12.13 |
order by varchar to int (0) | 2016.11.24 |