3

假设我有一个名为“t”的表

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

考虑两个 MYSQL 查询

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

执行这两个查询也会使“受影响的行”为 0(即不更新任何行),因为第一个查询是非更新更新,第二个查询是非匹配更新。

有没有办法区分这两种情况?

4

1 回答 1

1

如果您只想要“匹配”行的数量(不再需要“更改”行的数量),则可以CLIENT_FOUND_ROWS按照此处所述进行设置:

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

对于 UPDATE 语句,默认情况下,affected-rows 值是实际更改的行数。如果在连接到 mysqld 时将 CLIENT_FOUND_ROWS 标志指定给 mysql_real_connect(),那么受影响的行值是“找到”的行数;也就是说,由 WHERE 子句匹配。

于 2013-07-01T06:17:59.013 回答