示例数据:
PostID DateTime DataTimeProper UserID UserName IPAddress
1234567.page#00008912 07/25/2013 14:50:21 NULL 00000001 TestUser 127.0.0.1
2468012.page#04208002 07/28/2013 18:42:13 NULL 03209827 BobTest 127.0.0.2
我正在寻找最有效的方法来更新表中的每条记录(数百万条),其中 DateTimeProper
列是 NULL
,插入的值来自DateTime 列的 str_to_date
。
SELECT STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s');
最佳答案
很简单
UPDATE yourTable SET DateTimeProper = STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s')
WHERE DateTimeProper IS NULL;
花多少时间就花多少时间,而且这只是一次性操作,对吧?
如果你真的坚持,你可以让自己麻烦地分块更新,例如(假设你有一个名为 id 或其他名称的 auto_increment 列)
UPDATE yourTable SET DateTimeProper = STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s')
WHERE DateTimeProper IS NULL
AND id BETWEEN 0 AND 10000;
然后
UPDATE yourTable SET DateTimeProper = STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s')
WHERE DateTimeProper IS NULL
AND id BETWEEN 10000 AND 20000;
等等。有些人这样做是希望这些 block 适合内存,但在我看来,这不值得这么麻烦。 MySQL 在这方面已经做得很好了。
关于mysql - 高效更新MySQL记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18233040/