Resumo : neste tutorial, você aprenderá como usar a REPLACE
instrução SQLite para inserir ou substituir a linha existente em uma tabela.
Introdução à REPLACE
instrução SQLite
A ideia da REPLACE
instrução é que quando ocorre uma violação de restrição UNIQUE
ou PRIMARY KEY
, ela faz o seguinte:
- Primeiro, exclua a linha existente que causa uma violação de restrição.
- Segundo, insira uma nova linha.
Na segunda etapa, se NOT NULL
ocorrer qualquer violação de restrição, por exemplo, restrição, a REPLACE
instrução abortará a ação e reverterá a transação .
O seguinte ilustra a sintaxe da REPLACE
instrução.
INSERT OR REPLACE INTO table(column_list)
VALUES(value_list);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Ou de forma resumida:
REPLACE INTO table(column_list)
VALUES(value_list);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Vamos dar uma olhada em alguns exemplos de uso da REPLACE
instrução SQLite para entender como ela funciona.
REPLACE
Os exemplos de instruções SQLite
Primeiro, crie uma nova tabela nomeada positions
com a seguinte estrutura.
CREATE TABLE IF NOT EXISTS positions (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
min_salary NUMERIC
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, insira algumas linhas na positions
tabela.
INSERT INTO positions (title, min_salary)
VALUES ('DBA', 120000),
('Developer', 100000),
('Architect', 150000);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, verifique a inserção usando a seguinte SELECT
instrução.
SELECT * FROM positions;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A instrução a seguir cria um índice exclusivo na title
coluna da positions
tabela para garantir que não haja nenhum título de posição duplicado:
CREATE UNIQUE INDEX idx_positions_title
ON positions (title);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Suponha que você queira adicionar uma posição na positions
tabela caso ela não exista, caso a posição exista, atualize a atual.
A REPLACE
instrução a seguir insere uma nova linha na positions
tabela porque o título da posição Full Stack Developer
não está na positions
tabela.
REPLACE INTO positions (title, min_salary)
VALUES('Full Stack Developer', 140000);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Você pode verificar a REPLACE
operação usando a SELECT
instrução.
SELECT
id,title,min_salary
FROM
positions;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Veja a seguinte declaração.
REPLACE INTO positions (title, min_salary)
VALUES('DBA', 170000);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Primeiro, o SQLite verificou a UNIQUE
restrição.
Segundo, como esta instrução violou a UNIQUE
restrição ao tentar adicionar o DBA
título que já existe, o SQLite excluiu a linha existente.
Terceiro, o SQLite inseriu uma nova linha com os dados fornecidos pela REPLACE
instrução.
Observe que a REPLACE
afirmação significa INSERT
ou REPLACE
, não INSERT
ou UPDATE
.
Veja a seguinte declaração.
REPLACE INTO positions (id, min_salary)
VALUES(2, 110000);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O que o enunciado tentou fazer é atualizar o for min_salary
para a posição com id 2, que é o desenvolvedor.
Primeiro, a posição com id 2 já existe, a REPLACE
instrução a remove.
Em seguida, o SQLite tentou inserir uma nova linha com duas colunas: ( id
, min_salary
). No entanto, viola a NOT NULL
restrição da coluna do título. Portanto, o SQLite reverte a transação.
Se a title
coluna não possuir a NOT NULL
restrição, a REPLACE
instrução irá inserir uma nova linha cuja coluna de título é NULL
.
Neste tutorial, mostramos como usar a REPLACE
instrução SQLite para inserir ou substituir uma linha em uma tabela.