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
Cómo usar Generador de CREATE TABLE SQL
- 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.
- Ponle nombre a la tabla y, si quieres, un esquema y un comentario, o empieza desde una plantilla.
- 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). - Añade índices para las columnas por las que filtras u ordenas, como
customer_id, placed_at. - 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:
| Tipo | MySQL | PostgreSQL | SQLite | SQL Server |
|---|---|---|---|---|
| Número entero pequeño | TINYINT / SMALLINT | SMALLINT | INTEGER | TINYINT / SMALLINT |
| Entero / entero grande | INT / BIGINT | INTEGER / BIGINT | INTEGER | INT / BIGINT |
| Decimal exacto (dinero) | DECIMAL(p,s) | NUMERIC(p,s) | NUMERIC | DECIMAL(p,s) |
| Coma flotante | FLOAT / DOUBLE | REAL / DOUBLE PRECISION | REAL | REAL / FLOAT |
| Verdadero / falso | BOOLEAN | BOOLEAN | INTEGER | BIT |
| Texto con límite | VARCHAR(n) | VARCHAR(n) | TEXT | NVARCHAR(n) |
| Texto largo | TEXT | TEXT | TEXT | NVARCHAR(MAX) |
| Fecha y hora | DATETIME | TIMESTAMP | TEXT | DATETIME2 |
| Fecha y hora con zona horaria | TIMESTAMP (guardado en UTC) | TIMESTAMPTZ | TEXT | DATETIMEOFFSET |
| UUID | CHAR(36) | UUID | TEXT | UNIQUEIDENTIFIER |
| Documento JSON | JSON | JSONB | TEXT | NVARCHAR(MAX) |
| Datos binarios | BLOB | BYTEA | BLOB | VARBINARY(MAX) |
Restricciones de un vistazo
| Restricción | Ejemplo | Efecto |
|---|---|---|
| PRIMARY KEY | PRIMARY KEY (id) | Identificador de fila único y no nulo; uno por tabla, puede abarcar varias columnas. |
| NOT NULL | email VARCHAR(255) NOT NULL | La columna siempre debe tener un valor. |
| UNIQUE | sku VARCHAR(40) UNIQUE | No puede haber dos filas con el mismo valor (se permiten NULL, salvo en SQL Server, que solo admite uno). |
| DEFAULT | DEFAULT CURRENT_TIMESTAMP | Valor que se usa cuando un INSERT omite la columna. |
| CHECK | CHECK (price >= 0) | Rechaza las filas en las que la condición es falsa. |
| FOREIGN KEY | REFERENCES 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,userogroup, 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 →