2013-05-03 126 views
2

背景批量轉換並將日期時間列值更新爲UNIX時間戳?

我有一個MySQL數據庫大約1600萬條記錄。有2列created_atupdated_at,其目前格式爲datetime格式。

的問題

我想通過將所有的值和更新與新值的記錄這一改變UNIX Timestamp

我知道如何用PHP在循環中做到這一點,但有沒有辦法通過在MySQL中執行單個查詢來執行此更新?

+0

如果我可能會問,爲什麼? – hjpotter92 2013-05-03 03:32:07

+0

有兩個原因; 1爲學習方面;和2,因爲我認爲它會爲我節省250 + MB以及索引中的相等數量。而當我使用片狀互聯網連接時,來自雲端的離線備份將變得更加輕鬆。 – kouton 2013-05-03 03:34:50

回答

4

因爲這將是一次性改變;您可以繼續這樣說:

  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_atupdated_at重命名較新的回來。

替代方式:

  1. DATETIMEVARCHAR領域。
  2. 更新使用查詢:

    UPDATE `nameOfTable` 
    SET `created_at` = UNIX_TIMESTAMP(`created_at`), 
        `updated_at` = UNIX_TIMESTAMP(`updated_at`); 
    
  3. 更改列INT
+0

這樣做,謝謝!順便提一下,時間戳格式保存是否可以節省超過16mn記錄的空間? – kouton 2013-05-03 03:42:05

+1

@Reddox http://stackoverflow.com/questions/2533767/mysql-whats-the-best-to-use-unix-timestamp-or-datetime和http://stackoverflow.com/questions/2948494/unix-timestamp -vs-datetime – hjpotter92 2013-05-03 03:43:24

+0

第二個查詢非常漂亮。再次感謝! – kouton 2013-05-03 03:47:01

0

hjpotter92的回答很有幫助。

但在我的情況下,它並沒有立即解決問題,因爲我存儲的日期是UNIX_TIMESTAMP不接受作爲參數的格式。

所以我不得不首先將其轉換爲可接受的格式。經過一番研究,我得到了以下查詢:

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