es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La declaración de actualización de MySQL que cambió la condición `WHERE` con `AND` produjo resultados incorrectos.

Tengo la siguiente tabla, tiene más columnas pero no están relacionadas:

CREATE TABLE vicidial_lists (
list_id bigint(14) unsigned NOT NULL,
list_name varchar(50) DEFAULT NULL
);

Por error, en la siguiente consulta, la condición WHERE fue reemplazada por AND y no se usó el límite:

update vicidial_lists set list_name = replace(list_name, ‘15.10.2021’, ‘15.11.2021’) and list_id IN (73227,73228,73229,73230,73231) ;

Esta consulta cambió todos los list_names de la tabla vicidial_lists a la mayoría de 0 y algunos registros en 1.

LIST ID LIST NAME
73227 0
73228 0
73229 0
73231 1

El problema fue solucionado, devolví los nombres correctos de la copia de seguridad.
Traté de leer sobre este comportamiento en los documentos de MySQL o si se enumeró como un error, pero no encontré nada.
Estoy tratando de entender por qué sucedió.

Mi pregunta, más para entender por qué es:

¿Alguien se enfrentó al mismo comportamiento, se enumera como un error? Cualquier enlace proporcionado con información relacionada sería muy apreciado.

Versión de MySQL: 5.6.28

Tags:  ,

Answer

  1. Avatar for davy.ai

    No he enfrentado este comportamiento antes, pero parece ser un error. De acuerdo con la documentación de MySQL, la cláusula WHERE debería ser utilizada para especificar qué filas deben ser actualizadas. Parece que se utilizó la cláusula AND en su lugar, lo que provocó que se actualizaran todas las filas.

    También es importante utilizar la cláusula LIMIT al actualizar múltiples filas, ya que puede ayudar a evitar cambios no deseados.

    Sugiero que revises el rastreador de errores de MySQL para verificar si este comportamiento ha sido reportado anteriormente.

Comments are closed.