Pregunta 1¿Cuál de las siguientes describe correctamente una clave primaria (PRIMARY KEY)?
Crear y modificar tablas
Aprende las definiciones de tablas SQL desde cero. Cubre CREATE TABLE, PRIMARY KEY, la inspección de definiciones y cómo añadir, eliminar y renombrar columnas con ALTER TABLE — todo ejecutándose en vivo en tu navegador.
Sobre el SQL que cubre este curso
Este curso enseña la sintaxis universal de SQL que funciona en los principales RDBMS — MySQL, Oracle, PostgreSQL, SQL Server y más. Los fundamentos como CREATE TABLE / SELECT / WHERE / JOIN / GROUP BY se escriben igual sin importar a qué base de datos cambies.
Por razones técnicas, la consola del navegador ejecuta SQLite, pero siempre que una característica difiera entre bases de datos (la longitud impuesta por los tipos, cómo listar tablas, etc.) verás una nota comparativa como En MySQL escribirías... para que sepas qué usar en otros entornos.
¿Qué es una tabla?
En una base de datos relacional, los datos se almacenan en tablas (rejillas de filas y columnas). Cada tabla está compuesta por columnas y filas (registros), y cada columna tiene un tipo de dato fijo que controla qué valores puede contener.
Diseñar una tabla significa decidir de antemano qué columnas incluir y qué tipo asignar a cada una. Fijar los tipos evita que valores inesperados se cuelen más tarde.
CREATE TABLE — crear una tabla
Para crear una tabla usas la sentencia CREATE TABLE. Escribe el nombre de la tabla y luego, entre paréntesis, lista los pares de nombre de columna + tipo separados por comas. No pongas coma después de la última columna.
Fijar los tipos de antemano dificulta que datos inesperados se cuelen (como una cadena terminando en una columna numérica).
-- Crea una tabla listando nombres de columnas y tipos
CREATE TABLE book_record (
id INTEGER,
title TEXT,
price INTEGER,
published_on TEXT
);
Tipos de datos comunes
Los tipos de datos SQL varían en nombre y detalles entre los distintos sistemas de bases de datos, pero al empezar solo necesitas conocer los siguientes.
| Tipo | Valores almacenados | Ejemplo de uso |
|---|---|---|
| INTEGER | Enteros | id / age / count |
| REAL | Números de punto flotante | score / weight |
| TEXT | Cadenas | name / address / message |
| BLOB | Datos binarios | Flujos de bytes para imágenes, audio, etc. |
| NUMERIC | Números en general (incl. fechas, booleanos) | Sirve también como fecha / booleano |
¿Y los VARCHAR / CHAR / DATETIME de MySQL?
En MySQL y PostgreSQL verás a menudo tipos detallados como VARCHAR(255) / CHAR(13) / BOOLEAN / DATETIME. La consola aquí los acepta sintácticamente, pero la imposición de longitud (como VARCHAR(10) rechazando un carácter número 11) solo entra en juego en RDBMS de tipos estrictos como MySQL o PostgreSQL.
En los ejercicios de este curso, las columnas usan principalmente INTEGER / TEXT / REAL para mantener las cosas simples. Cuando portes una definición a MySQL, puedes reemplazar INTEGER por INT y TEXT por VARCHAR(N) o TEXT — la estructura del CREATE TABLE en sí se mantiene igual.
PRIMARY KEY — identificar una fila de forma única
Una clave primaria (PRIMARY KEY — una columna usada para identificar una fila de forma única) es una columna cuyos valores deben ser únicos y nunca NULL. Conviertes una columna en clave primaria cuando sus valores siempre deben existir y nunca colisionar, como un número de empleado o un ID de usuario.
Con una clave primaria establecida puedes recuperar de forma fiable una sola fila. Como regla, cada tabla debe tener exactamente una clave primaria.
-- Añade PRIMARY KEY después de la definición de la columna
CREATE TABLE member (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
joined_on TEXT
);
INTEGER PRIMARY KEY autonumera
Una columna declarada como INTEGER PRIMARY KEY se autonumera empezando desde 1 cada vez que haces INSERT sin especificar su valor. En MySQL la misma autonumeración se escribe como id INT PRIMARY KEY AUTO_INCREMENT, y en PostgreSQL como id SERIAL PRIMARY KEY. En la consola de este curso, INTEGER PRIMARY KEY es suficiente.
Si haces INSERT con un valor explícito, se usa ese valor, y la siguiente autonumeración continúa desde el entero inmediatamente posterior.
Probar una violación de restricción — cómo funciona NOT NULL
Vamos a romper una regla deliberadamente para ver cómo funcionan las restricciones (reglas que los valores de una columna deben cumplir) como NOT NULL y PRIMARY KEY. NOT NULL es una regla que no permite NULL en la columna. Añadirla a campos obligatorios (nombre, dirección de correo electrónico, etc.) evita que se cuelen filas incompletas.
La tabla user creada al inicio del artículo se definió con name TEXT NOT NULL. Si intentas insertar NULL en la columna name, la base de datos rechazará el INSERT y devolverá un error.
NOT NULL es rechazado con un error. La cadena vacía ('') se trata como un valor distinto de NULL, así que un INSERT con cadena vacía sí pasa — ten presente esa distinción.-- INSERT que provoca una violación de NOT NULL en el Ejercicio 3
INSERT INTO user (id, name, age, city)
VALUES (10, NULL, 30, 'Tokyo');
Inspeccionar y eliminar tablas
Después de crear una tabla, querrás comprobar qué tablas existen y qué columnas tiene cada una. La consola de aquí usa estas dos consultas:
- Lista de tablas: SELECT name FROM sqlite_master WHERE type='table';
- Definiciones de columnas: PRAGMA table_info(table_name);
En MySQL escribirías SHOW TABLES; y DESCRIBE table_name;; Oracle usa SELECT table_name FROM user_tables;. Cada base de datos tiene su propia sintaxis dedicada. DROP TABLE para eliminar una tabla funciona igual en todas las bases de datos.
-- ① Lista todas las tablas
SELECT name FROM sqlite_master WHERE type='table';
-- ② Muestra las definiciones de columnas de la tabla user
PRAGMA table_info(user);
-- ③ Elimina una tabla
DROP TABLE IF EXISTS book_record;
ALTER TABLE — modificar una definición existente
Una vez que tu sistema está en producción, las peticiones del tipo "añade una columna más" o "renombra la tabla" son inevitables. Ahí es donde entra ALTER TABLE. Las cuatro operaciones cubiertas aquí funcionan en MySQL y PostgreSQL con una sintaxis casi idéntica.
| Operación | Sintaxis | Uso |
|---|---|---|
| Renombrar una tabla | ALTER TABLE old_name RENAME TO new_name; | Renombra la tabla entera |
| Añadir una columna | ALTER TABLE table ADD COLUMN col type; | Añade un nuevo atributo |
| Eliminar una columna | ALTER TABLE table DROP COLUMN col; | Elimina un atributo no utilizado |
| Renombrar una columna | ALTER TABLE table RENAME COLUMN old TO new; | Renombra una columna |
MODIFY / CHANGE COLUMN / AFTER de MySQL
En MySQL puedes cambiar el tipo de una columna con ALTER TABLE table MODIFY col type;, cambiar el nombre y el tipo de una columna a la vez con CHANGE COLUMN old new type;, y eliminar la clave primaria con DROP PRIMARY KEY;.
-- Renombra la tabla
ALTER TABLE user RENAME TO user_record;
-- Añade una columna (la columna email se agrega al final)
ALTER TABLE user_record ADD COLUMN email TEXT;
-- Renombra una columna
ALTER TABLE user_record RENAME COLUMN city TO area;
-- Elimina una columna
ALTER TABLE user_record DROP COLUMN email;
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2¿Cuál es la forma más adecuada de inspeccionar las definiciones de columnas de la tabla user en la consola de este curso?
Pregunta 3¿Cuál de estas describe correctamente cómo se comporta ALTER TABLE en la consola de este curso?