Instrução SQLite REPLACE

Resumo : neste tutorial, você aprenderá como usar a REPLACEinstrução SQLite para inserir ou substituir a linha existente em uma tabela.

Introdução à REPLACEinstrução SQLite

A ideia da REPLACEinstrução é que quando ocorre uma violação de restrição UNIQUEou 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 NULLocorrer qualquer violação de restrição, por exemplo, restrição, a REPLACEinstrução abortará a ação e reverterá a transação .

O seguinte ilustra a sintaxe da REPLACEinstruçã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 REPLACEinstrução SQLite para entender como ela funciona.

REPLACEOs exemplos de instruções SQLite

Primeiro, crie uma nova tabela nomeada positionscom 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 )

Tente

Segundo, insira algumas linhas na positionstabela.

INSERT INTO positions (title, min_salary)
VALUES ('DBA', 120000),
       ('Developer', 100000),
       ('Architect', 150000);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

Terceiro, verifique a inserção usando a seguinte SELECTinstrução.

SELECT * FROM positions;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

Tabela de posições SQLite REPLACE

A instrução a seguir cria um índice exclusivo na titlecoluna da positionstabela 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 )

Tente

Suponha que você queira adicionar uma posição na positionstabela caso ela não exista, caso a posição exista, atualize a atual.

A REPLACEinstrução a seguir insere uma nova linha na positionstabela porque o título da posição Full Stack Developernão está na positionstabela.

REPLACE INTO positions (title, min_salary)
VALUES('Full Stack Developer', 140000);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

SQLite REPLACE insere nova linha

Você pode verificar a REPLACEoperação usando a SELECTinstrução.

SELECT
	id,title,min_salary
FROM
	positions;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

Veja a seguinte declaração.

REPLACE INTO positions (title, min_salary)
VALUES('DBA', 170000);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

SQLite REPLACE – substitui a linha existente

Primeiro, o SQLite verificou a UNIQUErestrição.

Segundo, como esta instrução violou a UNIQUErestrição ao tentar adicionar o DBAtítulo que já existe, o SQLite excluiu a linha existente.

Terceiro, o SQLite inseriu uma nova linha com os dados fornecidos pela REPLACEinstrução.

Observe que a REPLACEafirmação significa INSERTou REPLACE, não INSERTou 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 )

Tente

O que o enunciado tentou fazer é atualizar o for min_salarypara a posição com id 2, que é o desenvolvedor.

Primeiro, a posição com id 2 já existe, a REPLACEinstrução a remove.

Em seguida, o SQLite tentou inserir uma nova linha com duas colunas: ( id, min_salary). No entanto, viola a NOT NULLrestrição da coluna do título. Portanto, o SQLite reverte a transação.

Se a titlecoluna não possuir a NOT NULLrestrição, a REPLACEinstrução irá inserir uma nova linha cuja coluna de título é NULL.

Neste tutorial, mostramos como usar a REPLACEinstrução SQLite para inserir ou substituir uma linha em uma tabela.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *