Resumo :neste tutorial, você aprenderá como usar o SQLite
REPLACE
instrução para inserir ou substituir a linha existente em uma tabela. Introdução ao SQLite REPLACE
declaração
A ideia do
REPLACE
é que quando um UNIQUE
ou PRIMARY KEY
ocorre violação de restrição, ele 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 houver violação de restrição, por exemplo,
NOT NULL
ocorrer restrição, o REPLACE
A instrução abortará a ação e reverterá a transação. O seguinte ilustra a sintaxe do
REPLACE
demonstração. INSERT OR REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
Ou em uma forma curta:
REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
Vamos dar uma olhada em alguns exemplos de uso do SQLite
REPLACE
declaração para entender como funciona. O SQLite REPLACE
exemplos de declarações
Primeiro, crie uma nova tabela chamada
positions
com a seguinte estrutura. CREATE TABLE IF NOT EXISTS positions (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
min_salary NUMERIC
);
Code language: SQL (Structured Query Language) (sql)
Tente
Segundo, insira algumas linhas nas
positions
tabela. INSERT INTO positions (title, min_salary)
VALUES ('DBA', 120000),
('Developer', 100000),
('Architect', 150000);
Code language: SQL (Structured Query Language) (sql)
Tente
Terceiro, verifique a inserção usando o seguinte
SELECT
demonstração. SELECT * FROM positions;
Code language: SQL (Structured Query Language) (sql)
Tente
A instrução a seguir cria um índice exclusivo no
title
coluna das positions
table para garantir que não tenha nenhum título de posição duplicado:CREATE UNIQUE INDEX idx_positions_title
ON positions (title);
Code language: SQL (Structured Query Language) (sql)
Tente
Suponha que você queira adicionar uma posição nas
positions
tabela caso não exista, caso a posição exista, atualize a atual. O seguinte
REPLACE
instrução insere uma nova linha nas positions
table porque o título da posição Full Stack Developer
não está nas positions
tabela. REPLACE INTO positions (title, min_salary)
VALUES('Full Stack Developer', 140000);
Code language: SQL (Structured Query Language) (sql)
Tente
Você pode verificar o
REPLACE
operação usando o SELECT
demonstração. SELECT
id,title,min_salary
FROM
positions;
Code language: SQL (Structured Query Language) (sql)
Tente
Veja a seguinte declaração.
REPLACE INTO positions (title, min_salary)
VALUES('DBA', 170000);
Code language: SQL (Structured Query Language) (sql)
Tente
Primeiro, o SQLite verificou o
UNIQUE
limitação. Segundo, porque esta declaração violou o
UNIQUE
restrição tentando adicionar o DBA
title que já existe, o SQLite excluiu a linha existente. Terceiro, o SQLite inseriu uma nova linha com os dados fornecidos pelo
REPLACE
demonstração. Observe que o
REPLACE
declaração significa INSERT
ou REPLACE
, não INSERT
ou UPDATE
. Veja a seguinte declaração.
REPLACE INTO positions (id, min_salary)
VALUES(2, 110000);
Code language: SQL (Structured Query Language) (sql)
Tente
O que a instrução tentou fazer é atualizar o
min_salary
para a posição com id 2, que é o desenvolvedor. Primeiro, a posição com id 2 já existe, o
REPLACE
declaração o remove. Então, o SQLite tentou inserir uma nova linha com duas colunas:(
id
, min_salary
). No entanto, ele viola o NOT NULL
restrição da coluna de título. Portanto, o SQLite reverte a transação. Se o
title
coluna não tem o NOT NULL
restrição, a REPLACE
instrução irá inserir uma nova linha cuja coluna de título é NULL
. Neste tutorial, mostramos como usar o SQLite
REPLACE
instrução para inserir ou substituir uma linha em uma tabela.