Saber crear tablas en SQL
es un concepto importante y fundamental.
En este tutorial, lo guiaré a través del SQL
sintaxis para CREATE TABLE
declaración utilizando ejemplos de código para PostgreSQL y MySQL.
Básico CREATE TABLE
Sintaxis
Esta es la sintaxis básica para CREATE TABLE
declaración:
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
);
Para la primera parte, debe comenzar con CREATE TABLE
seguido del nombre de la tabla que desea crear.
Si quisiera crear una tabla de información del maestro, escribiría algo como esto:
CREATE TABLE teachers();
Dentro del paréntesis, agregará la información para crear las columnas de la tabla. Si olvida los paréntesis, recibirá un mensaje de error.
CREATE TABLE teachers;

El punto y coma al final del paréntesis le dice a la computadora que es el final del SQL
declaración. A veces escuchará que se hace referencia a esto como un terminador de declaración.
¿Qué son MySQL
? motores de almacenamiento?
Según el MySQL
documentación:
Los motores de almacenamiento son componentes de MySQL que manejan las operaciones SQL para diferentes tipos de tablas.
MySQL
utiliza estos motores de almacenamiento para realizar operaciones CRUD (crear, leer, actualizar y eliminar) en la base de datos.
En MySQL
, tiene la opción de especificar el tipo de motor de almacenamiento que desea usar para su tabla. Si omite el ENGINE
cláusula entonces el valor predeterminado será InnoDB.
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
)ENGINE=storage_engine;
¿Qué es el IF NOT EXISTS
cláusula?
Hay una cláusula opcional llamada IF NOT EXISTS
eso verificará si la tabla que desea crear ya existe en la base de datos. Puede colocar esa cláusula justo antes del nombre de la tabla.
CREATE TABLE IF NOT EXISTS teachers();
Si la tabla ya existe, la computadora no creará una nueva tabla.
Si omite el IF NOT EXISTS
e intente crear una tabla que ya existe en la base de datos, recibirá un mensaje de error.
En este ejemplo, primero creé una tabla llamada maestros. Pero si trato de crear esa misma tabla en el siguiente comando, me encontraré con un error.
CREATE TABLE IF NOT EXISTS teachers();
CREATE TABLE teachers();

Cómo crear columnas en la tabla
Dentro del paréntesis para CREATE TABLE
instrucción, va a enumerar los nombres de las columnas que desea crear junto con sus tipos de datos y restricciones.
Este es un ejemplo de cómo podemos agregar cuatro columnas de school_id
, name
, email
y age
a nuestra mesa de profesores. Cada nombre de columna debe estar separado por comas.
CREATE TABLE teachers(
school_id data_type column_constraint,
name data_type column_constraint,
email data_type column_constraint,
age data_type column_constraint
);
Según el MySQL
documentación:
MySQL tiene un límite estricto de 4096 columnas por tabla, pero el máximo efectivo puede ser menor para una tabla determinada. El límite de columna exacto depende de varios factores.
Si está trabajando en MySQL
más pequeño proyectos personales, entonces probablemente no tendrá que preocuparse por exceder el número de columnas para sus tablas.
Según la documentación de PostgreSQL, existe un límite de 1600 columnas por tabla. Similar a MySQL
, un límite exacto puede variar según el espacio en disco o las restricciones de rendimiento.
Tipos de datos en SQL
Cuando está creando columnas en la tabla, debe asignarle un tipo de datos. Los tipos de datos describen el tipo de valor dentro de las columnas.
Aquí hay seis categorías populares de tipos de datos en SQL
:
- Numérico (int, flotante, serial, decimal, etc.)
- Datos y hora (marca de tiempo, fecha, hora, etc.)
- Carácter y cadena (char, varchar, texto, etc.)
- Unicode (ntext, nvarchar, etc.)
- Binario (binario, etc.)
- Varios (xml, tabla, etc.)
Este artículo no analizará todos los tipos de datos, pero cubrirá algunos de los más populares.
Aquí está la lista completa de PostgreSQL
tipos de datos y MySQL
tipos de datos.
Que es SERIAL
y AUTO_INCREMENT
?
En PostgreSQL
, un SERIAL
el tipo de datos es un número entero que se incrementará automáticamente en uno por cada nueva fila que se cree.
Podemos agregar SERIAL
justo después del school_id
columna en nuestra tabla de profesores.
school_id SERIAL
En MySQL
, usaría AUTO_INCREMENT
en lugar de SERIAL
. En este ejemplo, el INT
se utiliza el tipo de datos que representa un número entero.
school_id INT AUTO_INCREMENT
Si agregamos cinco filas a nuestra tabla de maestros, la salida mostraría los números 1, 2, 3, 4, 5 para el school_id
columna porque el número entero se incrementa automáticamente en uno para cada nueva fila.

¿Qué es el VARCHAR
¿tipo de datos?
Un VARCHAR
El tipo de datos es una cadena de longitud variable en la que puede establecer una longitud máxima de caracteres.
Este es un ejemplo del uso de VARCHAR
tipo de datos para el name
y email
columnas en nuestra tabla de profesores. El número 30 es la longitud máxima de caracteres.
name VARCHAR(30) column_constraint,
email VARCHAR(30) column_constraint,
Restricciones de columna en SQL
Estas son reglas que se aplican a los datos dentro de las columnas de la tabla.
Aquí hay una lista de algunas de las restricciones de columna más comunes:
- CLAVE PRINCIPAL:esta clave sirve como un identificador único para la tabla
- CLAVE EXTERNA:esta clave se asegura de que los valores en una columna también estén presentes en otra tabla. Esto sirve como enlace entre las tablas.
- ÚNICO:todos los valores de la columna deben ser únicos
- NOT NULL:los valores no pueden ser NULL. NULL es la ausencia de un valor
- CHECK - prueba un valor contra una expresión booleana
Ejemplos de PRIMARY
y FOREIGN
llaves
En nuestra tabla de profesores, podemos agregar una PRIMARY KEY
al school_id
columna.
Así es como se vería el código en PostgreSQL:
school_id SERIAL PRIMARY KEY
Así es como se vería el código en MySQL:
school_id INT AUTO_INCREMENT PRIMARY KEY
Si quisiera tener más de una columna para la PRIMARY KEY
, entonces lo agregaría justo después de las creaciones de su columna.
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
PRIMARY KEY (column1, column2)
);
Si desea vincular una tabla a otra, puede usar una FOREIGN KEY
.
Digamos que tenemos una tabla llamada district_employees con una clave principal de district_id
. Así es como se vería el código en PostgreSQL:
CREATE TABLE district_employees(
district_id SERIAL PRIMARY KEY,
employee_name VARCHAR(30) NOT NULL,
PRIMARY KEY(district_id)
);
En nuestra tabla de maestros, podemos usar una clave externa y hacer referencia a la tabla district_employees.
district_id INT REFERENCES district_employees(district_id),
CREATE TABLE teachers(
school_id SERIAL PRIMARY KEY,
district_id INT REFERENCES district_employees(district_id),
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
);
Ejemplos de NOT NULL
, CHECK
y UNIQUE
Si queremos asegurarnos de que no tenemos ningún valor que sea nulo, podemos usar NOT NULL
restricción.
name VARCHAR(30) NOT NULL
Podemos usar el CHECK
restricción para garantizar que todos nuestros maestros tengan 18 años o más. El CHECK
la restricción prueba un valor contra una expresión booleana.
age INT CHECK(age >= 18)
Si uno de nuestros valores no cumple con esa condición, obtendremos un mensaje de error.

Podemos usar el UNIQUE
restricción para asegurarse de que todos los correos electrónicos sean únicos.
email VARCHAR(30) UNIQUE
Este es el resultado final de la tabla de profesores:

Así es como se vería el código en PostgreSQL:
CREATE TABLE teachers(
school_id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) UNIQUE,
age INT CHECK(age >= 18)
);
Así es como se vería el código en MySQL:
CREATE TABLE teachers(
school_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) UNIQUE,
age INT CHECK(age >= 18)
);
Espero que haya disfrutado este artículo y la mejor de las suertes en su viaje SQL.