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

MySQL 쿼리로 영향받은 총 행 수 확인 방법 – ROW_COUNT() 함수 활용하기

MySQL에서 ROW_COUNT() 함수를 사용하면 직전에 실행한 쿼리로 인해 영향을 받은 총 행 수를 간편하게 확인할 수 있습니다. 이해를 돕기 위해, 테이블에 레코드를 삽입하고 그 결과로 몇 개의 행이 변경되었는지 반환하는 저장 프로시저를 만들어 보겠습니다.

ROW_COUNT() 활용 예시

먼저 전달받은 SQL 문장을 동적으로 실행하고, 영향받은 행 수를 결과로 출력하는 프로시저를 생성합니다.

mysql> Delimiter //
mysql> CREATE PROCEDURE `query`.`row_cnt` (IN command VarChar(60000))
    -> BEGIN
    ->     SET @query = command;
    ->     PREPARE stmt FROM @query;
    ->     EXECUTE stmt;
    ->     SELECT ROW_COUNT() AS 'Affected rows';
    -> END //
Query OK, 0 rows affected (0.00 sec)

mysql> Delimiter ;
mysql> Create table Testing123(First Varchar(20), Second Varchar(20));
Query OK, 0 rows affected (0.48 sec)

mysql> CALL row_cnt("INSERT INTO testing123(First,Second) Values('Testing First','Testing Second');");
+---------------+
| Affected rows |
+---------------+
|             1 |
+---------------+
1 row in set (0.10 sec)

Query OK, 0 rows affected (0.11 sec)

결과 해석

위 결과 집합을 보면 'testing123' 테이블에 데이터를 삽입한 후 1개의 행이 영향을 받았음을 확인할 수 있습니다. 프로시저 내부에서는 매개변수로 전달받은 SQL 문장을 PREPAREEXECUTE로 실행한 뒤, 곧바로 ROW_COUNT()를 호출하여 그 값을 'Affected rows'라는 별칭과 함께 출력합니다.

ROW_COUNT() 사용 시 참고 사항

  • ROW_COUNT()는 가장 최근에 실행된 문장의 결과만 반환하므로, 다른 쿼리를 실행하기 전에 즉시 호출해야 정확한 값을 얻을 수 있습니다.
  • INSERT, UPDATE, DELETE 같은 DML 문에서는 실제로 변경·삭제·삽입된 행 수를 반환합니다.
  • CREATE, DROP 등 DDL 문장에서는 항상 0을 반환합니다.
  • SELECT 문처럼 결과 집합을 반환하는 경우에는 -1을 반환할 수 있으며, 이때 조회된 행 수가 필요하다면 FOUND_ROWS() 함수를 함께 고려하는 것이 좋습니다.