← Catálogo · Antes: Leer un esquema
Semana 3 · Material complementarioCrear una tabla: del CREATE TABLE al DESCRIBE
CREATE TABLE con columnas, tipos y clave primaria; explicar qué comprueba el servidor antes de crearla; y reconocer los errores más comunes por su mensaje.1. DDL: el lenguaje de la estructura
Hasta ahora leíste bases que ya existían. DDL (Data Definition Language) es la parte de SQL que crea y modifica la estructura; no toca los datos. Hoy usamos CREATE: primero la base (CREATE DATABASE y USE), después cada tabla. La ficha que aprendiste a leer con DESCRIBE es exactamente lo que escribís acá.
2. Seguí la sentencia hasta que la tabla existe
Elegí una tabla y avanzá paso a paso: vas a ver cómo el servidor revisa la sintaxis, comprueba las reglas, guarda la definición en el catálogo y confirma. Al final, DESCRIBE muestra qué quedó. Probá también provocar un error: el servidor lo detecta en un paso y la tabla no se crea.
Crear una tabla: del CREATE TABLE al DESCRIBE
Qué se simplifica
Es una simulación con datos de ejemplo: no se conecta a MySQL ni ejecuta SQL real. Los mensajes de error y las fichas son los que devolvió MySQL 8.0.30 al ejecutar estas mismas sentencias en una instancia temporal. En MariaDB algunos textos y tipos cambian (por ejemplo int(11)).
3. Anatomía de una columna
Cada línea entre paréntesis es una columna: nombre TIPO restricciones. Se separan con coma, menos la última.
| Elemento | Qué hace | En la ficha de DESCRIBE |
|---|---|---|
NOT NULL | La columna es obligatoria | Null = NO |
UNIQUE | El valor no puede repetirse (acepta NULL) | Key = UNI |
DEFAULT valor | Valor automático si no se indica | Default = ese valor |
AUTO_INCREMENT | El servidor numera solo: 1, 2, 3… | Extra = auto_increment |
PRIMARY KEY (id) | Identifica de forma única cada fila | Key = PRI |
ENGINE=InnoDB | El motor de almacenamiento (en S9 vemos por qué InnoDB) | No aparece en DESCRIBE |
4. La clave primaria
La clave primaria identifica de forma única cada fila: no se repite, no puede ser NULL y hay una sola por tabla. En este curso usamos una clave artificial numérica llamada id con AUTO_INCREMENT, y marcamos los datos naturales (como el dni) como UNIQUE: un dato del mundo real puede tener errores o cambiar.
Con AUTO_INCREMENT no escribís el id al insertar: el servidor pone el siguiente número. Si borrás la fila 5, el próximo no reutiliza el 5.
5. Clínica de errores de CREATE TABLE
Todos estos los podés provocar en el recurso de arriba, con el mensaje real de MySQL.
| Mensaje | Causa típica | Arreglo |
|---|---|---|
ERROR 1064 … near ') ENGINE=InnoDB' | Una coma de más antes del ) final | Sacar la coma de la última línea |
ERROR 1064 … near 'NOT NULL,…' | Falta el largo de un VARCHAR | VARCHAR(80) |
ERROR 1075: Incorrect table definition… | AUTO_INCREMENT sin ser clave | Agregar PRIMARY KEY (id) |
ERROR 1068: Multiple primary key defined | Dos PRIMARY KEY | Dejar una sola |
ERROR 1046: No database selected | Falta USE | USE biblioteca; |
ERROR 1050: Table '…' already exists | Ya la creaste | DROP TABLE o IF NOT EXISTS |
Estrategia: el mensaje cita desde dónde no entendió. El error casi siempre está justo antes: revisá la línea anterior (¿falta una coma?, ¿un paréntesis?).
6. Autoevaluación
- ¿Qué diferencia hay entre
NOT NULLyPRIMARY KEY? - ¿Por qué
dniesUNIQUEy no la clave primaria? - Borraste la fila con
id = 5. ¿Quéidrecibe el próximoINSERT? - En el recurso, ¿por qué
activo BOOLEANaparece comotinyint(1)enDESCRIBE?
Ver las respuestas
NOT NULLobliga a que haya valor;PRIMARY KEYademás exige que sea único y sirve para identificar la fila.- Porque un dato del mundo real puede tener errores o cambiar; la clave artificial es estable.
UNIQUEigual impide repetidos. - El siguiente número del contador (6 o más):
AUTO_INCREMENTno reutiliza ids. - MySQL no tiene un tipo booleano propio:
BOOLEANes otro nombre deTINYINT(1), yTRUEse guarda como1.
Para insertar en el aula
Copiá este código y pegalo en el editor del aula, en la vista de código fuente (HTML). Usa solo atributos, sin estilos, porque el editor del aula suele quitarlos. Incluye allowfullscreen para que el botón de pantalla completa funcione dentro del aula.