3

「t」という名前のテーブルがあるとします

---------------
| key | value |
---------------
| 1   | abc   |
| 2   | def   |
---------------

2 つの MYSQL クエリを検討してください

  1. UPDATE t SET value='abc' WHERE key=1
  2. UPDATE t SET value='abc' WHERE key=3

最初のクエリは非更新更新であり、2 番目のクエリは非一致更新であるため、両方のクエリを実行しても、「影響を受ける行」は 0 (つまり、行を更新しない) になります。

これら2つのケースを区別する方法はありますか?

4

1 に答える 1

1

「一致した」行の数だけが必要な場合 (「変更された」行の数は不要)、次のように設定できCLIENT_FOUND_ROWSます。

http://dev.mysql.com/doc/refman/5.5/en/mysql-affected-rows.html

UPDATE ステートメントの場合、影響を受けた行の値はデフォルトで実際に変更された行数です。mysqld に接続するときに mysql_real_connect() に CLIENT_FOUND_ROWS フラグを指定すると、影響を受ける行の値は「見つかった」行の数になります。つまり、WHERE 句によって一致します。

于 2013-07-01T06:17:59.013 に答える