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.
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 tipoINT
, es decir, solo admite valores numéricos enteros y la propiedadIDENTITY (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 elCONSTRAINT
se define aidClientes
como la clave Primary Key de la tabla. -
Los campos
nombre
,apellidos
ydireccion
admiten valores alfanuméricos hasta una longitud máxima de 255 caracteres. Los dos primeros;nombre
yapellidos
; comparten la propiedadNOT NULL
por lo que no admitirán valores nulos, teniendo que estar siempre informados para cada registro. -
El campo
cuenta
es de tipoINT
, 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 propiedadIDENTITY (1,1)
por lo que irá progresando secuencialmente de uno en uno por cada registro. Además, dicho campo está definido en elCONSTRAINT
como Primary Key. -
Los campos
producto
ydescripcionProducto
son de tipoVARCHAR
, por lo que admiten valores alfanuméricos de hasta 255 caracteres cada uno. -
El campo
precio
es de tipoFLOAT
, lo cual admite valores numéricos con decimales. -
El campo
fechaPedido
es de tipoDATE
, 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 tipoINT
, por lo que solo admitirá valores numéricos enteros. La propiedadDEFAULT
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 camposprecio
ynumeroProductos
-
En el
CONSTRAINT
se define al campoidPedidos
como Primary Key y a dicha clave se le asigna el nombre propio:pk_pedidos_idPedidos
-
En el
CONSTRAINT
se define al campoproducto
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
yPedidos
) a través de la Foreign Key (idClientes
) definida en la tablaPedidos
. 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.