обновить столбец первых 5000 строк таблицы в версии 5.1.11 MYSQL - PullRequest
0 голосов
/ 08 октября 2011

У меня есть ситуация, в которой мне нужно обновить некоторые значения столбца в таблице в пакетном режиме (т. Е. Первые 5000 строк).

Итак, я написал запрос как

update clientdetails set lastupdateddate=now where id in (Select id from clientdetails limit 1,5000);

Ошибка вызвана тем, что эта версия MYSQL не поддерживает лимит 1,5000. Так есть ли другой способ сделать это?

Ответы [ 2 ]

3 голосов
/ 08 октября 2011

Не могли бы вы просто сделать это так:

update clientdetails set lastupdateddate=now where <your where clause> 
limit <desired limit>;

2 голосов
/ 08 октября 2011

MySQL имеет несколько проблем с ОБНОВЛЕНИЕ и подзапросами.

SELECT * FROM table1 WHERE foo IN (SELECT foo FROM table2 LIMIT 50)

невозможно.Но следующее:

SELECT * 
FROM table1 t
JOIN (SELECT foo FROM table2 LIMIT 50) as tmp
ON tmp.foo = t.foo;

Я считаю, что это «(запрос) как таблица» называется «виртуальным временным представлением» (но я могу ошибаться ...)

Вторая проблема, с которой вы сталкиваетесь, заключается в том, что вы не можете обновить таблицу, из которой читаете в данный момент.

Но (как указал Гривс) ОБНОВЛЕНИЕ знает ОГРАНИЧЕНИЕ:

UPDATE clientdetails 
SET lastupdateddate = NOW() 
ORDER BY id
LIMIT 0, 5000;

должно работать.Убедитесь, что у вас есть ORDER BY, иначе вы можете обновить некоторые строки дважды, а некоторые - никогда.

...