Resumen

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.