更新异常。 Mysql sql不同的行影响计数

Posted

技术标签:

【中文标题】更新异常。 Mysql sql不同的行影响计数【英文标题】:Update anomaly. Mysql sql different rows affected count 【发布时间】:2014-06-13 01:04:04 【问题描述】:
SELECT * FROM `attempts` WHERE date = '27-04-2014' LIMIT 0 , 30

这个特定的查询给出了 386 个结果(phpmyAdmin) 但在执行以下查询时

UPDATE `attempts` SET points = points *2 WHERE date = '27-04-2014'

我有 379 行受到影响。。我不应该得到相同的数字吗?还有其他可能的原因吗?还是我哪里错了?

【问题讨论】:

【参考方案1】:

查询不会影响points = 0所在的行,因为点值加倍不会有任何影响。

例如,尝试运行以下查询:

UPDATE `attempts` SET points = points + 0 WHERE date = '27-04-2014'

它会显示 0 行受影响

另外,phpMyAdmin is an estimate 显示的计数,如果您使用的是 InnoDB。使用COUNT(*) 获取准确计数。

SELECT COUNT(*) FROM `attempts` WHERE date = '27-04-2014'

【讨论】:

【参考方案2】:

“受影响的行”仅计算已更改的行。如果您有记录为 0 分,则加倍点数无效,这些记录将不计入计数。

【讨论】:

以上是关于更新异常。 Mysql sql不同的行影响计数的主要内容,如果未能解决你的问题,请参考以下文章

mysql jdbc连接器批量更新异常更新计数不如预期

mysql行锁等待异常

java中mysql执行update返回啥结果

SQL 查询 - 要列和更新的行

SQL server 一些小结

更新MySQL数据库( java.sql.SQLException: No value specified for parameter 1) 异常 解决方法