Link Search Menu Expand Document

Insert

O comando INSERT INTO é utilizado para adicionar linhas ao banco de dados, simplesmente nomeando as colunas e os valores desejados:

INSERT INTO frutas (nome) VALUES ("laranja")

Mas isso pode ficar complicado quando é necessário fazer inserts junto com select, joins, condições de existência, etc.

INSERT com FOREIGN KEY

Quando uma tabela possui uma chave externa, é preciso dar um SELECT em seu valor para inseri-lo.

INSERT INTO comidas (nome, vegetal_principal) VALUES (
    "salada de batata",
    SELECT id FROM vegetais WHERE vegetal = 'batata'
)

Assim, você linka os dados das tabelas e economiza espaço em disco.

INSERT com ON CONFLICT

Quando está inserindo todos valores de uma linha, é possível adicionar o comando ON CONFLICT, que dará 2 alternativas para caso encontre os mesmos dados já inseridos, sendo eles o DO NOTHING e UPDATE. - Este comando funciona para o Postgres.

INSERT com valores já existentes

Quando se faz um web scrapper, muitas vezes os valores dos produtos não se alteraram desde a última consulta, por isso, você pode não querer inserir essa mesma informação novamente no banco de dados, para isso, é preciso combinar o comando INSERT INTO com SELECT:

INSERT INTO tabela (coluna1, coluna2, coluna3)
SELECT * FROM (
    SELECT valor1, valor2, valor3
) AS temp
WHERE NOT EXISTS (
    SELECT (coluna2, coluna3) FROM tabela WHERE coluna2 = valor2 AND coluna3 = valor3
) LIMIT 1

Exemplo de uso:

INSERT INTO historico (link, titulo, pix_price, marca_id, modelo_id, loja)
SELECT * FROM (SELECT 'https://www.kabum.com.br/produto/133028/placa-de-video-asus-rog-strix-nvidia-geforce-rtx-3090-24gb-gddr6-rog-strix-rtx3090-o24g-white', 
			   'Placa de Vídeo Asus Rog Strix NVIDIA GeForce RTX 3090, 24GB, GDDR6 - ROG-STRIX-RTX3090-O24G-WHITE', 
			   19999.90,
			  3,
			  2,
			  'kabum') AS tmp
WHERE NOT EXISTS (
    SELECT (link, titulo, pix_price, marca_id, modelo_id, loja) FROM historico WHERE link = 'https://www.kabum.com.br/produto/133028/placa-de-video-asus-rog-strix-nvidia-geforce-rtx-3090-24gb-gddr6-rog-strix-rtx3090-o24g-white'
	AND titulo = 'Placa de Vídeo Asus Rog Strix NVIDIA GeForce RTX 3090, 24GB, GDDR6 - ROG-STRIX-RTX3090-O24G-WHITE' 
	AND pix_price = 19999.90
	AND marca_id = 3
	AND modelo_id = 2
	AND loja = 'kabum'
) LIMIT 1;