Tipos de columnas / Creación de la tabla books
Clase 8 de 24 • Curso de SQL y MySQL 2018
Contenido del curso
CREATE
INSERT
Bash y archivos SQL
SELECT
Consultas en MySQL
Contenido Bonus
Aprende a construir una base de datos en MySQL con comandos claros y decisiones sólidas: desde CREATE DATABASE con IF NOT EXISTS hasta el diseño de la tabla books con un ID autoincremental, tipos de datos correctos, restricciones NOT NULL y valores por defecto. Todo con enfoque práctico y listo para producción.
¿Cómo crear y validar una base de datos en MySQL?
Para comenzar, se crea la base separando operación y catálogo: CREATE DATABASE y el modificador IF NOT EXISTS evitan errores innecesarios y devuelven warnings cuando ya existe.
- Usa IF NOT EXISTS para blindar el flujo sin fallar en error.
- Verifica con SHOW WARNINGS para entender el motivo del aviso.
- Diferencia entre error y query OK: afecta el control de flujo.
CREATE DATABASE IF NOT EXISTS platzi_operation;
SHOW WARNINGS; -- explica si ya existía
¿Qué diferencia hay entre error y query OK?
- Sin IF NOT EXISTS: causa error si la base ya existe.
- Con IF NOT EXISTS: devuelve query OK y un warning amigable.
- Impacto clave: control de flujo y experiencia del developer.
¿Cómo seleccionar y explorar la base de datos?
- Selecciona el contexto con USE: cambia el puntero de la consola.
- Lista bases con SHOW DATABASES.
- Si no hay tablas, MySQL responde Empty set.
USE platzi_operation;
SHOW DATABASES;
¿Cómo nombrar y crear la tabla books con best practices?
Usa nombres en plural y en inglés: books. Facilita la interoperabilidad por convention over configuration.
- Nombre plural en inglés: books.
- Evita ambigüedades en dominios y sistemas distintos.
- Crea con IF NOT EXISTS para ejecuciones repetibles.
CREATE TABLE IF NOT EXISTS books (
book_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT
-- más columnas abajo
);
¿Por qué toda tabla necesita un ID autoincremental?
- Identifica de forma única cada tupla con un entero autoincremental.
- Considera el comportamiento: si borras el 3, el siguiente será el 4. No hay reutilización de IDs.
- Nota clave: el máximo ID no equivale a la cardinalidad de la tabla.
¿Qué tipos de datos, restricciones y defaults aplicar?
Diseña cada columna como una característica del libro. Evita guardar binarios; mejor guarda referencias numéricas y URLs cuando corresponda.
¿Cómo manejar texto, nulos y longitud con VARCHAR?
- title VARCHAR(100) NOT NULL: todo libro debe tener título.
- Diferencia crítica: NULL no es lo mismo que cadena vacía "".
- Piensa en desempeño: limita longitud según la búsqueda y el caso de uso.
ALTER TABLE books
ADD COLUMN title VARCHAR(100) NOT NULL;
¿Por qué usar UNSIGNED e interpretar la cardinalidad?
- UNSIGNED extiende el rango positivo al no almacenar el signo.
- Útil para IDs y valores que nunca serán negativos.
- Tipos de enteros: TINYINT, INT, BIGINT. Elige según el tamaño del dominio.
ALTER TABLE books
MODIFY book_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT;
¿Cómo guardar precios, banderas y descripciones?
- Año de edición: entero positivo con valor por defecto cuando aplique.
ALTER TABLE books
ADD COLUMN year INT UNSIGNED NOT NULL DEFAULT 1900; -- ejemplo didáctico
- Idioma con estándar ISO de dos letras y comentario documental.
ALTER TABLE books
ADD COLUMN language VARCHAR(2) NOT NULL DEFAULT 'ES' COMMENT 'ISO 639-1';
- Portada como URL, no binario: almacena la ruta en VARCHAR.
ALTER TABLE books
ADD COLUMN cover_url VARCHAR(500) NULL;
- Precio con DOUBLE(6,2): total de dígitos y decimales; suficiente para una librería. FLOAT se usa para cálculos con hasta seis decimales.
ALTER TABLE books
ADD COLUMN price DOUBLE(6,2) NOT NULL DEFAULT 10;
- Banderas booleanas con TINYINT(1): 1 o 0 para estados como vendible.
ALTER TABLE books
ADD COLUMN sellable TINYINT(1) NOT NULL DEFAULT 1; -- true por defecto
- Copias disponibles: entero no nulo; al menos 1 en la práctica.
ALTER TABLE books
ADD COLUMN copies INT NOT NULL;
- Descripción extensible con TEXT: elige entre TINYTEXT, TEXT y LONGTEXT según tamaño esperado.
ALTER TABLE books
ADD COLUMN description TEXT NULL;
Punto a futuro: el autor no se guarda como texto libre, sino como referencia numérica a otra tabla vinculada por IDs, aprovechando comparaciones binarias eficientes.
¿Agregarías otra columna o ajustarías tipos y límites para tu caso? Cuéntalo en los comentarios y explica tu criterio.