mysql - SQL 查询以我不明白的方式被窃听

标签 mysql sql

我知道标题很奇怪,但我在同一个错误上呆了几个小时。

我有这个查询

更新锦标赛 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/

相关文章:

php - 在php中根据条件从数据库生成随机数据

sql - Oracle 其中 'TEXT' 按一定百分比匹配某些内容

mysql - 将远程位置 B 到 L 的数据库中的相似数据集中到位置 A 的数据库中

php - 我想做一个论坛

php - 在数据库 laravel 中保存 utf-8 数组

mysql - 无法使用 AS 关键字添加 MySql 自动生成的列

php - 检查是否选择了查询中的所有行

mysql - 获取两个事物同时出现的日期(mysql查询)

MySQL 用每行唯一的时间戳更新多行

mysql - 如果缓冲区不存在,请将名称+代码添加到缓冲区中?