Unexpected update count received (Actual: 0 Expected: 1). All changes will be rolled back.

GUI 동작의 쿼리 실패는 왜 발생하는가
김주혁's avatar
Jun 26, 2024
Unexpected update count received (Actual: 0 Expected: 1). All changes will be rolled back.
 
AWS Glue etl Schedule Job을 통해 데이터 베이스에 통계 차트용 데이터를 정제 후 삽입하는 작업이 있는데, 해당 작업의 날짜 값을 임의 조정한 후 돌려 놓지 않아 같은 날짜에 두 번 데이터가 삽입됐다.
 
해당 데이터를 삭제하고 다시 조정하여 데이터를 삽입하려던 중 해당 에러가 발생했다.
Unexpected update count received (Actual: 2 Expected: 1). All changes will be rolled back.
 
해당 데이터는 id도 없고, 따로 구분값을 기록하지 않고 온전히 통계용으로만 사용하는 테이블이었는데 해당 테이블 생성과정에서 따로 전달받은 바 없이 나는 물려받았기 때문에 어떤 문제인지 감을 못잡고 있다가
 
단순 조건으로 해당 생성일자(yyyy-dd-mm)의 데이터를 삭제하고 다시 조정하여 넣으려고 삭제하니 삭제가 됐다.
 
대부분의 개발 적 문제는 텍스트 속에 답이 있는데, 잘 읽어보면 기대한 것은 1개인데 실제로는 2개가 있다고 한다.
 
중복데이터를 구분할 방법이 없어, GUI 상에서는 1개를 지우려고 쿼리를 돌렸으나 실제 affectRow가 2개였기 때문에 올바른 요청이 아니라 실패한 것이다.
DELETE FROM table WHERE date = '2024-06-19' AND value = 3
데이터 그립에서 특정 데이터만을 삭제하려고 Delete Row를 눌렀을 때 위 쿼리가 실행되는데 GUI 상으로 1개만 을 삭제 했는데 실제로 2개의 row가 탐색되어 삭제되려고 할 때 에러가 발생한다는 것이다.
 
즉, GUI 상에서의 동작이나 쿼리 구문의 실행시키려는 동작과 실제 결과가 다를 때 해당 에러가 발생한다.
방법은 중복이나, 원인과 다른 결과를 찾아 해결하는 것 밖에 없다.
 
나의 경우 완전히 똑같은 row를 가지고 있는 중복 데이터들을 해당 날짜의 데이터를 모두 삭제한 뒤 다시 넣는 것으로 해결했다.
 
Share article

vlogue