高效更新MySQL记录

高效更新MySQL记录,mysql,datetime,sql-update,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

示例数据:

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
我正在寻找最有效的方法来更新表(百万)中的每条记录,其中
datetimeproperty
列为
NULL
,插入的值来自DateTime列的
str_to_date

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

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

尽管您应该考虑将您的<代码>日期时间> /COD>列改为“代码> >日期时间< /代码>,而不是字符串,因为这样会使它更高效。尤其是在处理数百万行的表时。

这很简单

UPDATE yourTable SET DateTimeProper = STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s')
WHERE DateTimeProper IS NULL;
它需要的时间和它需要的时间一样长,而且它是一次性操作,对吗

如果你真的坚持,你可以让自己很难成批更新,比如(假设你有一个名为id的自动增量列或其他东西)

然后

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在这方面已经做得很好了。

那么您的
DateTime
列是string类型的吗?使用MySQL的
DATETIME
类型会更有效。这也将使您更新
datetimeproperty
的查询更高效、更快。@mavili感谢您的提示,类型已更改。我猜他希望执行此操作以将列转换为datetime。简单的改变是不起作用的,所以你在这里提出的建议毫无意义。你的更新语句也不起作用。此子选择,从何处获取DateTime列?您如何将其与update语句的行相关联?在声明我的“update语句不起作用”之前,您是否确实尝试过在MySQL命令行或其他地方运行该查询?我已经运行了它,它确实运行正常。回答:它从正在更新其值的当前数据行获取它。所以这就是用户想要的!也许它是有效的,但拥有一个次选择权仍然是胡说八道。看我的疑问,这就是解决问题的方法。我不会说它是“胡说八道”,而是说它是“不必要的”。
UPDATE yourTable SET DateTimeProper = STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s')
WHERE DateTimeProper IS NULL
AND id BETWEEN 10000 AND 20000;