SQL

Definición de tablas con CREATE TABLE en SQL

La sentencia CREATE TABLE es una instrucción de DDL (Data Definition Language) que se utiliza para crear una nueva tabla dentro de una base de datos relacional. Su función es establecer el esquema estructural del objeto: define el nombre de la tabla, las columnas que almacenarán los registros, los tipos de datos admitidos y las restricciones de integridad pertinentes.

Sintaxis

CREATE TABLE [IF NOT EXISTS] nombre_tabla (
    columna1 tipo_dato [restricciones],
    columna2 tipo_dato [restricciones],
    ...,
    [restricciones_de_tabla]
);

Desglose de elementos

  • nombre_tabla: Identificador único que se le asigna a la tabla dentro del esquema o base de datos activa.
  • IF NOT EXISTS: Cláusula opcional soportada por múltiples motores (como PostgreSQL, MySQL y SQLite) que evita un error de ejecución si la tabla ya fue creada previamente.
  • columnaX: Nombre del campo o atributo que contendrá un valor específico para cada registro.
  • tipo_dato: Formato y tamaño del valor asignable a la columna (por ejemplo, INT, VARCHAR(n), DECIMAL(p,s), BOOLEAN, TIMESTAMP).
  • restricciones: Reglas aplicadas a nivel de columna o de tabla para garantizar la validez y consistencia de los datos (como PRIMARY KEY, NOT NULL, UNIQUE, CHECK, DEFAULT o FOREIGN KEY).

Ejemplo práctico

El siguiente script crea una tabla llamada usuarios con restricciones de clave primaria, unicidad y valores por defecto:

CREATE TABLE usuarios (
    id INT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    activo BOOLEAN DEFAULT TRUE,
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Si ejecutás esta instrucción desde una consola interactiva (por ejemplo, en PostgreSQL vía psql), la salida confirma la creación del objeto:

CREATE TABLE

Podés verificar la estructura generada inspeccionando la tabla:

\d usuarios
# Salida / Output
                                      Table "public.usuarios"
     Column     |            Type             | Collation | Nullable |           Default           
----------------+-----------------------------+-----------+----------+-----------------------------
 id             | integer                     |           | not null | 
 nombre         | character varying(50)       |           | not null | 
 email          | character varying(100)      |           | not null | 
 activo         | boolean                     |           |          | true
 fecha_registro | timestamp without time zone |           |          | CURRENT_TIMESTAMP
Indexes:
    "usuarios_pkey" PRIMARY KEY, btree (id)
    "usuarios_email_key" UNIQUE CONSTRAINT, btree (email)

Restricciones comunes en columnas

La siguiente tabla resume las restricciones más habituales al diseñar una tabla relacional:

Comando / Restricción Descripción
PRIMARY KEY Identifica de forma única cada fila en la tabla; aplica internamente UNIQUE y NOT NULL.
NOT NULL Impide que una columna acepte valores nulos (NULL).
UNIQUE Garantiza que todos los valores de una columna sean distintos entre sí.
DEFAULT <valor> Asigna un valor predeterminado si no se especifica uno explícitamente durante una inserción.
CHECK (<condición>) Valida que los datos ingresados en la columna cumplan una condición booleana específica.
FOREIGN KEY Establece un vínculo referencial con la clave primaria de otra tabla para mantener la integridad referencial.

💡 Tip: Definí siempre una clave primaria explícita en cada tabla (PRIMARY KEY). Facilita la indexación automática del motor, agiliza las búsquedas puntuales y simplifica el establecimiento de relaciones con otras tablas.

⚠️ Atención: En entornos de producción o scripts de migración automatizados, evitá ejecutar CREATE TABLE sin evaluar colisiones de nombres o esquemas. Si vas a modificar una estructura existente, no borres la tabla con DROP TABLE sin un respaldo previo: usá ALTER TABLE para preservar los datos almacenados.