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 的函数返回错误的“受影响的行”数