Inicio › Herramientas para desarrolladores › Generador de CREATE TABLE SQL

Generador de CREATE TABLE SQL

Rellena un formulario sencillo y obtén una sentencia CREATE TABLE correcta para MySQL, PostgreSQL, SQLite o SQL Server. Define para cada columna el tipo, la longitud, la clave primaria, NOT NULL, UNIQUE, el autoincremento, el valor predeterminado, la regla CHECK y la clave foránea, añade índices y comentarios, y el SQL se actualiza mientras escribes, con avisos de los errores más comunes.

Última actualización:

Columnas

PK clave primaria · NN no nulo · UQ único · AI autoincremento

Índices

Opciones

Sentencia CREATE TABLE

Publicidad
Publicidad

Cómo usar Generador de CREATE TABLE SQL

  1. Elige la pestaña de la base de datos: MySQL, PostgreSQL, SQLite o SQL Server. Puedes cambiar en cualquier momento; el SQL se reescribe para ese dialecto.
  2. Ponle nombre a la tabla y, si quieres, un esquema y un comentario, o empieza desde una plantilla.
  3. Añade columnas: define un nombre, un tipo y una longitud, marca PK, NN (not null), UQ (unique) o AI (autoincremento) y añade un valor predeterminado, una regla CHECK o una referencia de clave foránea como users(id).
  4. Añade índices para las columnas por las que filtras u ordenas, como customer_id, placed_at.
  5. Revisa las notas bajo el resultado y luego copia el SQL o descárgalo como archivo .sql.

Tipos de datos en cada base de datos

El generador te permite elegir un tipo portable y escribe el tipo nativo de la base de datos seleccionada:

TipoMySQLPostgreSQLSQLiteSQL Server
Número entero pequeñoTINYINT / SMALLINTSMALLINTINTEGERTINYINT / SMALLINT
Entero / entero grandeINT / BIGINTINTEGER / BIGINTINTEGERINT / BIGINT
Decimal exacto (dinero)DECIMAL(p,s)NUMERIC(p,s)NUMERICDECIMAL(p,s)
Coma flotanteFLOAT / DOUBLEREAL / DOUBLE PRECISIONREALREAL / FLOAT
Verdadero / falsoBOOLEANBOOLEANINTEGERBIT
Texto con límiteVARCHAR(n)VARCHAR(n)TEXTNVARCHAR(n)
Texto largoTEXTTEXTTEXTNVARCHAR(MAX)
Fecha y horaDATETIMETIMESTAMPTEXTDATETIME2
Fecha y hora con zona horariaTIMESTAMP (guardado en UTC)TIMESTAMPTZTEXTDATETIMEOFFSET
UUIDCHAR(36)UUIDTEXTUNIQUEIDENTIFIER
Documento JSONJSONJSONBTEXTNVARCHAR(MAX)
Datos binariosBLOBBYTEABLOBVARBINARY(MAX)

Restricciones de un vistazo

RestricciónEjemploEfecto
PRIMARY KEYPRIMARY KEY (id)Identificador de fila único y no nulo; uno por tabla, puede abarcar varias columnas.
NOT NULLemail VARCHAR(255) NOT NULLLa columna siempre debe tener un valor.
UNIQUEsku VARCHAR(40) UNIQUENo puede haber dos filas con el mismo valor (se permiten NULL, salvo en SQL Server, que solo admite uno).
DEFAULTDEFAULT CURRENT_TIMESTAMPValor que se usa cuando un INSERT omite la columna.
CHECKCHECK (price >= 0)Rechaza las filas en las que la condición es falsa.
FOREIGN KEYREFERENCES customers (id)El valor debe existir en la tabla principal; ON DELETE decide qué pasa con las filas hijas.

Consejos para crear buenas tablas

  • Usa DECIMAL para el dinero, nunca FLOAT: la coma flotante binaria no puede guardar exactamente valores como 0.10.
  • Guarda las horas en UTC con un tipo que tenga en cuenta la zona horaria (TIMESTAMPTZ, DATETIMEOFFSET) y conviértelas al mostrarlas.
  • Indexa las claves foráneas y los filtros frecuentes. Un índice compuesto como (customer_id, placed_at) sirve para consultas que filtran por la primera columna y ordenan por la segunda.
  • Usa nombres en minúsculas snake_case y evita palabras reservadas como order, user o group, que hay que entrecomillar en cada consulta.
  • Elige utf8mb4 en MySQL; el antiguo utf8 (utf8mb3) no puede guardar emojis ni muchos caracteres CJK.

Preguntas frecuentes

¿Cuál es la sintaxis básica de CREATE TABLE?

CREATE TABLE table_name (column_name data_type [constraints], ..., [table constraints]); Cada columna tiene un nombre y un tipo, seguidos opcionalmente de NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY o CHECK. Las restricciones a nivel de tabla, como una PRIMARY KEY (a, b) compuesta o FOREIGN KEY (col) REFERENCES other_table (id), van después de las columnas.

¿Cómo creo una clave primaria autoincremental?

Marca PK y AI en una columna de tipo entero. MySQL obtiene id BIGINT NOT NULL AUTO_INCREMENT, PostgreSQL obtiene GENERATED BY DEFAULT AS IDENTITY (preferible a SERIAL desde la versión 10), SQL Server obtiene IDENTITY(1,1) y SQLite obtiene INTEGER PRIMARY KEY AUTOINCREMENT.

¿Cómo añado una clave foránea?

Escribe la tabla y la columna referenciadas en el campo Referencias, por ejemplo customers(id), y elige una acción ON DELETE. El generador añade una CONSTRAINT fk_table_column FOREIGN KEY (...) REFERENCES customers (id) con nombre. La tabla referenciada debe existir ya y su columna debe ser una clave primaria o única, con el mismo tipo de datos.

¿Qué diferencia hay entre VARCHAR y TEXT?

VARCHAR(n) almacena hasta n caracteres y el límite se aplica; se puede indexar por completo y tener un valor predeterminado. TEXT no tiene un límite de longitud práctico. En PostgreSQL ambos rinden igual; en MySQL las columnas TEXT no pueden tener un valor predeterminado literal simple y necesitan una longitud de prefijo para el índice; en SQLite ambos son simplemente TEXT.

¿Por qué SQLite muestra TEXT para las fechas e INTEGER para los booleanos?

SQLite solo tiene cinco clases de almacenamiento (NULL, INTEGER, REAL, TEXT y BLOB). Las fechas se suelen guardar como texto ISO 8601, como 2026-10-20 14:30:00, que se ordena correctamente y funciona con las funciones de fecha de SQLite, y los booleanos se guardan como 0 y 1.

¿IF NOT EXISTS funciona en todas las bases de datos?

MySQL, PostgreSQL y SQLite admiten CREATE TABLE IF NOT EXISTS. SQL Server no, así que el generador envuelve la sentencia en IF OBJECT_ID(N'table', N'U') IS NULL. DROP TABLE IF EXISTS es compatible con las cuatro (SQL Server desde 2016).

¿Se aplican las restricciones CHECK?

Sí en PostgreSQL, SQLite, SQL Server y MySQL 8.0.16 o posterior. Las versiones anteriores de MySQL analizan las cláusulas CHECK pero las ignoran sin avisar, y MariaDB las aplica desde la 10.2.1.

¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

Herramientas relacionadas

Ver todas las de Conversores de datos y formatos de archivo →