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
idClienteses 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 elCONSTRAINTse define aidClientescomo la clave Primary Key de la tabla. -
Los campos
nombre,apellidosydireccionadmiten valores alfanuméricos hasta una longitud máxima de 255 caracteres. Los dos primeros;nombreyapellidos; comparten la propiedadNOT NULLpor lo que no admitirán valores nulos, teniendo que estar siempre informados para cada registro. -
El campo
cuentaes de tipoINT, el cual admite valores numéricos y al no indicarle propiedad, admite nulos. -
En el
CONSTRAINTse define nombre propio a la Primary Key:pk_clientes_idClientespara 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
idPedidoses 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 elCONSTRAINTcomo Primary Key. -
Los campos
productoydescripcionProductoson de tipoVARCHAR, por lo que admiten valores alfanuméricos de hasta 255 caracteres cada uno. -
El campo
precioes de tipoFLOAT, lo cual admite valores numéricos con decimales. -
El campo
fechaPedidoes 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
numeroProductoses de tipoINT, por lo que solo admitirá valores numéricos enteros. La propiedadDEFAULTindica un valor por defecto, en este caso 0. -
El campo
totalPrecioes el resultado de una operación aritmética del resultado de la multiplicación de los valores de los camposprecioynumeroProductos -
En el
CONSTRAINTse define al campoidPedidoscomo Primary Key y a dicha clave se le asigna el nombre propio:pk_pedidos_idPedidos -
En el
CONSTRAINTse define al campoproductocomo Unique Key y a dicha clave se le asigna el nombre propio:uq_pedidos_produto -
En el
CONSTRAINTse establece la relación entre ambas tablas (ClientesyPedidos) 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.