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)の直後に呼び出す必要があります。別のステートメントを実行した後では、正しい行数を取得できない点に注意してください。
-
【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
-
【MySQL】1つのクエリで複数の行を取得する方法(IN演算子の使い方)
概要MySQLで1つのクエリだけで複数の行を取得したい場合は、IN演算子を使用します。WHERE句の中で IN(値1, 値2, …) のようにカンマ区切りで条件を指定すると、いずれかの値に一致するすべての行をまとめて取得できます。本記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。1. テーブルを作成するまず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable( Id int, Name varchar(100));Que