Este artigo contém SQL básico
CREATE TABLE
instruções que iniciantes podem usar para criar tabelas básicas para seus projetos de banco de dados. Sintaxe básica
A sintaxe básica para criar tabelas em SQL é assim:
CREATE TABLE TableName (
Column1 datatype optional_constraints,
Column2 datatype optional_constraints,
Column3 datatype optional_constraints,
...
);
Onde:
TableName
é o nome que você quer dar à tabelaColumn1
, etc são os nomes que você dá às suas colunasdatatype
é o tipo de dados que você atribui a cada coluna. A maioria dos RDBMSs exige que você atribua um tipo de dados a cada coluna. No SQLite, é opcional.optional_constraints
é uma lista opcional de restrições que você aplica em uma coluna.
Observe que a maioria dos DBMSs usa uma sintaxe mais complexa do que essa (ou seja, eles oferecem mais opções), mas geralmente essa é a sintaxe básica necessária para criar uma tabela. A maioria dos iniciantes começa com essa sintaxe e depois aprende opções mais avançadas à medida que progride.
Exemplo básico
Segue um exemplo 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
);
Aqui estão alguns pontos a serem observados:
- Os nomes das tabelas e colunas podem ser em qualquer caso. Por exemplo, em vez de
PetId
Eu poderia ter chamado depetid
,PETID
, oupet_id
. Alguns DBMSs (por exemplo, Postgres) diferenciam maiúsculas de minúsculas quando você consulta tabelas e seus nomes de coluna, enquanto outros não (por exemplo, SQL Server). - Alguns DBMSs usam nomes diferentes para seus tipos de dados.
NOT NULL
é uma restrição de tabela que especifica que esta coluna deve conter um valor (ou seja, não pode conterNULL
valores).NULL
significa que a coluna pode conterNULL
valores. Alguns DBMSs (como DB2) não suportam oNULL
palavra-chave e, portanto, você precisará omiti-la ao trabalhar com esses DBMSs.PRIMARY KEY
adiciona uma restrição de chave primária à tabela. É uma boa prática especificar uma chave primária em todas as suas tabelas.- Se já existir uma tabela com o mesmo nome no banco de dados, você receberá um erro. Você precisará descartar a tabela existente ou alterá-la (ou alterar o nome da que está criando).
Criar uma tabela com chaves estrangeiras
O exemplo a seguir cria uma tabela com duas chaves estrangeiras. Chaves estrangeiras são usadas para criar um relacionamento entre duas tabelas.
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
);
As
REFERENCES
cláusula é usada para definir uma chave estrangeira em duas colunas. No nosso caso, as chaves estrangeiras impõem o seguinte:- O
Pets.PetTypeId
coluna referencia oPetTypes.PetTypeId
coluna (qualquer valor que vá para oPets.PetTypeId
a coluna deve ter um valor correspondente noPetTypes.PetTypeId
coluna). - O
Pets.OwnerId
coluna referencia oOwners.OwnerId
coluna (qualquer valor que vá paraPets.OwnerId
a coluna deve ter um valor correspondente noOwners.OwnerId
coluna).
As chaves estrangeiras também podem ser adicionadas posteriormente, usando o
ALTER TABLE
declaração, se necessário. Criar uma tabela com restrição DEFAULT
O exemplo a seguir cria uma tabela com um
DEFAULT
limitação. 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
);
Criar uma tabela com uma coluna de carimbo de hora
Você pode usar
DEFAULT
restrições para inserir automaticamente a data e hora atuais em uma coluna sempre que uma nova linha for inserida. Isso geralmente é chamado de inserção de um carimbo de data/hora. Diferentes DBMSs usam funções diferentes para retornar a data atual.
Aqui está um exemplo de como fazer isso no 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
);
No SQL Server,
CURRENT_TIMESTAMP
é o equivalente ANSI de GETDATE()
função. Você também pode usar
SYSDATETIME()
para um carimbo de hora de maior precisão:CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
Para oferecer suporte à precisão mais alta, o tipo de dados da coluna deve ser datetime2 .
O SQL Server tem alguns tipos de dados para valores de data/hora. Consulte funções de data e hora do SQL Server para obter uma lista.
Cada SGBD possui suas próprias funções para retornar a data e hora. Segue uma lista dos principais:
DB2 | CURRENT_DATE |
MySQL | CURRENT_DATE ou NOW() |
Oráculo | SYSDATE |
PostgreSQL | CURRENT_DATE |
SQL Server | CURRENT_TIMESTAMP , GETDATE() ou SYSDATETIME() |
SQLite | datetime('now') |
Veja também:
- Funções de data e hora do SQL Server
- Funções de data e hora do SQLite
Criar uma coluna com um valor de incremento automático
Às vezes, você precisa criar uma coluna que incremente automaticamente um valor sempre que uma nova linha for inserida. Elas são normalmente chamadas de colunas de “incremento automático” ou “identidade”, dependendo do DBMS que está sendo usado.
No SQL Server, use o
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()
);
Neste caso, usamos
IDENTITY(1,1)
. - O primeiro
1
é a semente. Isso especifica qual valor iniciar a contagem (ou seja, este é o valor da primeira linha inserida na tabela). - O segundo
1
é o incremento. Este é o valor incremental adicionado ao valor de identidade da linha anterior carregada.
Cada DBMS tem sua própria palavra-chave para criar uma coluna de incremento automático.
- No MySQL e no MariaDb, use
AUTO_INCREMENT
- No SQLite, você tem algumas opções (incluindo o
AUTOINCREMENT
palavra-chave) - No PostgreSQL, use
SERIAL
- Do Banco de Dados Oracle 12c , agora você pode usar a palavra-chave IDENTITY para criar colunas de incremento automático. Um exemplo pode ser:
UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
Opções avançadas
A maioria dos DBMSs permite especificar opções avançadas ao criar tabelas. As opções disponíveis dependerão em grande parte do seu SGBD.
Consulte a documentação do seu DBMS se precisar de opções não especificadas neste artigo.
Muitas opções avançadas podem ser definidas através da GUI (dependendo da ferramenta que você usa para se conectar ao seu banco de dados). Você sempre pode criar ou modificar uma tabela por meio da GUI e, em seguida, usar sua opção “Script as Create” (ou similar) para ver o código SQL que você precisaria executar para criar tal tabela. Você pode pegar esse código e alterar os nomes das tabelas, nomes das colunas, etc. para criar uma tabela totalmente nova com base na definição da anterior.