我知道标题很奇怪,但我在同一个错误上呆了几个小时。
我有这个查询
更新锦标赛 SET password_req_count = password_req_count + 1 WHERE id = 20;
(你可以用任何东西代替20,这真的没关系)
此查询通过始终将其设置为计算机当前小时来修改名为 start_timestamp
的时间戳字段。
这个查询完全没问题,没有错误:
更新锦标赛 SET password_req_count = 0 WHERE id = 20;
这种情况一直发生在 PHP 代码中,直到我删除了该查询,然后它就停止了。然后我决定自己尝试一下,直接执行查询,不用PHP,bug依然存在。
password_req_count
是一个 int (我的意思是,我检查了,问题不在这里)
这个查询不会出现在MySQL的查询历史记录中(你可以通过按“UP”键快速重新进行查询来获得......),并且这个bug不会出现在本地(它只出现在我的服务器)。请注意,我将本地数据库导出到服务器的数据库,因此那里和这里的一切都完全相同。
我的服务器上的MySQL服务器版本是5.5,家里的MySQL服务器版本是5.7,我认为这是问题所以我更新了它,但绝对没有任何改变。我也用谷歌搜索了很多相关内容,但没有找到讨论这个主题的话题。
我确实有查询日志,所以我确信没有任何东西可以编辑 start_timestamp (显然除了这个奇怪的错误)。无论如何都不应该对其进行编辑。
编辑:我刚刚将字段名称编辑为 password_request_count
,因为 password_req_count
已存在于另一个表中。但错误仍然存在。
在此回顾
编辑2:这是一个视频,因为显然该帖子不够清晰。请注意,我无法通过按“向上”触摸来再次执行 UPDATE 查询,并且请注意,如果我增加password_req_count,start_timestamp 也会被编辑。 http://www.nx-lab.com/bug.mp4
编辑 3:显然,如果我编辑其他字段(例如 top_prize),也会发生这种情况
最佳答案
可能有几件事可以做到这一点,其中之一是桌面上的触发器。此代码将向您显示是否有任何...
SHOW TRIGGERS FROM tournaments;
另一件事(在本例中是正确的答案)是日期时间列的自动更新。这会导致当表有更新时,列中的日期和时间自动更新。
您可以在这里阅读更多相关信息: https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
如果要删除以自动更新,则需要使用 ALTER 表将其从列中删除,从 Timestamp without change on update ...
ALTER TABLE leads MODIFY added_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
关于mysql - SQL 查询以我不明白的方式被窃听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45788937/