MySQL – consulta ACTUALIZADA con LIMIT

Quiero actualizar las filas de mi tabla comenzando desde 1001 hasta 1000.

Intenté con la siguiente consulta:

UPDATE `oltp_db`.`users` SET p_id = 3 LIMIT 1001, 1000 
  1. Esto me está dando un error de syntax. ¿Es esto correcto? estoy cometiendo un error aquí.
  2. ¿Podemos limitar la actualización de esta manera?

Además, las filas que bash actualizar tienen un valor Nulo para la columna p_id que tiene el tipo de datos INTEGER. Debido a esto, no puedo actualizar usando la siguiente consulta:

 UPDATE `oltp_db`.`users` SET p_id = 3 WHERE p_id = null 
  1. ¿Mi consulta anterior es correcta?
  2. ¿Qué se puede hacer para lograr esto?

Cuando se trata de null = no coincide con los valores nulos, puede usar IS NULL o IS NOT NULL

 UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE panel_id IS NULL 

LIMIT se puede usar con UPDATE pero solo con el row count

Si quiere actualizar varias filas utilizando el límite en MySQL, puede usar esta construcción:

 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 ) 

Sugeriría una consulta de dos pasos

Supongo que tiene una clave primaria que se autoincrementa porque dice que su PK es (max + 1) lo que suena como la definición de una clave autioincrementing.
Estoy llamando a la id PK, sustituto con lo que se llame su PK.

1 – descubra el número de clave primaria para la columna 1000.

 SELECT @id:= id FROM smartmeter_usage LIMIT 1 OFFSET 1000 

2 – actualiza la tabla.

 UPDATE smartmeter_usage.users_reporting SET panel_id = 3 WHERE panel_id IS NULL AND id >= @id ORDER BY id LIMIT 1000 

Por favor, prueba para ver si no cometí un error “uno por uno”; es posible que deba agregar o restar 1 en alguna parte.

 UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 LIMIT 1001, 1000 

Esta consulta no es correcta (o al menos no conozco una manera posible de usar el límite en las consultas de ACTUALIZACIÓN), debe poner una condición where en su clave principal (esto supone que tiene una columna auto_increment como clave principal, si no proporcionar más detalles):

 UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE primary_key BETWEEN 1001 AND 2000 

Para la segunda consulta debe usar IS

 UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE panel_id is null 

EDITAR – si tu primary_key es una columna llamada MAX + 1 tu consulta debería ser (con backticks como se indica correctamente en el comentario):

 UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE `MAX+1` BETWEEN 1001 AND 2000 

Para actualizar las filas con MAX + 1 desde 1001 hasta 2000 (incluidos 1001 y 2000)

Debe usar IS en lugar de = para comparar con NULL.

 UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE panel_id IS null 

La cláusula LIMIT en MySQL cuando se aplica a una actualización no permite que se especifique una compensación.

Debería considerar usar un ORDER BY si tiene la intención de LIMITAR su ACTUALIZACIÓN, porque de lo contrario se actualizará en el orden de la tabla, lo que podría no ser correcto.

Pero como dijo Will A, solo permite límite en row_count, no offset.

Puedes hacerlo con un LÍMITE, pero no con un LÍMITE y un DESPLAZAMIENTO.