Hace tiempo me tocó montar un sistema que extraía información de una base de datos montada en MySQL y que se tenía que actualizar de forma manual. Lo cual parecía práctico ya que este sistema actualiza la información no más de 3 veces al año.


Normalmente me hacían llegar la información en un archivo de excel, el cúal debido a problemas de codificación tenía que convertir a CSV por medio de Google Sheets, esto para mantener codificación UTF-8 para que fuera compatible con mis bases de datos de MySQL sin acabar con un montón de caracteres raros. Posteriormente hacía un “Drop Table” e importaba el archivo con toda la información actualizada.

Si, todo un enredo, losé.

Después de un tiempo de estar trabajando de esta manera, tuve que actualizar sólo ciertos campos de la base de datos. Y como no quería preocuparme de sobreescribir toda la tabla, para estar más tranquilo subí la información en una tabla nueva de la cual tomé la información para actualizar datos de una tabla otra. (Ahora parece que soy fan de los enredos, ¿cierto?)

En fin, el procedimiento que seguí fué el siguiente:

1-. Subir el archivo CSV con los datos a actualizar en una tabla nueva (tabla_origen).

2.- Actualizar la base de datos por medio de un INNER JOIN (esto para actualizar datos de una tabla a otra) . Utilizando el siguiente código:

UPDATE tabla_destino
INNER JOIN tabla_origen ON tabla_destino.campo_clave = tabla_origen.campo_clave
SET tabla_destino.campo_actualizar = tabla_origen.campo_actualizar
WHERE tabla_origen.campo_clave = tabla_destino.campo_clave

En este código se especifica el campo comparativo que en este caso llamaremos “campo_clave” que debería existir tanto en la tabla que contiene la información que necesito actualizar (tabla_origen), como en la tabla que debería recibir la información actualizada (tabla_destino).

El “campo_actualizar” es el campo en el que requiero insertar la información actualizada. En este caso el campo se llama de la misma manera en las dos tablas (lo hice así sólo para con propósitos prácticos).

Quizá no es la manera más eficiente de realizar este procedimiento. Sin embargo, funcionó sin dañar la tabla de destino.

Cabe aclarar que no soy un experto en el lenguaje y que el uso del procedimiento que describo aquí, así como cualquier código, es responsabilidad de quién lo utiliza. Difícilmente, podría orientarte en caso de que tuvieras un problema al seguir este procedimiento.