MySQL에서는 row_count() 함수를 사용하여 INSERT ... ON DUPLICATE KEY UPDATE 쿼리 실행 시 실제로 어떤 동작이 일어났는지 확인할 수 있습니다.
row_count() 반환값의 의미
- 1을 반환하는 경우: 새로운 레코드가 삽입된 것입니다. 즉, ON UPDATE 이벤트가 발생하지 않았습니다.
- 2를 반환하는 경우: 기존 레코드가 업데이트된 것입니다. 즉, 쿼리 실행과 함께 ON UPDATE 이벤트가 발생했습니다.
기본 문법
select row_count();
실습 예제
1단계: 테이블 생성
먼저 테스트에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1512
-> (
-> Value int ,
-> UNIQUE(Value)
-> );
Query OK, 0 rows affected (0.60 sec)Value 컬럼에 UNIQUE 제약 조건을 설정했기 때문에 중복 값 입력 시 ON DUPLICATE KEY UPDATE 절이 동작하게 됩니다.
2단계: 첫 번째 레코드 삽입
insert 명령어를 사용해 레코드를 삽입합니다.
mysql> insert into DemoTable1512 values(90) on duplicate key update Value=Value+10; Query OK, 1 row affected (0.09 sec)
3단계: ON UPDATE 이벤트 발생 여부 확인
위 쿼리 실행 후 row_count() 함수로 결과를 확인합니다.
mysql> select row_count();
실행 결과는 다음과 같습니다.
+-------------+ | row_count() | +-------------+ | 1 | +-------------+ 1 row in set (0.00 sec)
반환값이 1이므로 이번에는 새 레코드가 삽입된 것이며, ON UPDATE 이벤트는 발생하지 않았습니다.
4단계: 동일한 레코드 재삽입
이번에는 같은 값을 한 번 더 삽입해 보겠습니다.
mysql> insert into DemoTable1512 values(90) on duplicate key update Value=Value+10; Query OK, 2 rows affected (0.12 sec)
이번에는 "2 rows affected" 메시지가 출력되었습니다. 이는 중복 키로 인해 기존 레코드가 업데이트되었음을 의미합니다.
5단계: 결과 확인
다시 row_count() 함수로 확인해 보겠습니다.
mysql> select row_count();
실행 결과는 다음과 같습니다.
+-------------+ | row_count() | +-------------+ | 2 | +-------------+ 1 row in set (0.00 sec)
정리
반환값이 2이므로 이번에는 ON UPDATE 이벤트가 발생한 것입니다. 이처럼 row_count() 함수를 활용하면 INSERT ... ON DUPLICATE KEY UPDATE 구문에서 삽입과 업데이트 중 어떤 작업이 수행되었는지 손쉽게 판별할 수 있습니다.