Até agora, focamos em criar a estrutura da tabela: colunas, tipos, chaves, regras. Isso se chama DDL (Data Definition Language) — a linguagem que define o "esqueleto" do banco, o formato das prateleiras do armazém.
Mas de que adianta um armazém bem construído, com prateleiras certinhas, se você não sabe guardar e buscar caixas nele?
Chegou a hora do DML (Data Manipulation Language) — os comandos que usamos no dia a dia para inserir, consultar, atualizar e remover dados. Esses são, sem exagero, os comandos que você mais vai digitar na sua carreira. Vamos entender cada um deles com calma, peça por peça.
Vamos usar nossa tabela produtos do capítulo anterior:
CREATE TABLE produtos (
id SERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
codigo_barras VARCHAR(20) UNIQUE,
preco DECIMAL(10,2) CHECK (preco > 0),
estoque INTEGER DEFAULT 0 CHECK (estoque >= 0),
categoria VARCHAR(50)
);
Toda vez que você for escrever um INSERT, ele sempre segue essa mesma receita: nome da tabela, lista de colunas entre parênteses, e uma lista de valores entre parênteses, na mesma ordem das colunas.
Exemplo de sintaxe
INSERT INTO nome_da_tabela (coluna1, coluna2, coluna3, ...)
VALUES (valor1, valor2, valor3, ...);
Exemplo prático
INSERT INTO produtos (nome, codigo_barras, preco, estoque, categoria)
VALUES ('Teclado Mecânico', '789111', 299.90, 15, 'Periféricos');
INSERT INTO produtos
INSERT INTO é a instrução que diz ao Postgres "quero adicionar uma nova linha". Logo depois, produtos é o nome da tabela onde essa linha vai ser criada. Sem esse nome, o banco não saberia onde guardar o dado.
(nome, codigo_barras, preco, estoque, categoria)
Aqui você está dizendo quais colunas vai preencher, e em qual ordem. Repare que a coluna id não está na lista — porque ela é SERIAL, e o próprio Postgres gera esse valor sozinho, sem precisarmos informar.
VALUES ('Teclado Mecânico', '789111', 299.90, 15, 'Periféricos')
Cada valor aqui corresponde, na mesma posição, à coluna listada acima:
| Posição | Coluna | Valor |
|---|---|---|
| 1ª | nome |
'Teclado Mecânico' |
| 2ª | codigo_barras |
'789111' |
| 3ª | preco |
299.90 |
| 4ª | estoque |
15 |
| 5ª | categoria |
'Periféricos' |
Texto e datas sempre vão entre aspas simples ('...'). Números (inteiros ou decimais) não usam aspas. Se você trocar a ordem das colunas na primeira lista, precisa trocar a ordem dos valores também — a posição é o que conecta os dois lados.
Para inserir vários registros ao mesmo tempo utilizamos:
INSERT INTO produtos (nome, codigo_barras, preco, estoque, categoria)
VALUES
('Mouse Gamer', '789112', 189.90, 30, 'Periféricos'),
('Monitor 24"', '789113', 899.00, 8, 'Monitores'),
('Cadeira Gamer', '789114', 1299.00, 5, 'Móveis');
Repare que a estrutura é a mesma: uma lista de colunas, só que agora várias listas de valores, separadas por vírgula, cada uma entre seus próprios parênteses. Cada linha entre parênteses vira uma nova linha na tabela.