Sentencia CREATE TABLE en SQL

CREATE TABLE es la sentencia SQL para crear las diferentes tablas que conformarán nuestras bases de datos relacionales. Una tabla se divide en filas y columnas y permite almacenar datos y relacionarlos con otras tablas a través de claves Foreign Key.

La sentencia CREATE TABLE permite definir por tanto los campos que harán referencia a las columnas de la tabla junto al tipo de dato correspondiente, así como las restricciones pertinentes, ya sea la definición de la Primary Key para identificar única e inequívocamente a cada registro y las Foreign Key para establecer relaciones con otras tablas del modelo, por citar algunos ejemplos.

En resumen, la estructura del CREATE TABLE se define de la siguiente manera:

CREATE TABLE nombreTabla (nombreCampo tipo de dato y propiedades) CONSTRAINT (restricciones)

Para entender mejor el funcionamiento del CREATE TABLE, vamos a escribir y explicar las sentencias de la creación de dos nuevas tablas (Clientes y Pedidos) en nuestra base de datos.

Podemos utilizar la base de datos con el nombre tienda que utilizamos de ejemplo en la sección CREATE DATABASE.

Example icon

CREATE TABLE Clientes(

    idClientes       INT IDENTITY(1,1),
    nombre           VARCHAR(255) NOT NULL,
    apellidos        VARCHAR(255) NOT NULL,
    direccion        VARCHAR(255),
    cuenta           INT,

    CONSTRAINT pk_clientes_idClientes PRIMARY KEY (idClientes)

);

De dicha sentencia sacamos las siguientes conclusiones:

  • El campo idClientes es de tipo INT, es decir, solo admite valores numéricos enteros y la propiedad IDENTITY (1,1) nos indica que el valor de dicho campo irá progresando secuencialmente de uno en uno a medida que vamos añadiendo datos, empezando desde el uno. Además, en el CONSTRAINT se define a idClientes como la clave Primary Key de la tabla.

  • Los campos nombre, apellidos y direccion admiten valores alfanuméricos hasta una longitud máxima de 255 caracteres. Los dos primeros; nombre y apellidos; comparten la propiedad NOT NULL por lo que no admitirán valores nulos, teniendo que estar siempre informados para cada registro.

  • El campo cuenta es de tipo INT, el cual admite valores numéricos y al no indicarle propiedad, admite nulos.

  • En el CONSTRAINT se define nombre propio a la Primary Key: pk_clientes_idClientes para identificarla más fácilmente.

CREATE TABLE Pedidos(

    idPedidos              INT IDENTITY(1,1),
    producto               VARCHAR(255),
    descripcionProducto    VARCHAR(255),
    precio                 FLOAT,
    fechaPedido            DATE,
    numeroProductos        INT DEFAULT(0),
    totalPrecio            AS precio * numeroProductos,
    idClientes INT,

    CONSTRAINT pk_pedidos_idPedidos PRIMARY KEY(idPedidos),
    CONSTRAINT uq_pedidos_producto UNIQUE (producto),
    CONSTRAINT fk_clientes_pedidos FOREIGN KEY (idClientes) REFERENCES Clientes(idClientes)

);

De dicha sentencia sacamos las siguientes conclusiones:

  • El campo idPedidos es de tipo entero y tiene la propiedad IDENTITY (1,1) por lo que irá progresando secuencialmente de uno en uno por cada registro. Además, dicho campo está definido en el CONSTRAINT como Primary Key.

  • Los campos producto y descripcionProducto son de tipo VARCHAR, por lo que admiten valores alfanuméricos de hasta 255 caracteres cada uno.

  • El campo precio es de tipo FLOAT, lo cual admite valores numéricos con decimales.

  • El campo fechaPedido es de tipo DATE, para registrar formato fechas. El formato por defecto podrá ser modificado con diferentes máscaras de entrada para ajustarlo a las necesidades requeridas.

  • El campo numeroProductos es de tipo INT, por lo que solo admitirá valores numéricos enteros. La propiedad DEFAULT indica un valor por defecto, en este caso 0.

  • El campo totalPrecio es el resultado de una operación aritmética del resultado de la multiplicación de los valores de los campos precio y numeroProductos

  • En el CONSTRAINT se define al campo idPedidos como Primary Key y a dicha clave se le asigna el nombre propio: pk_pedidos_idPedidos

  • En el CONSTRAINT se define al campo producto como Unique Key y a dicha clave se le asigna el nombre propio: uq_pedidos_produto

  • En el CONSTRAINT se establece la relación entre ambas tablas (Clientes y Pedidos) a través de la Foreign Key (idClientes) definida en la tabla Pedidos. Además, a dicha clave se le asigna el nombre: fk_clientes_pedidos

Es posible definir tablas temporales a partir de las tablas recién creadas. Como su nombre indica, dichas tablas no serán permanentes y nos permitirán manejar los datos temporalmente sin afectar a las tablas y datos originales.


La inserción de datos en las tablas, se realiza a través de la sentencia INSERT INTO.