使用する実行方法にもよりますが、通常、mysqlデータベースで実行される書き込み操作の影響を受ける行数を取得できます。複数の方法があります。ステートメントをバッチとして明示的に実行できます。
SELECT ROW_COUNT()
最後に、または接続ライブラリによって提供される機能を使用して、最後のセットで影響を受けた行の数を取得できます
例:PHPでは次を使用できます
mysqli::$affected_rows
影響を受ける行を取得するため。
編集:特定のシナリオはありますか、もっと例が欲しいですか?
更新:質問の2番目の部分に答えるため。
まあ、私が知っている同じステートメントで影響を受ける行の主キーを取得する方法は絶対にありません。他のユーザーからの回答例に記載されているように、ステートメントバッチを実行する必要があります。
トランザクションを開始します。SELECT primary_key_columns FROM my_table WHERE status ='O' FOR UPDATE; UPDATE my_table SET status ='E' WHERE status ='O'; 専念; 詳細はこちら:[https://stackoverflow.com/questions/10663338/i-need-primary-keys-of-the-affected-rows-to-be-returned-after-updating-a-table-i] [ 1]
編集以下のコメントでマーカスによって与えられた情報に基づいて答えを修正しました。
更新ステートメントの影響を受けるすべての行のIDを取得するには:
SET @uids := null;
UPDATE footable
SET foo = 'bar'
WHERE fooid > 5
AND ( SELECT @uids := CONCAT_WS(',', fooid, @uids) );
SELECT @uids;
これにより、すべてのIDがコロンで連結された文字列が返されます。ソース:MySQLで最後に更新された行のIDを取得する方法は?
@fenwayの回答で言及されている他のオプションは、サポートされているデータベースの出力句です。
その場合でも、上記と同じ手順に従ってデータを送り返す前に、基本的に値を入力する必要があることに注意してください。
さて、あなたは、データベースが主キー値を自動的に返さないのはなぜか疑問に思っていると思います。まあそれはという事実と関係があります
1)DBは、すべてのテーブルに主キーを設定することを要求しません。実際には、私たちが定義したUNIQUE制約です。
2)すべてのシナリオで、影響を受ける主キーを返す必要はありません。ほとんどの通常のユースケースでは、更新後、影響を受ける行を最大で必要とします。
リレーショナルDBプログラミングには、通常の問題セットプログラミングとは少し異なる考え方が必要であることを忘れないでください。
少なくともこれらは私の2セントです。
よろしく
シュレヤスN