더북(TheBook)

이번 UPDATE 문장은 오류가 나지 않았습니다. 이전 문장과 달라진 점은 ORDER BY 절을 추가한 것뿐입니다. UPDATE 문에서 ORDER BY 절을 추가하면 명시한 칼럼 순으로 값이 수정됩니다. ORDER BY emp_no DESC는 emp_no 값을 기준으로 내림차순 정렬하라는 의미입니다. 따라서 이 문장에서는 1019가 먼저 수정되고 1018이 나중에 수정됩니다. 1019는 1을 더해 1020이 되고, 1018은 1019가 되겠죠. 그러면 1019가 1020으로 변경되어 1018을 1019로 수정하려고 할 때 중복 값이 없으므로 문제없이 정상적으로 처리됩니다.

값을 수정한 후 테이블을 조회하면 emp_no 값이 각각 1019와 1020으로 변경된 것을 확인할 수 있습니다. 하지만 ORDER BY emp_no라고 작성한다면 오름차순 정렬이므로 이전과 동일한 오류가 발생합니다.

사실 이런 UPDATE 문은 사용하지 않는 게 좋습니다. 기본 키로 설정된 칼럼 값을 수정하기 때문이죠. 기본 키 칼럼은 테이블의 기본이 되는 값인데, 이 값을 변경한다는 것은 데이터 관리 입장에서 보면 테이블의 근본을 흔드는 일입니다. 이미 부여된 사번을 변경한다는 것 자체가 정상적인 상황은 아니니까요. 예를 들어 사원의 부서 할당 정보가 있는 dept_emp 테이블에 이미 1018이란 사번으로 데이터가 저장되어 있는데, 사원 정보 테이블에서 1018이란 값을 다른 값으로 변경한다면 dept_emp 테이블에 있는 1018건은 미아 데이터가 되어 버립니다.

따라서 기본 키 칼럼 값은 되도록 수정하지 않는 것이 좋습니다. 그리고 사원과 사원 부서 할당 테이블처럼 서로 참조 관계에 있는 테이블을 구성할 때 전자를 부모 테이블로, 후자를 자식 테이블로 구성해서 외래 키를 설정하면 기본 키 칼럼이 변경되는 것을 방지할 수 있습니다. 외래 키가 설정되어 있다면 코드 10-18의 UPDATE 문을 실행할 때 오류가 발생해 값이 수정되지 않습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.