MySQL-запрос обновления с ограничением
Я хочу обновить строки в моей таблице, начиная со 1001 до следующей 1000.
Я попытался со следующим запросом:
UPDATE `oltp_db`.`users` SET p_id = 3 LIMIT 1001, 1000
- это дает мне синтаксическая ошибка. Правильно ли это? я делаю какую-то ошибку.
- можем ли мы ограничить обновление таким образом?
кроме того, строки, которые я пытаюсь обновить, имеют нулевое значение для столбца p_id, который имеет тип данных INTEGER. Из-за этого я даже не могу обновить, используя следующее запрос:
UPDATE `oltp_db`.`users` SET p_id = 3 WHERE p_id = null
- правильно мой предыдущий запрос?
- что можно сделать для этого?
7 ответов
при работе с null =
не соответствует нулевым значениям, которые вы можете использовать IS NULL
или IS NOT NULL
UPDATE `smartmeter_usage`.`users_reporting`
SET panel_id = 3 WHERE panel_id IS NULL
LIMIT
может использоваться с UPDATE
но с row count
только
Если вы хотите обновить несколько строк, используя limit в MySQL, вы можете использовать эту конструкцию:
UPDATE table_name SET name='test'
WHERE id IN (
SELECT id FROM (
SELECT id FROM table_name
ORDER BY id ASC
LIMIT 0, 10
) tmp
)
Я бы предложил двухэтапный запрос
Я предполагаю, что у вас есть автоинкрементный первичный ключ, потому что вы говорите, что ваш ПК (max+1), который звучит как определение ключа autioincrementing.
Я вызываю ПК id
, замените тем, что называется вашим ПК.
1-Определите номер первичного ключа для столбца 1000.
SELECT @id:= id FROM smartmeter_usage LIMIT 1 OFFSET 1000
2 - Обновление таблицы.
UPDATE smartmeter_usage.users_reporting SET panel_id = 3
WHERE panel_id IS NULL AND id >= @id
ORDER BY id
LIMIT 1000
пожалуйста, проверьте, не сделал ли я ошибку off-by-one; возможно, вам придется где-то добавить или вычесть 1.
UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 LIMIT 1001, 1000
этот запрос неверен (или, по крайней мере, я не знаю, как использовать limit в запросах обновления), вы должны поставить where
условие на вас первичный ключ (это предполагает, что у вас есть столбец auto_increment в качестве первичного ключа, если не предоставить более подробную информацию):
UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE primary_key BETWEEN 1001 AND 2000
для второго запроса, вы должны использовать
UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE panel_id is null
EDIT-если ваш primary_key является столбцом с именем MAX+1, Вы должны запросить (с обратными палочками, как указано правильно в комментарии):
UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE `MAX+1` BETWEEN 1001 AND 2000
для обновления строк с MAX+1 от 1001 до 2000 (включая 1001 и 2000)
вы должны использовать IS, а не = для сравнения с NULL.
UPDATE `smartmeter_usage`.`users_reporting`
SET panel_id = 3
WHERE panel_id IS null
на LIMIT
предложение в MySQL при применении к обновлению не позволяет указывать смещение.
вы должны очень рассмотреть возможность использования ORDER BY
Если вы намерены ограничить обновление, потому что в противном случае он будет обновляться в порядке таблицы, что может быть неправильным.
но, как будет сказано, он позволяет ограничивать только row_count, а не смещать.