Este artículo contiene SQL básico CREATE TABLE
instrucciones que los principiantes pueden usar para crear tablas básicas para sus proyectos de base de datos.
Sintaxis básica
La sintaxis básica para crear tablas en SQL es la siguiente:
CREATE TABLE TableName (
Column1 datatype optional_constraints,
Column2 datatype optional_constraints,
Column3 datatype optional_constraints,
...
);
Dónde:
TableName
es el nombre que le quieres dar a la tablaColumn1
, etc. son los nombres que le das a tus columnasdatatype
es el tipo de datos que asigna a cada columna. La mayoría de los RDBMS requieren que asigne un tipo de datos a cada columna. En SQLite, es opcional.optional_constraints
es una lista opcional de restricciones que aplica a una columna.
Tenga en cuenta que la mayoría de los DBMS usan una sintaxis más compleja que esta (es decir, ofrecen más opciones), pero esta es generalmente la sintaxis básica requerida para crear una tabla. La mayoría de los principiantes comienzan con esta sintaxis y luego aprenden opciones más avanzadas a medida que avanzan.
Ejemplo básico
He aquí un ejemplo básico:
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL,
OwnerId int NOT NULL,
PetName varchar(60) NOT NULL,
DOB date NULL
);
Estos son algunos puntos a tener en cuenta:
- Los nombres de tablas y columnas pueden ser en cualquier caso. Por ejemplo, en lugar de
PetId
Podría haberlo llamadopetid
,PETID
, opet_id
. Algunos DBMS (p. ej., Postgres) distinguen entre mayúsculas y minúsculas cuando consulta tablas y sus nombres de columna, mientras que otros no (p. ej., SQL Server). - Algunos DBMS usan diferentes nombres para sus tipos de datos.
NOT NULL
es una restricción de tabla que especifica que esta columna debe contener un valor (es decir, no puede contenerNULL
valores).NULL
significa que la columna puede contenerNULL
valores. Algunos DBMS (como DB2) no admitenNULL
palabra clave, por lo que deberá omitirla cuando trabaje con tales DBMS.PRIMARY KEY
agrega una restricción de clave principal a la tabla. Es una buena práctica especificar una clave principal en todas sus tablas.- Si ya existe una tabla con el mismo nombre en la base de datos, obtendrá un error. Deberá eliminar la tabla existente o modificarla (o cambiar el nombre de la que está creando).
Crear una tabla con claves foráneas
El siguiente ejemplo crea una tabla con dos claves foráneas. Las claves foráneas se utilizan para crear una relación entre dos tablas.
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL REFERENCES PetTypes (PetTypeId),
OwnerId int NOT NULL REFERENCES Owners (OwnerId),
PetName varchar(60) NOT NULL,
DOB date NULL
);
Las REFERENCES
La cláusula se utiliza para definir una clave externa contra dos columnas. En nuestro caso, las claves foráneas imponen lo siguiente:
- Las
Pets.PetTypeId
la columna hace referencia aPetTypes.PetTypeId
columna (cualquier valor que entre enPets.PetTypeId
la columna debe tener un valor coincidente enPetTypes.PetTypeId
columna). - El
Pets.OwnerId
la columna hace referencia aOwners.OwnerId
columna (cualquier valor que entre enPets.OwnerId
la columna debe tener un valor coincidente enOwners.OwnerId
columna).
Las claves foráneas también se pueden agregar más tarde, usando ALTER TABLE
declaración si es necesario.
Crear una tabla con restricción DEFAULT
El siguiente ejemplo crea una tabla con un DEFAULT
restricción.
CREATE TABLE OrderItems
(
OrderId int NOT NULL PRIMARY KEY,
OrderItem int NOT NULL,
ProductId int NOT NULL,
Quantity int NOT NULL DEFAULT 1,
ItemPrice decimal(8,2) NOT NULL
);
Crear una tabla con una columna de marca de tiempo
Puedes usar DEFAULT
restricciones para insertar automáticamente la fecha y hora actual en una columna cada vez que se inserta una nueva fila. Esto a menudo se conoce como insertar una marca de tiempo.
Diferentes DBMS usan diferentes funciones para devolver la fecha actual.
Aquí hay un ejemplo de cómo hacerlo en SQL Server.
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime DEFAULT CURRENT_TIMESTAMP
);
En SQL Server, CURRENT_TIMESTAMP
es el equivalente ANSI de GETDATE()
función.
Alternativamente, puede usar SYSDATETIME()
para una marca de tiempo de mayor precisión:
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
Para admitir una mayor precisión, el tipo de datos de la columna debe ser datetime2 .
SQL Server tiene bastantes tipos de datos para valores de fecha/hora. Consulte las funciones de fecha y hora de SQL Server para obtener una lista.
Cada DBMS tiene sus propias funciones para devolver la fecha y la hora. Aquí hay una lista de los principales:
DB2 | CURRENT_DATE |
MySQL | CURRENT_DATE o NOW() |
Oráculo | SYSDATE |
PostgreSQL | CURRENT_DATE |
Servidor SQL | CURRENT_TIMESTAMP , GETDATE() o SYSDATETIME() |
SQLite | datetime('now') |
Ver también:
- Funciones de fecha y hora de SQL Server
- Funciones de fecha y hora de SQLite
Crear una columna con un valor que se incrementa automáticamente
A veces necesita crear una columna que incremente automáticamente un valor cada vez que se inserta una nueva fila. Por lo general, se denominan columnas de "incremento automático" o "identidad", según el DBMS que se utilice.
En SQL Server, use la IDENTITY
argumento:
CREATE TABLE Users
(
UserId int NOT NULL IDENTITY(1,1) PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
En este caso, usamos IDENTITY(1,1)
.
- El primer
1
es la semilla. Esto especifica qué valor iniciar el conteo (es decir, este es el valor de la primera fila insertada en la tabla). - El segundo
1
es el incremento. Este es el valor incremental agregado al valor de identidad de la fila anterior cargada.
Cada DBMS tiene su propia palabra clave para crear una columna de incremento automático.
- En MySQL y MariaDb, use
AUTO_INCREMENT
- En SQLite, tiene un par de opciones (incluido el
AUTOINCREMENT
palabra clave) - En PostgreSQL, use
SERIAL
- De la base de datos Oracle 12c , ahora puede usar la palabra clave IDENTITY para crear columnas de incremento automático. Un ejemplo podría verse así:
UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
Opciones avanzadas
La mayoría de los DBMS le permiten especificar opciones avanzadas al crear tablas. Las opciones disponibles dependerán en gran medida de su DBMS.
Consulte la documentación de su DBMS si necesita opciones que no se especifican en este artículo.
Se pueden configurar muchas opciones avanzadas a través de la GUI (dependiendo de la herramienta que use para conectarse a su base de datos). Siempre puede crear o modificar una tabla a través de la GUI, luego use su opción "Script as Create" (o similar) para ver el código SQL que necesitaría ejecutar para crear dicha tabla. Puede tomar este código y cambiar los nombres de las tablas, los nombres de las columnas, etc. para crear una tabla completamente nueva basada en la definición de la anterior.