MariaDBでは、ROW_COUNT()
は、前のステートメントによって更新、挿入、または削除された行数を返す組み込み関数です。
ROW_COUNT()
によって返される値 mysql
の行数と同じです クライアントが表示し、mysql_affected_rows()
からの値 CAPI関数。
構文
構文は次のようになります:
ROW_COUNT()
引数は必要ありません、または受け入れられません。
例
DDLステートメント
DDLステートメントの場合(TRUNCATE
を含む )および結果セットを返さないその他のステートメント(USE
など) 、DO
、SIGNAL
またはDEALLOCATE PREPARE
)、ROW_COUNT()
関数は0
を返します 。
テーブルを作成しましょう:
CREATE OR REPLACE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
結果:
Query OK, 0 rows affected (0.046 sec)
そして、ROW_COUNT()
を実行します :
SELECT ROW_COUNT();
結果:
+-------------+ | ROW_COUNT() | +-------------+ | 0 | +-------------+
予想通り、0
影響を受けた行がゼロであるため、が返されます。
DMLステートメント
SELECT
以外のDMLステートメントの場合 およびALTER TABLE
、ROW_COUNT()
関数は影響を受ける行の数を返します。
以下にいくつかの例を示します。
データを挿入
次に、いくつかの行を挿入しましょう:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
結果:
MariaDB [Zap]> INSERT INTO guest (guest_name) VALUES ('Homer'); Query OK, 1 row affected (0.037 sec) MariaDB [Zap]> INSERT INTO guest (guest_name) VALUES ('Bart'); Query OK, 1 row affected (0.001 sec) MariaDB [Zap]> INSERT INTO guest (guest_name) VALUES ('Marge'); Query OK, 1 row affected (0.002 sec)
各ステートメントの結果、1つの行が影響を受けました。
そして、ROW_COUNT()
を実行しましょう もう一度:
SELECT ROW_COUNT();
結果:
+-------------+ | ROW_COUNT() | +-------------+ | 1 | +-------------+
これは1
を返します これは、最後のステートメントで影響を受けた行の数だからです。 3つの行に影響を与えましたが、それを行うには3つのステートメントが必要でした(各ステートメントは1つの行だけを挿入し、ROW_COUNT()
最後のステートメントについてのみ報告します)。
データの更新
次に、3行すべてのデータを更新しましょう:
UPDATE guest
SET guest_name = 'Homer';
結果:
Query OK, 2 rows affected (0.008 sec) Rows matched: 3 Changed: 2 Warnings: 0
私のmariadb
クライアントは、3つの行が基準に一致したが、2つの行だけが変更されたと言っています。これは、最初の行にすでにHomer
が含まれているためです。 、これは私たちが更新しようとしているものでもあります。
ROW_COUNT()
を見てみましょう 戻り値:
SELECT ROW_COUNT();
結果:
+-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+
予想どおり、2
を返します 、それが実際に更新された行数だからです。
結果セットステートメント
結果セットを返すステートメントの場合(SELECT
など) 、SHOW
、DESC
またはHELP
)、ROW_COUNT()
関数は-1
を返します 、結果セットが空の場合でも。これは、OPTIMIZE
などの管理ステートメントにも当てはまります。 。
例:
SELECT * FROM guest;
結果:
+----------+------------+ | guest_id | guest_name | +----------+------------+ | 1 | Homer | | 2 | Homer | | 3 | Homer | +----------+------------+ 3 rows in set (0.000 sec)
次に、ROW_COUNT()
を呼び出します もう一度:
SELECT ROW_COUNT();
結果:
+-------------+ | ROW_COUNT() | +-------------+ | -1 | +-------------+
外部キーとトリガー
ROW_COUNT()
に注意してください 最後のステートメントによって直接削除/更新されていない行は考慮されません。これは、外部キーまたはトリガーによって削除された行がカウントされないことを意味します。
詳細情報
この関数を使用する際の詳細およびその他の注意事項については、MariaDBのドキュメントを参照してください。