Até agora, focamos em recuperar dados de tabelas existentes usando a instrução SELECT. Agora, começaremos a explorar a Linguagem de Manipulação de Dados (DML), começando por como adicionar novos dados às suas tabelas usando a instrução INSERT INTO.
Existem duas formas principais de usar a instrução INSERT INTO.
Este é o método mais seguro e comum. Você lista explicitamente as colunas que deseja preencher, seguidas pelos valores para essas colunas.
INSERT INTO nome_da_tabela (coluna1, coluna2, coluna3)
VALUES (valor1, valor2, valor3);
Se você estiver fornecendo valores para todas as colunas da tabela na ordem exata em que foram definidas, poderá omitir os nomes das colunas. No entanto, isso é menos flexível e pode levar a erros se a estrutura da tabela for alterada.
INSERT INTO nome_da_tabela
VALUES (valor1, valor2, valor3, ...);
WHERE, os valores de string (texto) e data devem estar entre aspas simples (').NULL e você não fornecer um valor para ela, ela será preenchida com NULL (ou um valor padrão, se definido).Vamos adicionar um novo ator à tabela actor no banco de dados Sakila.
INSERT INTO actor (first_name, last_name)
VALUES ('JOHNNY', 'DEPP');
Nota: Não especificamos o actor_id porque ele geralmente é gerado automaticamente pelo banco de dados.
Se tivermos uma tabela com muitas colunas, mas quisermos preencher apenas algumas:
INSERT INTO customer (first_name, last_name, email, store_id, address_id)
VALUES ('ALICE', 'JOHNSON', 'alice.j@example.com', 1, 5);
A maioria dos bancos de dados modernos permite inserir várias linhas em uma única instrução, separando os conjuntos de valores por vírgulas.
INSERT INTO actor (first_name, last_name)
VALUES
('TOM', 'HANKS'),
('MERYL', 'STREEP'),
('LEONARDO', 'DICAPRIO');
INSERT INTO ... SELECT)Às vezes, você não precisa inserir os dados manualmente, mas sim transferi-los de uma tabela para outra (ex: durante o arquivamento ou geração de relatórios). Para isso, utiliza-se a combinação de INSERT INTO e SELECT.
INSERT INTO tabela_destino (coluna1, coluna2, coluna3)
SELECT coluna_origem1, coluna_origem2, coluna_origem3
FROM tabela_origem
WHERE condicao;
Uma característica importante deste comando é que, no bloco SELECT, você pode combinar diferentes tipos de valores:
coluna_origem1).amount * 0.1).Suponha que tenhamos uma tabela customer_archive e queiramos transferir dados para lá a partir da tabela principal customer, adicionando a data de arquivamento e uma nota de status:
INSERT INTO customer_archive (customer_id, full_name, archived_at, status_note)
SELECT
customer_id,
CONCAT(first_name, ' ', last_name), -- Valor calculado (Nome Completo)
CURRENT_DATE, -- Constante (data atual)
'Auto-archived' -- Constante (etiqueta de texto)
FROM customer
WHERE active = 0;
Nota: O número e a ordem das colunas em INSERT INTO devem corresponder estritamente ao número e à ordem das colunas retornadas no SELECT.
Ao inserir uma linha, nem sempre é necessário fornecer um valor para cada coluna. O banco de dados lida com valores ausentes de duas formas: através de NULL e através de valores padrão das colunas.
Se uma coluna permite NULL, você pode passar a palavra-chave NULL diretamente como valor:
INSERT INTO customer (first_name, last_name, email, store_id, address_id)
VALUES ('BOB', 'SMITH', NULL, 1, 5);
Aqui, a coluna email será armazenada como NULL, significando "nenhum valor conhecido".
Se uma coluna tiver um valor DEFAULT definido no esquema da tabela, você pode omiti-la completamente da lista de colunas. O banco de dados a preencherá automaticamente:
INSERT INTO actor (first_name, last_name)
VALUES ('CATE', 'BLANCHETT');
Colunas como actor_id (auto-incremento) e last_update (timestamp padrão) são preenchidas pelo banco de dados sem nenhuma entrada explícita.
Você também pode usar a palavra-chave DEFAULT para acionar o valor padrão de uma coluna, mantendo-a na lista:
INSERT INTO actor (actor_id, first_name, last_name, last_update)
VALUES (DEFAULT, 'CATE', 'BLANCHETT', DEFAULT);
Isso é útil quando sua instrução lista todas as colunas, mas você ainda deseja que o banco de dados cuide de algumas delas.
Principais Conclusões desta Lição:
INSERT INTO é usada para adicionar novas linhas a uma tabela.INSERT INTO ... SELECT permite copiar dados de uma tabela para outra.SELECT, você pode combinar dados reais da tabela, campos calculados e constantes.NULL ou valor DEFAULT podem ser omitidas ou passadas explicitamente usando as palavras-chave NULL e DEFAULT.Na próxima lição, veremos como modificar registros existentes usando a instrução UPDATE.