🎬 Introdução

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)
);

1️⃣ INSERT — Guardando uma Caixa no Armazém

📐 Sintaxe Formal

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');

📖 Explicação Linha a Linha

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
nome 'Teclado Mecânico'
codigo_barras '789111'
preco 299.90
estoque 15
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.

Inserindo vários registros de uma vez

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.