Database
 sql >> Base de Dados >  >> RDS >> Database

SQL CREATE TABLE para iniciantes


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 à tabela
  • Column1 , etc são os nomes que você dá às suas colunas
  • datatype é 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 de petid , PETID , ou pet_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 conter NULL valores).
  • NULL significa que a coluna pode conter NULL valores. Alguns DBMSs (como DB2) não suportam o NULL 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 o PetTypes.PetTypeId coluna (qualquer valor que vá para o Pets.PetTypeId a coluna deve ter um valor correspondente no PetTypes.PetTypeId coluna).
  • O Pets.OwnerId coluna referencia o Owners.OwnerId coluna (qualquer valor que vá para Pets.OwnerId a coluna deve ter um valor correspondente no Owners.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.