有效地更新MySQL记录

时间:2013-08-14 13:26:11

标签: mysql datetime sql-update

示例数据:

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,其中插入的值来自str_to_date DateTime列。

 SELECT STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s');

2 个答案:

答案 0 :(得分:1)

只是

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;

等等。有些人希望这样做,大块适合记忆,但在我看来,这不值得麻烦。 MySQL已经做得很好。

答案 1 :(得分:0)

试试这个

UPDATE table SET DataTimeProper = 
    (SELECT STR_TO_DATE(DateTime,'%m/%e/%Y %H:%i:%s'))
WHERE DataTimeProper IS NULL

虽然您应该考虑将DateTime列更改为DATETIME类型而不是字符串,因为这样可以提高效率。特别是当你处理数百万行的表时。