MySQL更新错误的列

标签 mysql sql datetime

我的 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/

相关文章:

c# - 当文件名有点 "free form"时,有没有办法将文件名一致地转换为日期时间值?

c# - 获取每秒滴答数并转换为字符串值?

php - MySQL : select 3 column names with greatest values from a row

php - 从多个关系表查询数据

MySQL:使用来自不同表的选择插入多个列

sql - Postgres 动态数据透视表

MySQL 创建表(errno 150)

php - Redis sub/pub 和 php/nodejs

mysql - 使用 SQL(对于 MySQL),我如何根据前一行的数据更新一行中的数据?

ruby-on-rails - 有没有一种简单的方法可以从 ruby​​ 中的日期字符串中获取年份?