데이터 일괄 삭제 작업과 관련해 transaction을 이용해 처리하는 stored procedure가 있었다.
로직을 좀 변경한 뒤에 테스트를 하려고 하는데, 다 지워버리면 다시 테스트하기가 어려워 transaction을 걸고 테스트 후 rollback할 생각으로 테스트를 했는데...

예상과는 다르게 trasaction이 rollback이 되지 않는 것이었다. --;;
원인은 drop table!!

fk가 걸린 테이블이 있어 지우고자 하는 원본 데이터를 임시테이블에 담아 지우는 로직이 있는데, 거기서 기존 임시테이블 남아있으면 안되서, drop table을 하고 있었는데 이 drop table문의 경우에는 transaction이 시작되면 기존 transaction을 commit하고 수행해버린 것이다.

그래서 메뉴얼을 찾아봤는데...
Note

DROP TABLE automatically commits the current active transaction, unless you use the TEMPORARY keyword.


이렇게 잘 나와있었다.

그런데 마지막 부분에... unless use the TEMPORARY keyword!!

테이블을 만들 땐 CREATE TEMPORARY로 잘 만들고는 drop할때는 drop table을 한것이다.

상황에따라 다르겠지만, 임시테이블의 경우에는 transaction처리가 문제없이 된다는 점을 잘 알아둬야겠다.


TEMPORARY table의 경우에는 drop문도 transaction 처리가 가능하다!

+ Recent posts