MySQL 时间戳记录正在更新,但受影响的行仍然为 0

Posted

技术标签:

【中文标题】MySQL 时间戳记录正在更新,但受影响的行仍然为 0【英文标题】:MySQL timestamp record being updated but affected rows remains 0 【发布时间】:2011-11-22 05:54:50 【问题描述】:

有几个类似的问题,但我会把这个混在一起。

基本上,我有一个时间戳列(它是一个 int),我的更新之一只是更新这个时间戳列,有时它几乎没有明显的距离。例如,它可能从 1316631442 变为 1316631877。两者之间并没有太大的区别。

所以记录正在更新,我可以在查询运行之前检查 phpMyAdmin,然后再查看差异。但是,我正在对受影响的行数执行 var_dump(),它仍然为 0。

如果我同时将另一列更新为不同的值,则受影响的行数为 1。

那么如何触发受影响的行?即使更新成功后受到影响。

另外,我正在使用 Laravel PHP 框架及其查询构建器。目前正在那里进行一些调试,看看是否有问题,但到目前为止一切似乎都很好。

编辑:对不起,我在上面输入了错误的内容。当我完全更改另一列的值时,受影响的行是 1,而不是 0。

【问题讨论】:

该行是由ON UPDATE CURRENT_TIMESTAMP 更新还是由您的查询明确设置? 它是通过查询明确设置的,如果有区别的话,使用 PHP 的 time()。 更新后您的框架是否会自行执行另一个查询? @ceejayoz 我的想法完全正确。 @ceejayoz 我已经转储了在运行此查询之后执行的查询数组,它是列出的最后一个查询,因此它没有运行另一个查询。 【参考方案1】:

对于那些好奇的人,我求助于使用 INSERT INTO... ON DUPLICATE KEY UPDATE 来实现所需的结果。我仍然无法弄清楚为什么 mysql 没有报告记录受到影响。

我也尝试使用 PHP 的 mysql_query() 和相关函数来检查受影响的行,但它也没有像那样工作。也许 MySQL 不认为该更改值得将记录标记为受影响。

【讨论】:

【参考方案2】:

我可以用 MySql 5.1 复制这个问题,但不能用 Mysql 5.7。

在早期版本中

UPDATE `test`
SET
    `time` = TIMESTAMPADD(MINUTE, 10, NOW())
WHERE
    `id = 1

确实更新了时间戳,但消息是零行已受到影响。

对于更高版本的 MySql,相同的查询会影响我一行。

好像是MySql的一个bug,已经修复了。

是时候让服务器管理员更新一些东西了?

【讨论】:

以上是关于MySQL 时间戳记录正在更新,但受影响的行仍然为 0的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spark Scala 为数据中的每个组选择窗口操作后的最新时间戳记录

Impala SQL - 获取最大时间戳记录 - 不产生结果

为啥 Swift 中的 print() 不会在目标 C 中将时间戳记录为 NSLog

用于插入/更新 MySql DB 的函数返回错误的“受影响的行”数

java对mysql进行批处理插入数据,如何返回错误的没插入数据

MySQL重复键更新+受影响的行数