我的 mysql 有一个奇怪的问题。该表包含大约 2000 万行。 表的结构是:
create table session_table (id int, start_datetime
datetime,start_date_int int, start_time_int, end_datetime datetime,
end_date_int int, end_datetime_int int)
日期的整数版本,例如,start_date_int 和 end_date_int 列用于使用 to_days() 函数将日期存储为整数。 MySQL TO_DAYS() 返回给定日期和 0 年之间的天数。类似地,start_time_int 和 end_time_int 列存储日期时间值的 unix_timestamp。
现在看下面的更新语句:
update session_table
SET
start_date_int=to_days(start_datetime),
start_datetime_int=UNIX_TIMESTAMP((start_datetime),
end_date_int=to_days(end_datetime),
end_datetime_int=UNIX_TIMESTAMP(end_datetime)
where start_datetime >= '2016-07-01 00:00:00'
更新声明之前工作正常。然而今天它似乎只更新'2016-10-03'的行(我的观察是基于计数)并且奇怪的是它正在用我发出查询的日期时间更新 start_datetime 列,虽然我没有把这个列在更新声明中!
有没有可能是mysql服务器损坏了?这是一个数据非常密集的系统,我们有许多包含大量数据的表,例如 20-30 百万行,其中包含大量插入、更新过程。
此外,为了 mysql 的可伸缩性,数据是否有可能在几天内自动删除? 请对此提出您的意见/建议。
最佳答案
我认为您的某些列是自动计算的
,您可以检查此表上是否有触发器
,也许在更新后它可能会填充start_datetime/end_datetime
根据 start_datetime_int/end_datetime_int
的更新值。
我希望这有助于...
关于MySQL更新错误的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39832518/