MySQL: Modificando los datos de una tabla

Objetivo: aprender lo fundamental para poder modificar datos en tablas MySQL.

Llevo toda la mañana con el gusanillo de escribir algo sobre MySQL y estaba deseando llegar a casa para ponerme a hacerlo. No suelo decidir con antelación a qué dedicaré el siguiente artículo del blog hasta el mismo día en que he de escribirlo. Mis motivaciones pueden ser diferentes: últimamente he escrito bastante sobre Python porque estoy desarrollando mis propias herramientas de productividad empleando ese lenguaje y me resulta mucho más cómodo no desconectar y seguir con lo mismo que dar un brusco requiebro (la programación es como el ajedrez y las matemáticas: monopoliza tu atención y energía); otras veces tomo en consideración los comentarios que me hacen llegar los que me leen (particularmente de modo habitual) e intento ayudarlos preferentemente; y, desde luego, también está el remordimiento, que por ejemplo me está martirizando recordándome que llevo varios meses sin decir ni pío sobre Knoppix (entre otros temas).

Sea lo que sea, es el momento de aplicar una nueva mano de pintura sobre MySQL.

Si echas un vistazo al índice general de artículos dedicados al tema (los más recientes son los de arriba) verás qué ya sabemos hacer bastantes cosas: crear tablas, rellenarlas, agregar nuevos datos, eliminarlos… Hoy veremos cómo cambiar datos ya existentes.

Tomemos una tabla de ejemplo, como esta que me he encontrado de artículos anteriores:

mysql> select * from consumibles;
+------------+---------------------+-------+
| referencia | impresora           | stock |
+------------+---------------------+-------+
| ACME2598X  | ACME INKJET Ultra   |     5 |
| ACME4501Y  | ACME PseudoJET Plus |    12 |
+------------+---------------------+-------+
2 rows in set (0.00 sec)

Se trata de una sencilla tabla para mantener el stock de consumibles de impresión. Agregaremos algunas filas para tener más juego, a la vez que nos servirá para repasar conceptos:

mysql> INSERT INTO consumibles VALUES
    -> ('WG31', 'WALNUT InkJetPrad', 2);
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO consumibles VALUES
    -> ('WG40', 'WALNUT LaserGROVE', 10);
Query OK, 1 row affected (0.06 sec)

Tras lo cual consumibles ofrece el siguiente aspecto:

mysql> SELECT * FROM consumibles;
+------------+---------------------+-------+
| referencia | impresora           | stock |
+------------+---------------------+-------+
| ACME2598X  | ACME INKJET Ultra   |     5 |
| ACME4501Y  | ACME PseudoJET Plus |    12 |
| WG31       | WALNUT InkJetPrad   |     2 |
| WG40       | WALNUT LaserGROVE   |    10 |
+------------+---------------------+-------+

Imagina a continuación que colocamos un tóner de la LaserGROVE y otro de la PseudoJET, disminuyendo su stock en una unidad. ¿Cómo reflejaríamos estos cambios en la tabla de consumibles?

Comencemos por la LaserGROVE. Presta mucha atención al siguiente comando:

mysql> UPDATE consumibles SET stock = 9
    -> WHERE referencia = 'WG40';
Query OK, 1 row affected (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 0

El comando es UPDATE, seguido del nombre de la tabla. A continuación, con SET, indicamos la columna o columnas que queremos modificar, junto con su valor. La claúsula WHERE, que ya conociste en el artículo dedicado a cómo eliminar registros, nos sirve para indicar en qué filas realizaremos los cambios.

Has de ser muy cuidadoso con WHERE, pues, tal como está escrito el comando, se actualizarán todas las filas que cumplan la condición del filtro. En caso de duda, no hubiese estado de más comprobar mediante un SELECT cuál sería el ámbito de actuación antes de realizar la modificación:

mysql> SELECT * FROM consumibles WHERE referencia = 'WG40';
+------------+-------------------+-------+
| referencia | impresora         | stock |
+------------+-------------------+-------+
| WG40       | WALNUT LaserGROVE |    10 |
+------------+-------------------+-------+
1 row in set (0.00 sec)

Como puedes observar, sólo aparece la fila sobre la que queremos actuar.

Fíjate cómo queda la tabla consumibles tras la actualización del stock de la LaserGrove:

mysql> Smysql> SELECT * FROM consumibles;
+------------+---------------------+-------+
| referencia | impresora           | stock |
+------------+---------------------+-------+
| ACME2598X  | ACME INKJET Ultra   |     5 |
| ACME4501Y  | ACME PseudoJET Plus |    12 |
| WG31       | WALNUT InkJetPrad   |     2 |
| WG40       | WALNUT LaserGROVE   |     9 |
+------------+---------------------+-------+
4 rows in set (0.00 sec)

Podríamos emplear un comando similar para actualizar el stock de la PseudoJET, pero prefiero mostrarte una nueva técnica:

mysql> UPDATE consumibles SET stock = stock - 1
    -> WHERE referencia = 'ACME4501Y';
Query OK, 1 row affected (0.15 sec)
Rows matched: 1  Changed: 1  Warnings: 0

En lugar de indicar directamente el contenido del campo stock hemos utilizado una expresión aritmética que se ocupa de decrementar en una unidad su valor.

Creo que es suficiente por hoy: las unidades de información han de ser pequeñas pero significativas, de modo que no se deje de percibir sensación de avance tras su estudio.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2012/08/mysql-modificando-los-datos-de-una-tabla/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


¡Accede al índice con todos los artículos sobre MySQL!

8 opiniones en “MySQL: Modificando los datos de una tabla”

  1. Hola Javier,

    Tengo un problemita, tengo una tabla con unas 127,000 entradas que tengo que cambiarles una palabra que por igual todas las entradas contienen.

    Ejemplo:

    javiersuper a javiermega
    lestersuper a lestermega
    juancitosuper a juancitomega

    Como puedo hacer esto

    Por lo menos con este comando puedo imprimir una pagina 25 entradas con todo esto:

    select * from `usuarios_pro` where `name` like “%super%” limit 0,25

  2. Estimado buenas tardes, también me gusta la programación y quiero desarrollar una sistema web en PHP con MYSQL para control de documentos de mi trabajo, he creado un CRUD que ya funciona el registro, actualizar o modificar y eliminar , el caso es que tengo mi tabla Informes con campos num_informe, asunto, referencia y he creado la tabla informe_modifica con campos num_informe, asunto, referencia, fec_actualizacion y he creado un triger que me realiza la actualización que funciona en la primera actualizacion nada mas, para otroas ya no puedo sale el erro #1062 …mi consulta es si se puede modificar 2, 3 y hasta cuantas ves el asunto, referencia o debo de hacerlo de otra manera ?

    trigger actualiza o modifica informe

    CREATE TRIGGER actualiza_informe AFTER UPDATE ON informes FOR EACH ROW INSERT INTO informe_modifica (num_informe, asunto, referencia) VALUES (OLD.num_informe, NEW.asunto, NEW.refrencia, NOW())

    Nota: El numero de informe es el PK no puede modificarse

Deja un comentario