CREATE TABLE y ALTER TABLE en SQL: tipos de datos, claves y restricciones


Hasta ahora trabajamos con tablas ya existentes. En esta guía vamos a entender cómo se diseña una tabla desde cero y qué significa cada parte de su definición.

Diseñar antes de escribir SQL

Antes de crear una tabla conviene pensar qué representa. Una tabla debería tener una responsabilidad clara: alumnos, cursos, productos, ventas, etc.

El diseño comienza identificando:

  • la entidad;
  • sus atributos;
  • qué dato identifica cada fila;
  • qué campos son obligatorios;
  • qué reglas deben cumplirse;
  • con qué otras entidades se relaciona.

¿Qué hace CREATE TABLE?

CREATE TABLE crea una nueva estructura donde luego podremos guardar registros.

CREATE TABLE alumnos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100),
    apellido VARCHAR(100),
    edad INT,
    email VARCHAR(150)
);

Dentro de los paréntesis definimos las columnas, su tipo y las reglas que deben cumplir.

En otras palabras, CREATE TABLE no crea “datos”: crea el molde que determina cómo podrán almacenarse esos datos.

¿Qué es un tipo de dato?

El tipo de dato define qué clase de valor puede guardarse en una columna y cuánto espacio o precisión necesita.

INT

Se usa para números enteros. Es apropiado para edades, cantidades, identificadores o contadores, pero no para teléfonos o documentos si no vamos a hacer operaciones matemáticas con ellos.

edad INT

VARCHAR

Texto de longitud variable. El número entre paréntesis indica la longitud máxima permitida, no la cantidad fija de espacio que necesariamente ocupará cada valor.

nombre VARCHAR(100)

TEXT

Texto largo. Es útil para descripciones extensas, observaciones o contenido donde VARCHAR puede quedarse corto.

descripcion TEXT

DECIMAL

Valores decimales exactos, ideal para dinero.

precio DECIMAL(10,2)

El 10 indica la cantidad total de dígitos y el 2 la cantidad de decimales.

DATE y DATETIME

fecha_nacimiento DATE
fecha_creacion DATETIME

BOOLEAN

Representa valores lógicos verdadero/falso. En MySQL suele mapearse internamente a un entero pequeño.

activo BOOLEAN

PRIMARY KEY

Identifica de forma única cada fila.

id INT PRIMARY KEY

Una buena clave primaria debe ser única y estable.

Además, no debería depender de un dato que pueda cambiar frecuentemente. Por eso muchas tablas utilizan un identificador numérico independiente del negocio.

AUTO_INCREMENT

Hace que MySQL genere el siguiente número automáticamente.

id INT AUTO_INCREMENT PRIMARY KEY

NOT NULL

Indica que el campo es obligatorio.

Sin NOT NULL, la columna puede contener NULL, es decir, ausencia de valor. Eso no es lo mismo que una cadena vacía ni que cero.

nombre VARCHAR(100) NOT NULL

UNIQUE

Impide valores duplicados.

Es apropiado para datos que deben ser exclusivos, como un email, número de matrícula o código interno, siempre que las reglas del negocio realmente exijan unicidad.

email VARCHAR(150) UNIQUE

DEFAULT

Define un valor predeterminado cuando no enviamos uno.

activo BOOLEAN DEFAULT TRUE

CHECK

Permite imponer una condición.

Por ejemplo, podemos impedir edades negativas o porcentajes fuera del rango esperado. Esto mueve parte de la validación al propio motor de base de datos.

edad INT CHECK (edad >= 0)

FOREIGN KEY

Una clave foránea conecta una tabla con otra.

FOREIGN KEY (curso_id)
REFERENCES cursos(id)

Esto significa que curso_id debe apuntar a un curso válido.

La columna relacionada debería tener un tipo compatible con la clave referenciada. Si cursos.id es INT, normalmente alumnos.curso_id también debe ser INT.

Integridad referencial

Gracias a las claves foráneas, la base puede impedir relaciones inválidas.

Qué ocurre si borramos el registro relacionado

Imaginemos que un alumno apunta al curso 5 y queremos eliminar ese curso. MySQL necesita saber qué hacer con esa relación.

Las opciones típicas son:

  • RESTRICT o comportamiento equivalente: impedir la eliminación;
  • CASCADE: propagar la eliminación;
  • SET NULL: mantener el registro hijo pero quitar la referencia.

ON DELETE y ON UPDATE

Definen qué ocurre si cambia o se elimina el registro relacionado.

FOREIGN KEY (curso_id)
REFERENCES cursos(id)
ON DELETE SET NULL
ON UPDATE CASCADE

Modificar estructura no es lo mismo que modificar datos

UPDATE cambia valores dentro de filas. ALTER TABLE cambia la estructura de la tabla: columnas, tipos o restricciones.

ALTER TABLE

ALTER TABLE modifica una tabla ya creada.

Agregar una columna

ALTER TABLE alumnos
ADD telefono VARCHAR(30);

Modificar una columna

ALTER TABLE alumnos
MODIFY telefono VARCHAR(50) NOT NULL;

Renombrar una columna

ALTER TABLE alumnos
RENAME COLUMN telefono TO celular;

Eliminar una columna

ALTER TABLE alumnos
DROP COLUMN celular;

DROP TABLE

Elimina la tabla completa: estructura y datos.

DROP TABLE alumnos;

TRUNCATE TABLE

Vacía la tabla, pero conserva su estructura.

Es una operación mucho más drástica que un DELETE con WHERE: no sirve para eliminar selectivamente algunas filas.

TRUNCATE TABLE alumnos;

IF NOT EXISTS

Evita error si la tabla ya existe.

CREATE TABLE IF NOT EXISTS cursos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL
);

Cómo diseñar una tabla correctamente

Antes de crearla conviene responder:

  • ¿qué entidad representa?
  • ¿cuál es su clave primaria?
  • ¿qué campos son obligatorios?
  • ¿qué datos deben ser únicos?
  • ¿con qué otras tablas se relaciona?

Errores comunes

  • usar VARCHAR para todo;
  • no definir PRIMARY KEY;
  • no usar NOT NULL donde corresponde;
  • crear relaciones con tipos incompatibles;
  • eliminar columnas sin revisar datos.

Ejercicio

Creá tablas categorias y productos con clave primaria, nombre obligatorio, precio, stock, activo y una clave foránea desde productos a categorías.

¿Qué sigue?

INSERT, UPDATE y DELETE para modificar datos.

¿Te sirvió esta guía? ☕

Si este contenido te ayudó y querés apoyar a Club Programador para seguir publicando ejercicios, proyectos y guías gratuitas, podés colaborar mediante:

☕ Apoyar con Mercado Pago

🌎 Apoyar con PayPal


Ruta SQL / MySQL

Ver todos los contenidos de SQL / MySQL

← Subconsultas en SQL

INSERT, UPDATE y DELETE →


Descubre más desde Club Programador

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Un comentario en “CREATE TABLE y ALTER TABLE en SQL: tipos de datos, claves y restricciones”

Deja un comentario

Descubre más desde Club Programador

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo