mysql - 高效更新MySQL记录

标签 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,插入的值来自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/

相关文章:

android - SQLITEOPENHELPER中MainActivity表中如何更新和删除数据

sql - 根据 created_at : condition in Rails 减去两行

php - 在单个查询的每次更新中将列更新为最大列。

PHP - PostgreSQL 更新表时出错

mysql - 带有 mongodb 和 mysql 的 PhP Codeigniter

c# - 如何将嵌套的三元运算符转换为嵌套的 if-else 语句?

mysql - 按原因排序 文件排序

Python 脚本无法在 cron 中正确执行

java - 使用 mysqldump 备份 mysql 数据库

php - 将图像上传到服务器中的两个不同文件夹