MySQLでDELETE文の影響を受けた行数を確認する方法|ROW_COUNT()関数の使い方
MySQLでは、DELETE文を実行した際に「実際に何行が削除されたのか」をプログラム内で確認したい場面があります。そんなときに便利なのがROW_COUNT()関数です。この記事では、ROW_COUNT()を使ってDELETE文の影響を受けた行数を取得する手順を、サンプルコードとともに解説します。
ROW_COUNT()関数とは
ROW_COUNT()は、直前に実行されたSQLステートメントによって影響を受けた行数を返すMySQLの情報関数です。DELETEやUPDATE、INSERTの場合は実際に処理された行数を返し、SELECT文の後など行数が定義されないケースでは-1を返します。
1. サンプルテーブルを作成する
まず、動作確認用のテーブルを作成しましょう。
mysql> create table rowAffectedByDeleteDemo
-> (
-> CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CustomerName varchar(20)
-> );
Query OK, 0 rows affected (0.86 sec)
2. テストデータを挿入する
INSERTコマンドを使って、複数のレコードを追加します。
mysql> insert into rowAffectedByDeleteDemo(CustomerName) values('John');
Query OK, 1 row affected (0.14 sec)
mysql> insert into rowAffectedByDeleteDemo(CustomerName) values('Carol');
Query OK, 1 row affected (0.10 sec)
mysql> insert into rowAffectedByDeleteDemo(CustomerName) values('Bob');
Query OK, 1 row affected (0.09 sec)
mysql> insert into rowAffectedByDeleteDemo(CustomerName) values('Sam');
Query OK, 1 row affected (0.09 sec)
mysql> insert into rowAffectedByDeleteDemo(CustomerName) values('David');
Query OK, 1 row affected (0.08 sec)
mysql> insert into rowAffectedByDeleteDemo(CustomerName) values('Maxwell');
Query OK, 1 row affected (0.09 sec)
mysql> insert into rowAffectedByDeleteDemo(CustomerName) values('Ramit');
Query OK, 1 row affected (0.08 sec)
mysql> insert into rowAffectedByDeleteDemo(CustomerName) values('James');
Query OK, 1 row affected (0.10 sec)
3. 登録されたデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from rowAffectedByDeleteDemo;
実行結果は以下の通りです。
+------------+--------------+ | CustomerId | CustomerName | +------------+--------------+ | 1 | John | | 2 | Carol | | 3 | Bob | | 4 | Sam | | 5 | David | | 6 | Maxwell | | 7 | Ramit | | 8 | James | +------------+--------------+ 8 rows in set (0.00 sec)
4. 削除前のROW_COUNT()の値を確認する
行を削除する前にROW_COUNT()を実行すると、次のように-1が返されます。これは直前のステートメントがSELECTであり、影響を受けた行数が存在しないためです。
mysql> select row_count();
+-------------+ | row_count() | +-------------+ | -1 | +-------------+ 1 row in set (0.00 sec)
5. DELETE文を実行する
続いて、CustomerIdが3〜6のレコードを削除します。条件はOR演算子(ここでは「||」)で連結しています。
mysql> delete from rowAffectedByDeleteDemo where CustomerId =3 || CustomerId =4 || CustomerId =5 || CustomerId =6; Query OK, 4 rows affected (0.13 sec)
この時点で「4 rows affected」と表示されており、4行が削除されたことがわかります。
6. 削除後のROW_COUNT()の値を確認する
削除後にROW_COUNT()を実行すると、以下のように4が返されます。これにより、DELETE文によって正確に4行が影響を受けたことをプログラム側から確認できます。
mysql> select row_count();
+-------------+ | row_count() | +-------------+ | 4 | +-------------+ 1 row in set (0.00 sec)
まとめ
ROW_COUNT()を使えば、DELETE文だけでなくUPDATE文やINSERT文の影響を受けた行数も同様に取得できます。アプリケーションからMySQLを操作する際の処理結果チェックやログ出力などにも活用できるので、ぜひ覚えておきましょう。なお、アプリケーションから接続している場合は、各言語のドライバ(PHPのmysqli_affected_rows()や、JDBCのexecuteUpdate()の戻り値など)でも同じ情報を取得できます。
-
【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
-
【Java】文字列の最初の文字が数字かどうかを判定する2つの方法
方法1:Character.isDigit()メソッドを使う java.lang.CharacterクラスのisDigit()メソッドは、引数としてchar型の文字を受け取り、その文字が数字(0~9)であるかどうかを判定します。数字であればtrueを、それ以外の場合はfalseを返します。 文字列の最初の文字が数字かどうかを確認するには、次の手順に従います。 charAt()メソッド:Stringクラスのこのメソッドは、インデックスを表す整数値を引数に取り、指定した位置の文字を返します。先頭の文字はcharAt(0)で取得できます。 toCharArray()メソッド:Stringクラスの