¿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 con seguridad

Después de esta lección: Puedo añadir, cambiar y borrar filas con seguridad.

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

Todos los precios se pusieron a cero

Un desarrollador novato quiso cambiar el precio de un producto. Se le olvidó una palabra corta.

Todos los productos de la tabla pasaron a costar 0 € y la tienda estuvo regalando el género hasta la hora de comer.

Cambiar datos es fácil. Cambiar solo los datos que querías es la habilidad.

Al terminar esta lección

Nota

Puedo añadir, cambiar y borrar filas con seguridad.

Palabras clave

PalabraQué significa
INSERTañade filas nuevas a una tabla
UPDATEcambia valores de filas que ya existen
DELETEquita filas de una tabla
Transacciónun grupo de cambios que ocurren todos o ninguno
Commithace permanentes 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.

Trabaja con una copia, nunca con la tienda

En esta lección vas a cambiar datos. La tienda debe quedar como está, así que primero haces una copia.

Estos Run entran, crean tu propia base student_depot y copian los cuatro productos de jardín en una tabla llamada shelf.

Puedes repetirlos cuando quieras para empezar de nuevo.

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.

Un nombre corto para el cliente

Comando
alias db='mariadb -h db -u student -pstudent -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.

Crear tu propia base

Comando
db "CREATE DATABASE IF NOT EXISTS student_depot"

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

Tirar una copia antigua

Comando
db "DROP TABLE IF EXISTS student_depot.shelf"

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 jardín

Comando
db "CREATE TABLE student_depot.shelf AS SELECT id, name, price, stock FROM shop.products WHERE category_id = 3"

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

INSERT añade una fila

INSERT INTO nombra la tabla y sus columnas. VALUES da un paréntesis de valores por cada fila nueva.

Da los valores en el mismo orden que las columnas. Una columna que omites toma su valor por defecto, o NULL.

Si se rompe una regla de clave, la base rechaza la fila, como en la primera lección.

Añadir unos guantes

Comando
db "INSERT INTO student_depot.shelf (id, name, price, stock) VALUES (100, 'Garden Gloves', 6.50, 25)"

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

UPDATE cambia filas y WHERE elige cuáles

UPDATE nombra la tabla. SET da el valor nuevo. WHERE elige las filas.

Sin WHERE, cambian todas las filas.

El hábito seguro tiene tres pasos. Escribe un SELECT con el mismo WHERE. Comprueba que muestra las filas que querías. Luego cambia SELECT por UPDATE.

Paso 1: mira antes las filas

Comando
db "SELECT id, name, stock FROM student_depot.shelf WHERE stock < 15 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.

Paso 2: cambia justo esas filas

Comando
db "UPDATE student_depot.shelf SET stock = stock + 10 WHERE stock < 15"

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

Paso 3: vuelve a mirar

Comando
db "SELECT id, name, stock FROM student_depot.shelf 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.

DELETE quita filas para siempre

DELETE FROM quita las filas que cumplen su WHERE. Sin WHERE vacía la tabla entera.

No hay papelera. Valen los mismos tres pasos: primero SELECT, luego DELETE, y otra vez SELECT.

Quitar los guantes

Comando
db "DELETE FROM student_depot.shelf WHERE id = 100"

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

Un error frecuente

Advertencia

Mucha gente cree que un UPDATE o un DELETE toca solo la fila que tiene en mente. Toca todas las filas que cumplen la condición, y sin WHERE son todas. Escribe primero el WHERE y compruébalo con un SELECT.

El error, solo en la copia

Comando
db "UPDATE student_depot.shelf SET 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.

Ver lo que hizo

Comando
db "SELECT id, name, stock FROM student_depot.shelf 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.

Una transacción es todo o nada

Mover 50 € entre dos cuentas son dos cambios. Si la máquina falla entre uno y otro, 50 € han desaparecido.

Una transacción agrupa los cambios. COMMIT los hace todos permanentes. ROLLBACK los deshace todos.

Hasta que haces commit, nadie más ve los cambios. El siguiente Run envía cuatro sentencias en una misma sesión: abre una transacción, borra todas las filas de la copia, la deshace y cuenta.

Borrarlo todo y deshacerlo

Comando
db "START TRANSACTION; DELETE FROM student_depot.shelf; ROLLBACK; SELECT COUNT(*) AS still_there FROM student_depot.shelf"

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

Ejemplo resuelto: un fallo a medias

PasoCuenta 1Cuenta 2Sin transacciónCon transacción
Inicio200 €100 €BienBien
Tras el primer cambio150 €100 €Faltan 50 €Aún no es permanente
Fallo150 €100 €Se queda malSe deshace: 200 € y 100 €
Los dos cambios y COMMIT150 €150 €BienBien

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

Ver el modo por defecto

Comando
db "SELECT @@autocommit AS autocommit"

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

Por qué la respuesta es 1

Nota

Normalmente cada sentencia es una pequeña transacción que se confirma al instante. Por eso un UPDATE suelto no se puede deshacer. Para tener un rollback debes escribir antes START TRANSACTION, dentro de una misma sesión.

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.