Qué vas a hacer
Una base de datos guarda información en tablas. Una tabla se parece a una hoja de cálculo: cada columna es un tipo de información y cada fila es una cosa, por ejemplo un cliente.
SQL es el lenguaje con el que hablas a una base de datos. En esta lección añades una tabla nueva a una tienda en línea pequeña, metes filas en ella, haces preguntas, cambias una fila y borras otra.
Antes de empezar
Nota
Pulsa Iniciar el laboratorio en la barra de la parte superior de esta lección y espera hasta que diga que está en marcha. La primera vez tarda un poco más, porque en ese momento se crea la base de datos de la tienda. Cada botón Ejecutar de abajo escribe su comando en el terminal de tu laboratorio, uno detrás de otro y en la misma sesión. Para verlos, o para escribir los tuyos, pulsa Abrir el terminal (pestaña nueva) en la barra.
1. Dile al terminal cómo entrar
MySQL crea su propio certificado de seguridad, así que el primer comando le dice al cliente de la base de datos que lo acepte. La conexión sigue siendo privada. El segundo comando crea un nombre corto, sql, para el comando largo que entra en la base de datos shop y ejecuta una sentencia de SQL. Después solo escribes sql y la sentencia entre comillas.
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
alias sql='mariadb -h db -u student -pstudent shop -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.
2. Mira qué tablas hay
La tienda ya tiene tablas. SHOW TABLES las lista. Cada una guarda un tipo de información distinto: customers son las personas que compran y products es lo que compran.
sql "SHOW TABLES"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
3. Mira dentro de una tabla
DESCRIBE enseña las columnas de una tabla: su nombre, su tipo y más datos. Fíjate en la columna Key. PRI significa clave primaria. Una clave primaria es una columna cuyo valor es distinto en cada fila, así que identifica una fila y ninguna otra. Aquí es id.
sql "DESCRIBE customers"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
sql "DESCRIBE products"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
4. Crea una tabla nueva
Ahora creas tu propia tabla, wishlist (lista de deseos): qué cliente quiere qué producto. CREATE TABLE la crea, y lo que va entre paréntesis son sus columnas.
id INT AUTO_INCREMENT PRIMARY KEY: un número entero que MySQL va contando solo para cada fila nueva. Es la clave primaria.customer_idyproduct_id: qué cliente y qué producto. Guardan elidde una fila de otra tabla.priority: cuánto lo desea, de 1 (mucho) a 5. Vale 3 si no dices nada.UNIQUE KEY: el mismo cliente y el mismo producto no pueden estar dos veces en la tabla.FOREIGN KEY(clave foránea): los ids tienen que existir encustomersy enproducts, así que no se puede desear un producto que no está en la tienda.
La sentencia es larga, pero solo la ejecutas una vez.
sql "CREATE TABLE wishlist (id INT AUTO_INCREMENT PRIMARY KEY, customer_id INT NOT NULL, product_id INT NOT NULL, priority INT NOT NULL DEFAULT 3, UNIQUE KEY customer_product (customer_id, product_id), FOREIGN KEY (customer_id) REFERENCES customers(id), FOREIGN KEY (product_id) REFERENCES products(id))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
sql "DESCRIBE wishlist"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
5. Mete filas en la tabla
INSERT INTO añade filas. Primero van la tabla y sus columnas, y luego VALUES y un paréntesis por cada fila. No das un id: MySQL cuenta por ti. Esto añade tres filas: el cliente 1 quiere el producto 1 y el producto 5, y el cliente 2 quiere el producto 5. Después SELECT * muestra todas las columnas de todas las filas.
sql "INSERT INTO wishlist (customer_id, product_id, priority) VALUES (1, 1, 3), (1, 5, 2), (2, 5, 1)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
sql "SELECT * FROM wishlist"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
6. La clave única dice que no
El cliente 1 ya quiere el producto 1. Intenta añadir el mismo par otra vez. MySQL lo rechaza con un error, por culpa de la UNIQUE KEY del paso 4. Este error no es una equivocación tuya: demuestra que la tabla protege sus propios datos. No se ha añadido nada.
sql "INSERT INTO wishlist (customer_id, product_id, priority) VALUES (1, 1, 1)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
sql "SELECT * FROM wishlist"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
La clave foránea también dice que no
Nota
Prueba sql "INSERT INTO wishlist (customer_id, product_id) VALUES (1, 999)" en el terminal. No existe el producto 999, así que la FOREIGN KEY lo rechaza.
7. Haz una pregunta sencilla
SELECT hace una pregunta. FROM dice de qué tabla. WHERE se queda solo con las filas que cumplen la condición, y ORDER BY las ordena. Esta consulta muestra lo que quiere el cliente 1, con lo que más desea primero.
sql "SELECT * FROM wishlist WHERE customer_id = 1 ORDER BY priority"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
sql "SELECT name, price FROM products WHERE price > 50 ORDER BY price DESC"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
8. Une dos tablas
La lista de deseos solo tiene números. Los nombres de los productos están en products. Un join (unión) pone dos tablas una al lado de la otra. JOIN products ON products.id = wishlist.product_id significa: para cada fila de la lista de deseos, busca el producto cuyo id está en product_id. Ahora ya se entiende.
sql "SELECT wishlist.id, products.name, products.price, wishlist.priority FROM wishlist JOIN products ON products.id = wishlist.product_id"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
9. Une tres tablas
Puedes unir otra vez para añadir el nombre del cliente. Es la misma idea, con un JOIN más.
sql "SELECT customers.first_name, products.name, wishlist.priority FROM wishlist JOIN customers ON customers.id = wishlist.customer_id JOIN products ON products.id = wishlist.product_id ORDER BY customers.first_name"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
10. Cambia una fila
UPDATE cambia filas. SET dice el valor nuevo. WHERE id = 2 dice qué fila. Ahora el cliente 1 quiere el producto 5 por encima de todo, así que su prioridad pasa a 1. Después comprueba con un SELECT que la fila ha cambiado de verdad.
sql "UPDATE wishlist SET priority = 1 WHERE id = 2"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
sql "SELECT * FROM wishlist WHERE id = 2"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
No olvides nunca WHERE
Advertencia
Es fácil pensar que UPDATE y DELETE cambian solo la fila que tú quieres. Sin WHERE, cambian todas las filas de la tabla. Escribe siempre el WHERE primero y comprueba con un SELECT antes y después.
11. Borra una fila
DELETE FROM borra filas. Otra vez WHERE dice cuáles. El cliente 2 ha cambiado de idea, así que borra la fila 3. Después mira la tabla: la fila 3 ya no está y las demás siguen.
sql "DELETE FROM wishlist WHERE 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.
sql "SELECT * FROM wishlist"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
12. Cuenta lo que queda
COUNT(*) cuenta filas. Pregunta por la fila 3 y la respuesta es 0, lo que demuestra que la fila ya no existe.
sql "SELECT COUNT(*) AS rows_found FROM wishlist WHERE 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.
13. Míralo en phpMyAdmin
En la barra del laboratorio, pulsa phpMyAdmin para abrirlo en una pestaña nueva. Elige shop a la izquierda. Tu tabla nueva wishlist aparece en la lista junto a las demás. Pulsa wishlist, después Browse (examinar) para ver sus filas y Structure (estructura) para ver la clave primaria y la clave única que has creado.
Hazlo otra vez por tu cuenta
Consejo
Para repetir la lección, borra tu tabla con sql "DROP TABLE wishlist" y vuelve al paso 4. Después prueba tus propias preguntas: ¿qué productos cuestan menos de 10? ¿Qué clientes viven en Paris?
Si se reinició el terminal, ejecuta primero otra vez el alias del paso 1. La base de datos conserva tu tabla.