我有一個MySQL數據庫大約1600萬條記錄。有2列created_at
和updated_at
,其目前格式爲datetime
格式。
的問題
我想通過將所有的值和更新與新值的記錄這一改變UNIX Timestamp
。
我知道如何用PHP在循環中做到這一點,但有沒有辦法通過在MySQL中執行單個查詢來執行此更新?
我有一個MySQL數據庫大約1600萬條記錄。有2列created_at
和updated_at
,其目前格式爲datetime
格式。
的問題
我想通過將所有的值和更新與新值的記錄這一改變UNIX Timestamp
。
我知道如何用PHP在循環中做到這一點,但有沒有辦法通過在MySQL中執行單個查詢來執行此更新?
因爲這將是一次性改變;您可以繼續這樣說:
與INT
數據類型創建新列,他們的名字,比如說,created
和updated
。
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`;
更新表:
UPDATE `nameOfTable`
SET `created` = UNIX_TIMESTAMP(`created_at`),
`updated` = UNIX_TIMESTAMP(`updated_at`);
created_at
和updated_at
重命名較新的回來。替代方式:
DATETIME
列VARCHAR
領域。更新使用查詢:
UPDATE `nameOfTable`
SET `created_at` = UNIX_TIMESTAMP(`created_at`),
`updated_at` = UNIX_TIMESTAMP(`updated_at`);
INT
。這樣做,謝謝!順便提一下,時間戳格式保存是否可以節省超過16mn記錄的空間? – kouton 2013-05-03 03:42:05
@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
第二個查詢非常漂亮。再次感謝! – kouton 2013-05-03 03:47:01
hjpotter92的回答很有幫助。
但在我的情況下,它並沒有立即解決問題,因爲我存儲的日期是UNIX_TIMESTAMP不接受作爲參數的格式。
所以我不得不首先將其轉換爲可接受的格式。經過一番研究,我得到了以下查詢:
UPDATE tableName set newFieldName = UNIX_TIMESTAMP(STR_TO_DATE(CAST(priorFieldName AS CHAR), '%m/%d/%y'));
如果我可能會問,爲什麼? – hjpotter92 2013-05-03 03:32:07
有兩個原因; 1爲學習方面;和2,因爲我認爲它會爲我節省250 + MB以及索引中的相等數量。而當我使用片狀互聯網連接時,來自雲端的離線備份將變得更加輕鬆。 – kouton 2013-05-03 03:34:50