Capítulo 3. Manipulação de dados

Índice
3.1. Inclusão de dados
3.2. Atualização de dados
3.3. Exclusão de dados

No capítulo anterior foi visto como criar tabelas e outras estruturas de armazenamento de dados. Agora chegou a hora de colocar dados nas tabelas. Este capítulo abrange a inclusão, atualização e exclusão de dados em tabelas. Também são introduzidas maneiras automáticas de realizar mudanças quando certos eventos acontecem: gatilhos (triggers) e regras de reescrita (rewrite rules). Para completar, o próximo capítulo explica como fazer consultas para extrair os dados do banco de dados.

3.1. Inclusão de dados

Ao ser criada a tabela não contém nenhum dado. A primeira coisa a ser feita para o banco de dados ser útil é colocar dados. Conceitualmente, os dados são inseridos uma linha por vez. É claro que pode ser inserida mais de uma linha, mas não existe modo de inserir menos de uma linha de cada vez. Mesmo conhecendo apenas o valor de algumas colunas, uma linha inteira deve ser criada.

Para criar uma nova linha deve ser utilizado o comando INSERT. Este comando requer o nome da tabela, e um valor para cada coluna da tabela. Por exemplo, considere a tabela produtos do Capítulo 2:

CREATE TABLE produtos (
    id_produto integer,
    nome       text,
    preco      numeric
);

Um comando mostrando a inclusão de uma linha pode ser:

INSERT INTO produtos VALUES (1, 'Queijo', 9.99);

Os valores dos dados são colocados na mesma ordem que as colunas aparecem na tabela, separados por vírgula. Geralmente os valores dos dados são literais (constantes), mas expressões escalares também são permitidas.

A sintaxe mostrada acima tem como desvantagem necessitar o conhecimento da ordem das colunas da tabela. Para evitar isto, as colunas podem ser declaradas explicitamente. Por exemplo, os dois comandos mostrados abaixo possuem o mesmo efeito do comando mostrado acima:

INSERT INTO produtos (id_produto, nome, preco) VALUES (1, 'Queijo', 9.99);
INSERT INTO produtos (nome, preco, id_produto) VALUES ('Queijo', 9.99, 1);

Muitos usuários consideram boa prática escrever sempre os nomes das colunas.

Se não forem conhecidos os valores de todas as colunas, as colunas com valor desconhecido podem ser omitidas. Neste caso, o valor padrão de cada coluna será atribuído à coluna. Por exemplo:

INSERT INTO produtos (id_produto, nome) VALUES (1, 'Queijo');
INSERT INTO produtos VALUES (1, 'Queijo');

A segunda forma é uma extensão do PostgreSQL, que preenche as colunas a partir da esquerda com quantos valores forem fornecidos, e as demais com o valor padrão.

Para ficar mais claro, o valor padrão pode ser requisitado explicitamente para cada coluna, ou para toda a linha:

INSERT INTO produtos (id_produto, nome, preco) VALUES (1, 'Queijo', DEFAULT);
INSERT INTO produtos DEFAULT VALUES;

Dica: Para realizar "cargas volumosas", ou seja, a inclusão de muitos dados, veja o comando COPY (consulte o Manual de Referência do PostgreSQL). O comando COPY não é tão flexível quanto o comando INSERT, mas é mais eficiente.