Saber como criar tabelas em
SQL
é um conceito importante e fundamental. Neste tutorial, mostrarei o
SQL
sintaxe para o CREATE TABLE
usando exemplos de código para PostgreSQL e MySQL. Basic CREATE TABLE
Sintaxe
Aqui está a sintaxe básica para
CREATE TABLE
demonstração:CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
);
Para a primeira parte, você precisa começar com o
CREATE TABLE
instrução seguida pelo nome da tabela que você deseja criar. Se eu quisesse criar uma tabela de informações do professor, escreveria algo assim:
CREATE TABLE teachers();
Dentro dos parênteses, você adicionará as informações para criar as colunas da tabela. Se você esquecer o parêntese, receberá uma mensagem de erro.
CREATE TABLE teachers;
O ponto e vírgula no final dos parênteses informa ao computador que é o final do
SQL
demonstração. Às vezes, você ouvirá isso chamado de terminador de instrução. O que são MySQL
mecanismos de armazenamento?
De acordo com o
MySQL
documentação:Mecanismos de armazenamento são componentes MySQL que lidam com operações SQL para diferentes tipos de tabelas.
MySQL
usa esses mecanismos de armazenamento para executar operações CRUD (criar, ler, atualizar e excluir) no banco de dados. Em
MySQL
, você tem a opção de especificar o tipo de mecanismo de armazenamento que deseja usar para sua tabela. Se você omitir o ENGINE
cláusula então o padrão será InnoDB. CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
)ENGINE=storage_engine;
O que é IF NOT EXISTS
cláusula?
Existe uma cláusula opcional chamada
IF NOT EXISTS
que irá verificar se a tabela que você deseja criar já existe no banco de dados. Você pode colocar essa cláusula logo antes do nome da tabela. CREATE TABLE IF NOT EXISTS teachers();
Se a tabela já existir, o computador não criará uma nova tabela.
Se você omitir o
IF NOT EXISTS
cláusula e tentar criar uma tabela que já existe no banco de dados, você receberá uma mensagem de erro. Neste exemplo, primeiro criei uma tabela chamada professores. Mas se eu tentar criar essa mesma tabela no próximo comando, encontrarei um erro.
CREATE TABLE IF NOT EXISTS teachers();
CREATE TABLE teachers();
Como criar colunas na tabela
Dentro dos parênteses para
CREATE TABLE
, você listará os nomes das colunas que deseja criar junto com seus tipos de dados e restrições. Este é um exemplo de como podemos adicionar quatro colunas de
school_id
, name
, email
e age
à mesa dos nossos professores. Cada nome de coluna deve ser separado por vírgulas. CREATE TABLE teachers(
school_id data_type column_constraint,
name data_type column_constraint,
email data_type column_constraint,
age data_type column_constraint
);
De acordo com o
MySQL
documentação:O MySQL tem um limite rígido de 4096 colunas por tabela, mas o máximo efetivo pode ser menor para uma determinada tabela. O limite exato da coluna depende de vários fatores.
Se você estiver trabalhando em
MySQL
menores projetos pessoais, então você provavelmente não terá que se preocupar em exceder o número de colunas para suas tabelas. De acordo com a documentação do PostgreSQL, há um limite de 1600 colunas por tabela. Semelhante a
MySQL
, um limite exato pode variar dependendo do espaço em disco ou das restrições de desempenho. Tipos de dados em SQL
Ao criar colunas na tabela, você precisa atribuir a ela um tipo de dados. Os tipos de dados descrevem o tipo de valor dentro das colunas.
Aqui estão seis categorias populares de tipos de dados em
SQL
:- Numérico (int, float, serial, decimal, etc)
- Dados e hora (timestamp, data, hora, etc)
- Caractere e string (char, varchar, text, etc)
- Unicode (ntext, nvarchar, etc.)
- Binário (binário, etc.)
- Diversos (xml, tabela, etc.)
Este artigo não abordará todos os tipos de dados, mas abordará alguns dos mais populares.
Aqui está a lista completa de
PostgreSQL
tipos de dados e MySQL
tipos de dados. O que é SERIAL
e AUTO_INCREMENT
?
Em
PostgreSQL
, um SERIAL
tipo de dados é um número inteiro que será incrementado automaticamente em um para cada nova linha criada. Podemos adicionar
SERIAL
logo após o school_id
coluna em nossa tabela de professores. school_id SERIAL
Em
MySQL
, você usaria AUTO_INCREMENT
em vez de SERIAL
. Neste exemplo, o INT
tipo de dados é usado que representa um inteiro. school_id INT AUTO_INCREMENT
Se adicionarmos cinco linhas à nossa tabela de professores, a saída mostrará os números de 1, 2, 3, 4, 5 para o
school_id
coluna porque o número inteiro é incrementado automaticamente em um para cada nova linha. O que é o VARCHAR
tipo de dados?
Um
VARCHAR
tipo de dados é um comprimento de string variável onde você pode definir um comprimento máximo de caracteres. Este é um exemplo de uso do
VARCHAR
tipo de dados para o name
e email
colunas na nossa tabela de professores. O número 30 é o comprimento máximo de caracteres. name VARCHAR(30) column_constraint,
email VARCHAR(30) column_constraint,
Restrições de coluna no SQL
Essas são regras aplicadas aos dados dentro das colunas da tabela.
Aqui está uma lista de algumas das restrições de coluna mais comuns:
- CHAVE PRIMÁRIA - esta chave serve como um identificador exclusivo para a tabela
- FOREIGN KEY - esta chave garante que os valores de uma coluna também estejam presentes em outra tabela. Isso serve como um link entre as tabelas.
- ÚNICO - todos os valores na coluna precisam ser únicos
- NOT NULL - os valores não podem ser NULL. NULL é a ausência de um valor
- CHECK - testa um valor em relação a uma expressão booleana
Exemplos de PRIMARY
e FOREIGN
teclas
Em nossa tabela de professores, podemos adicionar uma
PRIMARY KEY
para o school_id
coluna. É assim que o código ficaria no PostgreSQL:
school_id SERIAL PRIMARY KEY
É assim que o código ficaria no MySQL:
school_id INT AUTO_INCREMENT PRIMARY KEY
Se você quiser ter mais de uma coluna para a
PRIMARY KEY
, você o adicionaria logo após a criação da coluna. CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
PRIMARY KEY (column1, column2)
);
Se você deseja vincular uma tabela a outra, pode usar uma
FOREIGN KEY
. Digamos que tenhamos uma tabela chamada district_employees com uma chave primária de
district_id
. Aqui está como o código ficaria no PostgreSQL:CREATE TABLE district_employees(
district_id SERIAL PRIMARY KEY,
employee_name VARCHAR(30) NOT NULL,
PRIMARY KEY(district_id)
);
Em nossa tabela de professores, podemos usar uma chave estrangeira e referenciar a tabela district_employees.
district_id INT REFERENCES district_employees(district_id),
CREATE TABLE teachers(
school_id SERIAL PRIMARY KEY,
district_id INT REFERENCES district_employees(district_id),
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
);
Exemplos de NOT NULL
, CHECK
e UNIQUE
Se quisermos garantir que não temos nenhum valor nulo, podemos usar o
NOT NULL
limitação. name VARCHAR(30) NOT NULL
Podemos usar o
CHECK
restrição para garantir que todos os nossos professores tenham 18 anos ou mais. O CHECK
restrição testa um valor em relação a uma expressão booleana. age INT CHECK(age >= 18)
Se um de nossos valores não atender a essa condição, receberemos uma mensagem de erro.
Podemos usar o
UNIQUE
restrição para garantir que todos os emails sejam exclusivos. email VARCHAR(30) UNIQUE
Este é o resultado final para a tabela dos professores:
É assim que o código ficaria no PostgreSQL:
CREATE TABLE teachers(
school_id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) UNIQUE,
age INT CHECK(age >= 18)
);
É assim que o código ficaria no MySQL:
CREATE TABLE teachers(
school_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) UNIQUE,
age INT CHECK(age >= 18)
);
Espero que você tenha gostado deste artigo e boa sorte em sua jornada SQL.