Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 쿼리 실행 시 ON UPDATE 이벤트 발생 여부 감지하는 방법

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 구문에서 삽입과 업데이트 중 어떤 작업이 수행되었는지 손쉽게 판별할 수 있습니다.