SQLite Consulta INSERT, UPDATE, DELETE com exemplo

โšก Resumo Inteligente

SQLite As instruรงรตes INSERT, UPDATE e DELETE modificam os dados em um banco de dados adicionando novas linhas, alterando valores existentes e removendo registros, enquanto a clรกusula ON CONFLICT decide como as violaรงรตes de restriรงรตes serรฃo resolvidas durante essas operaรงรตes.

  • ๐Ÿ“ INSERIR: A instruรงรฃo INSERT adiciona uma ou mais novas linhas, listando as colunas de destino e seus valores com a clรกusula VALUES.
  • โœ๏ธ ATUALIZAR: A instruรงรฃo UPDATE altera os valores de colunas existentes, usando SET para novos dados e WHERE para selecionar linhas especรญficas.
  • ๐Ÿ—‘๏ธ EXCLUIR: A instruรงรฃo DELETE remove as linhas que correspondem a uma condiรงรฃo WHERE, ou todas as linhas quando a clรกusula WHERE รฉ omitida.
  • โš ๏ธ Clรกusula de Conflito: A clรกusula ON CONFLICT resolve violaรงรตes de restriรงรตes por meio de ROLLBACK, ABORT, FAIL, IGNORE ou REPLACE.
  • ๐Ÿ” Transaรงรตes: Uma transaรงรฃo de banco de dados agrupa diversas operaรงรตes em uma รบnica unidade que ou confirma totalmente ou cancela totalmente.
  • ๐Ÿค– Assistรชncia de IA: Ferramentas de IA de texto para SQL e GitHub Copilot geram SQLite Instruรงรตes INSERT, UPDATE e DELETE a partir de prompts em linguagem natural.

SQLite INSERIR, ATUALIZAR, EXCLUIR Consulta

Consulta de inserรงรฃo, atualizaรงรฃo e exclusรฃo em SQLite

As clรกusulas de modificaรงรฃo de dados em SQLite sรฃo instruรงรตes INSERT, UPDATE e DELETE. ร‰ usado para inserir novas linhas, atualizar valores existentes ou excluir linhas do banco de dados.

Observe que, para todos os exemplos a seguir, vocรช deve executar sqlite3.exe e abrir uma conexรฃo com o banco de dados de amostra conforme flui:

Passo 1) Nesta etapa,

  • Abra Meu Computador e navegue atรฉ o seguinte diretรณrio: โ€œC:\sqliteโ€ e
  • Em seguida, abra o arquivo โ€œsqlite3.exeโ€:

SQLite Consulta - INSERT, UPDATE, DELETE

Passo 2) Abra o banco de dados โ€œTutorialsSampleDB.dbโ€ com o seguinte comando:

.open TutorialsSampleDB.db

SQLite Consulta - INSERT, UPDATE, DELETE

Agora vocรช estรก pronto para executar qualquer tipo de consulta no banco de dados.

SQLite INSIRA

SQLite INSERT รฉ usado para inserir registros em uma tabela especificada do banco de dados. vocรช deve usar a clรกusula 'INSERT'. A sintaxe da clรกusula INSERT รฉ a seguinte:

SQLite INSIRA

  • Apรณs a clรกusula INSERT, vocรช deve indicar em qual tabela deseja inserir os valores.
  • Apรณs o nome da tabela vocรช escreve a lista de colunas nas quais deseja inserir os valores.
  • Vocรช pode ignorar o nome das colunas e nรฃo escrever nelas.
  • Se vocรช nรฃo escrever o nome das colunas, os valores serรฃo inseridos em todas as colunas encontradas na tabela com a mesma ordem, as colunas sรฃo definidas na tabela.
  • Apรณs a clรกusula VALUES, vocรช deve listar os valores a serem inseridos.
  • Cada clรกusula INSERT insere apenas uma linha. Se quiser inserir mรบltiplas linhas, vocรช deve escrever mรบltiplas clรกusulas INSERT, uma para cada linha.

SQLite Inserir exemplo

No exemplo a seguir, inseriremos 2 linhas na tabela de alunos, uma para cada aluno:

INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth)
              VALUES(11, 'Ahmad', 4, '1997-10-12');

INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');

Isso deve ser executado com รชxito e nรฃo hรก saรญda para isso:

SQLite inserรงรฃo

Isso irรก inserir dois alunos:

  • O primeiro aluno com StudentId = 11, StudentName = Ahmad, DepartmentId = 4 e DateOfBirth = 1997-10-12.
  • O segundo aluno com StudentId=12, StudentName = Aly, DepartmentId = 4 e DateOfBirth = 1996-10-12'.

Na primeira declaraรงรฃo, listamos os nomes das colunas โ€œStudentId, StudentName, DepartmentId, DateOfBirthโ€. No entanto, na segunda declaraรงรฃo, nรฃo o fizemos.

Os quatro valores โ€œ12, 'Aly', 4, '1996-10-12'โ€ serรฃo inseridos em todas as quatro colunas da tabela Alunos na mesma ordem em que as colunas sรฃo definidas.

Agora, vamos verificar se os dois alunos foram inseridos na tabela Alunos executando o seguinte pergunta:

SELECT * FROM Students;

Entรฃo vocรช deverรก ver os dois alunos retornados dessa consulta da seguinte forma:

SQLite inserรงรฃo

SQLite Atualizar

SQLite A consulta UPDATE รฉ usada para modificar os registros existentes em uma tabela. Vocรช pode usar a clรกusula WHERE com a consulta UPDATE para atualizar linhas selecionadas. A clรกusula UPDATE atualiza uma tabela alterando um valor para uma coluna especรญfica. A seguir estรก a sintaxe da clรกusula UPDATE:

SQLite Atualizar

Como segue:

  • Apรณs a โ€œclรกusula de atualizaรงรฃoโ€, vocรช deve escrever o nome da tabela a ser atualizada.
  • Vocรช deve escrever โ€œclรกusula SETโ€ que รฉ usada para escrever o nome da coluna a ser atualizada e o valor a ser atualizado.
  • Vocรช pode atualizar mais de uma coluna. Vocรช pode usar uma vรญrgula entre cada linha.
  • Vocรช pode especificar uma clรกusula WHERE para especificar apenas algumas linhas. Somente as linhas avaliadas pela expressรฃo como verdadeiras sรฃo atualizadas. Se vocรช nรฃo especificou uma clรกusula WHERE, todas as linhas serรฃo atualizadas.

SQLite Exemplo de atualizaรงรฃo

Na instruรงรฃo UPDATE a seguir, atualizaremos o DepartmentId do Student com StudentId = 6 para 3:

UPDATE Students
SET DepartmentId = 3 
WHERE StudentId = 6;

Isso deve ser executado com sucesso e vocรช nรฃo deve obter nenhuma saรญda:

SQLite Atualizar

Na clรกusula UPDATE, especificamos que queremos atualizar a tabela Students.

  • Na clรกusula WHERE, filtramos todos os alunos para selecionar apenas a linha para StudentId = 6.
  • A clรกusula SET atualizarรก o valor do ID do Departamento dos alunos selecionados para 3.

Agora vamos verificar se o aluno com ID 6 estรก atualizado, executando o seguinte comando:

SELECT * FROM Students WHERE StudentId = 6;

Agora vocรช deve ver que o valor do ID do departamento agora รฉ 3 da seguinte forma:

SQLite Atualizar

SQLite Apagar

SQLite A consulta DELETE รฉ usada para remover registros existentes de uma tabela especificada. Vocรช pode usar a clรกusula WHERE com consultas DELETE para excluir as linhas selecionadas.

A clรกusula DELETE tem a seguinte sintaxe:

SQLite Apagar

  • Vocรช precisa escrever o nome da tabela apรณs a clรกusula DELETE FROM, da qual deseja excluir os registros. (Observaรงรฃo: a clรกusula DELETE รฉ usada para excluir alguns registros de uma tabela ou todos os registros, e nรฃo exclui a tabela em si. Jรก a clรกusula DROP รฉ usada para excluir a tabela inteira com todos os seus registros.)
  • Se vocรช escrever a clรกusula DELETE assim โ€œDELETE FROM guruโ€, isso excluirรก todos os registros da tabela โ€œguruโ€.
  • Vocรช pode especificar uma condiรงรฃo WHERE com uma expressรฃo se desejar excluir algumas linhas especรญficas. Somente as linhas para as quais a expressรฃo for avaliada como verdadeira serรฃo excluรญdas. Por exemplo, โ€œDELETE FROM guru WHERE id > 5โ€ โ€“ isso excluirรก apenas os registros que possuem id maior que 5.

Exemplo

Na instruรงรฃo a seguir, excluiremos dois alunos com StudentId 11 e 12:

DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;

A expressรฃo โ€œStudentId = 11 OR StudentId = 12โ€ serรก verdadeira apenas para os alunos com IDs 11 e 12. Portanto, a clรกusula DELETE serรก aplicada a ambos e excluirรก apenas eles.

Este comando deve ser executado com sucesso e vocรช nรฃo deve obter nenhuma saรญda como a seguir:

SQLite Apagar

Vocรช pode verificar se os dois alunos foram excluรญdos selecionando todos os registros da tabela Alunos da seguinte forma:

SELECT * FROM Students;

Vocรช nรฃo deverรก ver os dois alunos com IDs 11 e 12 da seguinte forma:

SQLite Apagar

SQLite Clรกusula de Conflito

Suponha que vocรช tenha uma coluna que tenha uma das seguintes restriรงรตes de coluna: UNIQUE, NOT NULL, CHECK ou PRIMARY KEY. E entรฃo vocรช tentou inserir ou atualizar um valor naquela coluna com um valor que entra em conflito com essa restriรงรฃo.

Por exemplo, se uma coluna tiver uma restriรงรฃo UNIQUE e vocรช tentar inserir um valor que jรก existe (um valor duplicado), que entra em conflito com a restriรงรฃo UNIQUE. Entรฃo a clรกusula CONFLICT permite que vocรช escolha o que fazer nesses casos para resolver o conflito.

Antes de continuarmos explicando como a clรกusula CONFLICT resolve o conflito. Vocรช deve entender o que รฉ uma transaรงรฃo de banco de dados.

Transaรงรฃo de banco de dados

O termo transaรงรฃo de banco de dados รฉ uma lista de SQLite operaรงรตes (inserir ou atualizar ou excluir). A transaรงรฃo do banco de dados deve ser executada como uma unidade, com todas as operaรงรตes executadas com sucesso ou nenhuma. Todas as operaรงรตes serรฃo canceladas se uma delas falhar na execuรงรฃo.

Exemplo para uma transaรงรฃo de banco de dados

A transaรงรฃo de transferรชncia de dinheiro de uma conta bancรกria para outra envolverรก algumas atividades. Esta operaรงรฃo de transaรงรฃo inclui a retirada de dinheiro da primeira conta e o depรณsito em outra conta. Esta transaรงรฃo deve ser totalmente concluรญda ou totalmente cancelada e nรฃo falhar no meio do caminho.

Aqui estรก a lista de cinco resoluรงรตes que vocรช pode escolher na clรกusula CONFLITO:

  1. ROLLBACK โ€“ esta opรงรฃo reverterรก a transaรงรฃo na qual o estado atual estava. SQLite declaraรงรฃo que contรฉm o conflito (isso cancelarรก toda a transaรงรฃo). Por exemplo, se vocรช estiver tentando atualizar 10 linhas e a quinta linha tiver um valor que entre em conflito com uma restriรงรฃo, nenhuma linha serรก atualizada e as 10 linhas permanecerรฃo iguais. Um erro serรก lanรงado.
  2. ABORTAR โ€“ isto irรก abortar (cancelar) a operaรงรฃo atual. SQLite apenas a declaraรงรฃo que contรฉm o conflito e a transaรงรฃo nรฃo serรก cancelada. Por exemplo, se vocรช estiver tentando atualizar 10 linhas e a quinta linha tiver um valor que entre em conflito com uma restriรงรฃo, apenas o quinto valor nรฃo serรก atualizado, mas as outras 9 linhas serรฃo atualizadas. Um erro serรก lanรงado.
  3. FALHA โ€“ aborta o processo atual SQLite declaraรงรฃo que contรฉm o conflito. No entanto, a transaรงรฃo nรฃo continuarรก, mas as alteraรงรตes anteriores feitas nas linhas anteriores ร  linha que contรฉm o conflito serรฃo confirmadas. Por exemplo, se vocรช estiver tentando atualizar 10 linhas e a quinta linha tiver um valor que entre em conflito com uma restriรงรฃo, apenas as 4 linhas serรฃo atualizadas e as outras nรฃo. Um erro serรก lanรงado.
  4. IGNORAR โ€“ isso farรก com que a linha que contรฉm a violaรงรฃo de restriรงรฃo seja ignorada e que as demais linhas subsequentes continuem sendo processadas. SQLite declaraรงรฃo. Por exemplo, se vocรช estiver tentando atualizar 10 linhas e a quinta linha tiver um valor que entre em conflito com uma restriรงรฃo, apenas as 4 linhas serรฃo atualizadas e as outras nรฃo. Ele nรฃo prosseguirรก para atualizar outras linhas e pararรก na linha que possui o valor de conflito. Nenhum erro serรก lanรงado.
  5. SUBSTITUIR โ€“ depende do tipo de restriรงรฃo que foi violada:
    • Quando hรก uma violaรงรฃo de restriรงรฃo para a restriรงรฃo UNIQUE ou PRIMARY KEY. O REPLACE substituirรก a linha que causa a violaรงรฃo pela nova linha inserida ou atualizada.
    • Quando houver uma violaรงรฃo da restriรงรฃo NOT NULL, a clรกusula REPLACE substituirรก o valor NULL pelo valor padrรฃo dessa coluna. Se a coluna nรฃo tiver um valor padrรฃo, entรฃo SQLite abortarรก a declaraรงรฃo (a declaraรงรฃo serรก cancelada)
    • SE ocorrer a violaรงรฃo da restriรงรฃo CHECK, a clรกusula serรก abortada.

Observaรงรฃo: As 5 resoluรงรตes acima sรฃo opรงรตes de como vocรช deseja resolver o conflito. O que รฉ aplicรกvel para resolver um conflito pode nรฃo ser necessariamente aplicรกvel para resolver outros tipos de conflitos.

Como declarar a clรกusula CONFLICT

Vocรช pode declarar a clรกusula ON CONFLICT ao definir uma restriรงรฃo para uma definiรงรฃo de coluna na clรกusula CREATE TABLE. Usando a seguinte sintaxe:

SQLite Clรกusula de Conflito

Vocรช pode escolher uma das cinco resoluรงรตes para resolver o conflito conforme explicado anteriormente.

Exemplo de IGNORAR EM CONFLITO

Passo 1) Crie um novo assunto de tabela da seguinte forma:

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE,
    [SubjectName] NVARCHAR NOT NULL
);

Observe que definimos uma restriรงรฃo de CHAVE PRIMรRIA na coluna SubjectId. Essa restriรงรฃo impede a inserรงรฃo de dois valores duplicados na coluna SubjectId, garantindo que todos os valores nessa coluna sejam รบnicos. Observe tambรฉm que definimos a resoluรงรฃo de conflitos como "IGNORAR".

O comando deve ser executado com sucesso e vocรช nรฃo deve receber nenhum erro:

Exemplo de IGNORAR EM CONFLITO

Passo 2) Agora, vamos inserir alguns valores nos novos assuntos da tabela, mas com um valor que viola a restriรงรฃo de chave primรกria:

INSERT INTO Subjects VALUES(1, 'Algebra');
INSERT INTO Subjects VALUES(2, 'Database Course');
INSERT INTO Subjects VALUES(2, 'Data Structures');
INSERT INTO Subjects VALUES(4, 'Algorithms');

Nesta instruรงรฃo INSERT, tentamos inserir dois cursos com o mesmo ID de assunto de chave primรกria 2, o que รฉ uma violaรงรฃo da restriรงรฃo de chave primรกria.

Os comandos devem funcionar bem e vocรช nรฃo deve receber nenhum erro. Como segue:

Exemplo de IGNORAR EM CONFLITO

Passo 3) Selecione todos os assuntos da tabela da seguinte forma:

SELECT * FROM Subjects;

Isso lhe darรก a lista de assuntos:

Exemplo de IGNORAR EM CONFLITO

Observe que apenas trรชs disciplinas foram inseridas: โ€œรlgebra, Curso de Banco de Dados e Algorithmsโ€em vez de 4 linhas.

A linha que possui o valor que viola a restriรงรฃo de chave primรกria, que รฉ โ€œEstruturas de Dadosโ€ foi ignorada e nรฃo inserida. No entanto, SQLite continua executando outras instruรงรตes apรณs essa linha.

Passo 4) DELETE os assuntos da tabela para criรก-la novamente com uma clรกusula ON CONFLICT diferente para o exemplo a seguir executando o seguinte comando:

DROP TABLE Subjects;

O comando drop exclui a tabela inteira. Os assuntos da tabela agora nรฃo existem.

Exemplo de substituiรงรฃo em conflito

Passo 1) Crie um novo assunto de tabela da seguinte forma:

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE,
    [SubjectName] NVARCHAR NOT NULL
);

Observe que definimos uma restriรงรฃo PRIMARY KEY na coluna SubjectId. A restriรงรฃo de chave primรกria nรฃo permitirรก que dois valores duplicados sejam inseridos na coluna SubjectId para que todos os valores nessa coluna sejam exclusivos.

Observe tambรฉm que escolhemos a opรงรฃo de resoluรงรฃo de conflitos "REPLACE". O comando deve ser executado com sucesso e vocรช nรฃo deve receber nenhum erro.

Exemplo de substituiรงรฃo em conflito

Passo 2) Agora, vamos inserir alguns valores na nova tabela Assuntos, mas com um valor que viola a restriรงรฃo de chave primรกria:

INSERT INTO Subjects VALUES(1, 'Algebra');
INSERT INTO Subjects VALUES(2, 'Database Course');
INSERT INTO Subjects VALUES(2, 'Data Structures');
INSERT INTO Subjects VALUES(4, 'Algorithms');

Nesta instruรงรฃo INSERT, tentamos inserir dois cursos com o mesmo ID de assunto de chave primรกria 2, o que รฉ uma violaรงรฃo da restriรงรฃo de chave primรกria.

Os comandos devem funcionar bem e vocรช nรฃo deve receber nenhum erro. Como segue:

Exemplo de substituiรงรฃo em conflito

Passo 3) Selecione todos os assuntos da tabela da seguinte forma:

SELECT * FROM Subjects;

Isso lhe darรก a lista de assuntos:

Exemplo de substituiรงรฃo em conflito

Observe que apenas trรชs disciplinas foram inseridas: โ€œรlgebra, Estruturas de Dados e Algorithmsโ€Enquanto tentamos inserir 4 linhas.

A linha que continha o valor que violava a restriรงรฃo da chave primรกria, ou seja, โ€œData Structuresโ€, teve o valor โ€œDatabase Courseโ€ substituรญdo da seguinte forma:

  • As duas primeiras instruรงรตes de inserรงรฃo funcionam bem sem problemas. Serรฃo inseridas duas disciplinas รlgebra e Curso de Banco de Dados com os ids 1, 2.
  • Ao SQLite Ao tentar executar a terceira instruรงรฃo de inserรงรฃo com SubjectId 2 e SubjectName โ€œData Structuresโ€, o sistema descobre que jรก existe um sujeito com SubjectId = 2. Isso viola a restriรงรฃo de chave primรกria definida na coluna SubjectId.
  • SQLite O sistema escolherรก uma resoluรงรฃo REPLACE para este conflito. Isso substitui o valor que jรก existe na tabela de assuntos pelo novo valor da instruรงรฃo INSERT. Portanto, o nome da disciplina โ€œDatabase Courseโ€ serรก substituรญdo pelo nome da disciplina โ€œData Structuresโ€.

Perguntas Frequentes

UPSERT combina as operaรงรตes de inserรงรฃo e atualizaรงรฃo. SQLite 3.24.0 (2018), INSERT INTO โ€ฆ ON CONFLICT(coluna) DO UPDATE SET โ€ฆ insere uma nova linha ou atualiza a existente quando ocorre um conflito de chave รบnica ou chave primรกria. DO NOTHING ignora a linha silenciosamente.

INSERT OR REPLACE exclui a linha em conflito e insere uma nova, de modo que as colunas nรฃo listadas sejam redefinidas para seus valores padrรฃo. ON CONFLICT DO UPDATE edita a linha existente no local, mantendo-a.ping outras colunas intactas, o que torna essa a operaรงรฃo upsert verdadeira mais segura.

Liste vรกrios grupos de valores apรณs VALUES, separados por vรญrgulas: INSERT INTO Students (id, name) VALUES (1,'A'), (2,'B'), (3,'C');. Este formato de mรบltiplas linhas funciona porque SQLite 3.7.11 e รฉ mais rรกpido do que executar uma instruรงรฃo INSERT por linha.

Execute o comando DELETE FROM nome_da_tabela; sem a clรกusula WHERE. SQLite Nรฃo possui o comando TRUNCATE, mas aplica uma otimizaรงรฃo de truncamento que remove todas as linhas de uma sรณ vez. A estrutura da tabela permanece; use DROP TABLE para remover a tabela completamente.

Como SQLite 3.35.0 (2021), os comandos INSERT, UPDATE e DELETE aceitam uma clรกusula RETURNING opcional que exibe as linhas afetadas. Por exemplo, INSERT โ€ฆ RETURNING id; retorna os valores gerados imediatamente, evitando uma instruรงรฃo SELECT separada para ler o que mudou.

Use INSERT INTO โ€ฆ SELECT: INSERT INTO Archive (id, nome) SELECT id, nome FROM Students WHERE DepartmentId = 4;. SQLite Insere todas as linhas retornadas pela consulta SELECT, portanto, a ordem e a quantidade de colunas devem corresponder ร  tabela de destino.

Sim. Assistentes de IA de texto para SQL convertem solicitaรงรตes em inglรชs simples em SQLite Instruรงรตes INSERT, UPDATE e DELETE, incluindo as clรกusulas WHERE e ON CONFLICT. Fornecer os nomes das tabelas e colunas melhora a precisรฃo, e cada instruรงรฃo gerada deve ser revisada e testada antes de ser executada em dados reais.

Copiloto do GitHub sugere SQLite Consultas INSERT, UPDATE e DELETE embutidas em editores como VS CodeEle lรช o esquema e os comentรกrios prรณximos, portanto, as sugestรตes reutilizam os nomes reais de suas tabelas e colunas, mas vocรช ainda deve verificar cada instruรงรฃo antes de executรก-la.

Resuma esta postagem com: