¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Cambiar datos sin perderlos

Después de esta lección: Puedo añadir, cambiar y borrar datos con INSERT, UPDATE y DELETE sin perder los que no quería tocar.

Lección de 45 min11 comandosLaboratorio de MySQL y phpMyAdmin con una base de datos de una tienda para practicar SQL

El UPDATE que cambió todos los precios

Un empleado quiere subir 10 céntimos el precio de un bocadillo. Escribe UPDATE, se olvida de una palabra y todos los productos de la cantina suben 10 céntimos.

SQL no pregunta si estás seguro. Esta lección enseña a añadir, cambiar y borrar datos con cuidado, y a poder deshacer un error antes de que sea definitivo.

Al terminar esta lección

Nota

Puedo añadir, cambiar y borrar datos con INSERT, UPDATE y DELETE sin perder los que no quería tocar.

Palabras clave

PalabraQué significa
INSERTañade un registro nuevo a una tabla
UPDATEcambia los valores de registros que ya existen
DELETEborra registros de una tabla
Transacciónun grupo de cambios que se guardan todos o ninguno
COMMITguarda los cambios de una transacción
ROLLBACKdeshace los cambios de una transacción

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

INSERT añade un registro nuevo

INSERT INTO nombra la tabla y los campos. VALUES da los valores, en el mismo orden. El texto va entre comillas simples.

Para practicar sin riesgo, harás una copia de la tabla de productos en tu base student_library. Lo que cambies ahí no afecta a la tienda.

Preparar el terminal

Nota

Con el laboratorio iniciado, ejecuta las líneas siguientes en orden. Crean tu base si falta y una copia de los productos. Los Run empiezan por borrar la copia, así que puedes repetirlos.

Aceptar el certificado del servidor

Comando
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Crear tu base si falta

Comando
mariadb -h db -u student -pstudent -e "CREATE DATABASE IF NOT EXISTS student_library"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un nombre corto para ella

Comando
alias lib='mariadb -h db -u student -pstudent student_library -t -e'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Empezar de cero

Comando
lib "DROP TABLE IF EXISTS stock_copy"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Copiar los productos de la tienda

Comando
lib "CREATE TABLE stock_copy AS SELECT id, name, price, stock FROM shop.products"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Añadir un producto nuevo

Comando
lib "INSERT INTO stock_copy (id, name, price, stock) VALUES (100, 'Libreta', 3.50, 20)"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Contar los registros de la copia

Comando
lib "SELECT COUNT(*) AS filas FROM stock_copy"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

UPDATE y DELETE necesitan siempre un WHERE

UPDATE cambia valores. SET dice qué campo y qué valor nuevo. DELETE FROM borra registros.

Las dos órdenes actúan sobre todos los registros que cumplan el WHERE. Sin WHERE, actúan sobre toda la tabla.

El hábito seguro tiene tres pasos: ver, cambiar, volver a ver.

Ejemplo resuelto: ver, cambiar, volver a ver

PasoOrdenQué compruebas
1. VerSELECT ... WHERE id = 1Qué registros va a tocar el WHERE
2. CambiarUPDATE ... SET ... WHERE id = 1Que la orden termina sin error
3. Volver a verSELECT ... WHERE id = 1Que el valor es el nuevo

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Ver: dos libros antes del cambio

Comando
lib "SELECT id, name, stock FROM stock_copy WHERE id IN (1, 2) ORDER BY id"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cambiar: diez unidades más del libro 1

Comando
lib "UPDATE stock_copy SET stock = stock + 10 WHERE id = 1"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Volver a ver

Comando
lib "SELECT id, name, stock FROM stock_copy WHERE id IN (1, 2) ORDER BY id"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pruébalo: ver, cambiar y volver a ver

Código: sql
-- Primero mira, después cambia, después vuelve a mirar.
SELECT item, stock FROM canteen_stock WHERE id = 4;
UPDATE canteen_stock SET stock = stock + 10 WHERE id = 4;
SELECT item, stock FROM canteen_stock WHERE id = 4;
-- Cambia el 10 por un 20 y ejecútalo otra vez.

Un error frecuente

Advertencia

Mucha gente cree que UPDATE y DELETE preguntan antes de cambiar. No preguntan. Sin WHERE, DELETE FROM stock_copy vacía la tabla entera. Escribe primero el WHERE, comprueba con un SELECT y solo entonces cambia el SELECT por la orden.

Pruébalo: borrar los agotados

Código: sql
-- Borra los productos agotados y cuenta los que quedan.
DELETE FROM canteen_stock WHERE stock = 0;
SELECT COUNT(*) AS quedan FROM canteen_stock;
-- Antes de borrar, ¿cuántos había con stock = 0?

Una transacción se puede deshacer

Una transacción agrupa varios cambios. Empieza con START TRANSACTION. Si todo va bien, COMMIT los guarda. Si algo sale mal, ROLLBACK los deshace y la tabla queda como estaba.

Piensa en una transferencia de dinero: o salen los euros de una cuenta y entran en otra, o no pasa nada. Nunca solo la mitad.

Un cambio terrible, deshecho con ROLLBACK

Comando
lib "START TRANSACTION; UPDATE stock_copy SET stock = 0; SELECT COUNT(*) AS agotados FROM stock_copy WHERE stock = 0; ROLLBACK; SELECT COUNT(*) AS agotados FROM stock_copy WHERE stock = 0"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Para ir más lejos: borrar el libro nuevo

En tu copia hay un producto que tú añadiste, la Libreta con el número 100. Escribe un SELECT que lo encuentre y después la orden DELETE que lo borre.

Cuenta los registros antes y después. ¿Qué número esperas? Comprueba que la tienda de verdad sigue teniendo 37 productos.

Sobre este laboratorio y su código: Laboratorio de MySQL y phpMyAdmin con una base de datos de una tienda para practicar SQL

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.