더북(TheBook)

코드 10-21

INSERT INTO emp_update2
SELECT emp_no, emp_name, hire_date, salary
  FROM emp_update1 a
 WHERE emp_no BETWEEN 1003 AND 1005
    ON DUPLICATE KEY UPDATE emp_name = a.emp_name, salary = a.salary;

SELECT *
  FROM emp_update2;

실행결과

코드 10-21의 INSERT 문은 emp_update1 테이블에서 사번이 1003에서 1005 사이에 있는 3건을 읽어 와서 emp_update2 테이블에 넣는 문장입니다. 그런데 emp_update2 테이블에는 이미 1001~1004까지 데이터가 저장되어 있죠. 따라서 새로 넣는 데이터 중 1003과 1004는 중복 값이므로 오류가 발생해야 합니다. 그런데 ON DUPLICATE KEY UPDATE 구문 때문에 이 두 건은 데이터를 새로 입력하지 않고 emp_name과 salary 칼럼 값을 emp_update1 테이블의 값으로 변경합니다.

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