2

背景

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

问题

我想UNIX Timestamp通过转换所有值并用新值更新记录来改变它。

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

4

2 回答 2

5

因为这将是一次更改;你可以这样进行:

  1. 使用数据类型创建新列INT并将它们命名为createdupdated

    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`;
    
  2. 更新表:

    UPDATE `nameOfTable`
    SET `created` = UNIX_TIMESTAMP( `created_at` ),
        `updated` = UNIX_TIMESTAMP( `updated_at` );
    
  3. 删除较旧的列并将较新的列重命名为created_atand updated_at

替代方式:

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

    UPDATE `nameOfTable`
    SET `created_at` = UNIX_TIMESTAMP( `created_at` ),
        `updated_at` = UNIX_TIMESTAMP( `updated_at` );
    
  3. 将列更改为INT
于 2013-05-03T03:40:14.197 回答
0

hjpotter92 的回答很有帮助。

但在我的情况下,它并没有立即解决问题,因为我存储的日期的格式不被 UNIX_TIMESTAMP 接受为参数。

所以我必须首先将其转换为可接受的格式。经过一些研究,我得到了以下查询:

UPDATE tableName set newFieldName = UNIX_TIMESTAMP(STR_TO_DATE(CAST(priorFieldName AS CHAR), '%m/%d/%y'));
于 2015-08-30T20:01:05.003 回答