关于php:批量转换和更新datetime列值到UNIX时间戳?

Bulk convert and update datetime column values to UNIX timestamp?

背景

我有一个MySQL数据库,有大约1600万条记录。有两列created_atupdated_at目前采用datetime格式。

问题

我想通过转换所有值并用新值更新记录,将其更改为UNIX Timestamp

我知道如何在循环中使用PHP,但是有没有一种方法可以通过在MySQL中执行单个查询来执行此更新?


因为这是一次性的改变;您可以这样进行:

  • 创建具有INT数据类型的新列,并命名它们,例如,createdupdated

    1
    2
    3
    ALTER TABLE `nameOfTable`
        ADD COLUMN `created` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `created_at`,
        ADD COLUMN `updated` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `updated_at`;
  • 更新表:

    1
    2
    3
    UPDATE `nameOfTable`
    SET `created` = UNIX_TIMESTAMP( `created_at` ),
        `updated` = UNIX_TIMESTAMP( `updated_at` );

  • 删除旧列,将新列重新命名为created_atupdated_at
  • 替代方式:

  • DATETIME列设置为VARCHAR字段。
  • 使用查询更新:

    1
    2
    3
    UPDATE `nameOfTable`
    SET `created_at` = UNIX_TIMESTAMP( `created_at` ),
        `updated_at` = UNIX_TIMESTAMP( `updated_at` );
  • 将列更改为INT

  • HJPotter92的回答帮助很大。

    但在我的例子中,它并没有立即解决这个问题,因为我存储的日期的格式不被unix时间戳接受为参数。

    所以我必须先把它转换成一种可接受的格式。经过一些研究,我得出了以下问题:

    1
    UPDATE tableName set newFieldName = UNIX_TIMESTAMP(STR_TO_DATE(CAST(priorFieldName AS CHAR), '%m/%d/%y'));