SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Instrução SQLite REPLACE


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.