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: