sql >> データベース >  >> RDS >> MariaDB

MariaDB ROW_COUNT()の説明

    MariaDBでは、ROW_COUNT() は、前のステートメントによって更新、挿入、または削除された行数を返す組み込み関数です。

    ROW_COUNT()によって返される値 mysqlの行数と同じです クライアントが表示し、mysql_affected_rows()からの値 CAPI関数。

    構文

    構文は次のようになります:

    ROW_COUNT()

    引数は必要ありません、または受け入れられません。

    DDLステートメント

    DDLステートメントの場合(TRUNCATEを含む )および結果セットを返さないその他のステートメント(USEなど) 、DOSIGNAL または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 TABLEROW_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など) 、SHOWDESC または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のドキュメントを参照してください。


    1. Laravel5.2-Eloquentテーブルのカスタム主キーとして文字列を使用すると0になります

    2. PL /SQLで日付形式をMM/DD / YYYYからYYYY-MM-DDに変更するにはどうすればよいですか?

    3. セーフティネット

    4. 2019オープンソースデータベースレポート:トップデータベース、パブリッククラウドとオンプレミス、ポリグロットの永続性