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.