MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLクエリで影響を受けた行数の合計を取得する方法

MySQLでは、ROW_COUNT()関数を使用することで、クエリによって影響を受けた行の総数を取得できます。ROW_COUNT()は、直前に実行されたステートメント(INSERT、UPDATE、DELETEなど)によって変更された行数を返す関数です。

ここでは具体的な使い方を紹介するために、テーブルへレコードを挿入し、実際に何行が影響を受けたのかを表示するストアドプロシージャを作成してみましょう。

ストアドプロシージャの作成例

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)

処理の流れ

このプロシージャでは、以下の手順で処理を行っています。

1. 引数として渡されたSQL文を変数@queryに格納する
2. PREPAREステートメントでSQLを準備し、EXECUTEで実行する
3. ROW_COUNT()を実行して、影響を受けた行数を取得・表示する

実行結果の確認

上記の結果セットを見ると、「testing123」テーブルにデータを挿入した結果、1行が影響を受けたことがわかります。このようにROW_COUNT()を活用すれば、動的に実行したSQL文がどれだけの行に影響を与えたのかを簡単に確認できます。

なお、ROW_COUNT()はDML文(INSERT、UPDATE、DELETE)の直後に呼び出す必要があります。別のステートメントを実行した後では、正しい行数を取得できない点に注意してください。

  1. 【MySQL】最後のクエリの総行数を取得する方法:SQL_CALC_FOUND_ROWSとFOUND_ROWS()の使い方

    MySQLでは、FOUND_ROWS()関数を使うことで、直前に実行したクエリが該当させた全行数を簡単に取得できます。この記事では、SQL_CALC_FOUND_ROWSと組み合わせた具体的な使い方を、実例とともにわかりやすく解説します。基本構文LIMIT句で表示件数を制限しながら、条件に一致する全行数を把握したい場合は、SELECT文にSQL_CALC_FOUND_ROWSを付けて実行します。基本構文は以下の通りです。SELECT SQL_CALC_FOUND_ROWS TABLE_NAME FROM `information_schema`.tables WHERE TABLE_NAME

  2. 【MySQL】1つのクエリで複数の行を取得する方法(IN演算子の使い方)

    概要MySQLで1つのクエリだけで複数の行を取得したい場合は、IN演算子を使用します。WHERE句の中で IN(値1, 値2, …) のようにカンマ区切りで条件を指定すると、いずれかの値に一致するすべての行をまとめて取得できます。本記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。1. テーブルを作成するまず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable(    Id int,    Name varchar(100));Que