update top column mysql limit sql-update

top - MySQL-consulta ACTUALIZADA con LIMIT



update limit mysql (7)

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 sintaxis. ¿Es esto correcto? estoy cometiendo un error aquí.
  2. ¿Podemos limitar la actualización de esta manera?

Además, las filas que intento 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


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.


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)