SQLite Consulta INSERT, UPDATE, DELETE com exemplo

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,

  1. Abra Meu Computador e navegue atรฉ o seguinte diretรณrio โ€œC:\sqlite"E
  2. Em seguida, abra โ€œsqlite3.exe":

SQLite Consulta - INSERT, UPDATE, DELETE

Passo 2) Abra o banco de dados โ€œTutoriaisSampleDB.dbโ€pelo 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 instruรงรฃ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รก inserido 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รช deve escrever um nome de tabela apรณs a clรกusula DELETE FROM, da qual deseja excluir os registros. (Observaรงรฃo: que o Clรกusula DELETE รฉ usado para excluir alguns registros de uma tabela ou excluir todos os registros e nรฃo excluirรก a tabela em si. No entanto, o Clรกusula DROP รฉ usado para excluir a tabela inteira com todos os registros nela contidos.)
  • 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 OU StudentId = 12โ€ serรก verdadeiro apenas para alunos com Ids 11 e 12. Portanto, a clรกusula DELETE serรก aplicada em ambos e irรก excluรญ-los apenas.

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. RECUPERAR โ€“ isso reverterรก a transaรงรฃo na qual o atual 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 โ€“ isso irรก abortar (cancelar) 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. FALHAR - aborta o 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.
  1. IGNORAR โ€“ isso pularรก a linha que contรฉm a violaรงรฃo de restriรงรฃo e continuarรก processando as outras linhas seguintes do 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.
  1. SUBSTITUIR โ€“ depende do tipo de restriรงรฃo que possui a violaรงรฃo:
  • 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. Pode nรฃo ser necessariamente que o que รฉ aplicรกvel para resolver um conflito seja 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 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. Alรฉm disso, observe que escolhemos uma resoluรงรฃo de conflito para ser โ€œ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 assuntos foram inseridos โ€œร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.

Alรฉm disso, observe que escolhemos uma opรงรฃo de resoluรงรฃo de conflito como โ€œSUBSTITUIRโ€œ. 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 assuntos foram inseridos โ€œรlgebra, Estruturas de Dados e Algorithmsโ€Enquanto tentamos inserir 4 linhas.

A linha que possui o valor que viola a restriรงรฃo de chave primรกria, que รฉ โ€œEstruturas de dadosโ€substituiu o valorโ€œCurso de Base de Dados" como segue:

  • 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 tenta executar a terceira instruรงรฃo de inserรงรฃo com SubjectId 2 e SubjectName โ€œEstruturas de dadosโ€œ, descobre que jรก existe um assunto com SubjectId = 2. O que รฉ uma violaรงรฃo da restriรงรฃo de chave primรกria definida na coluna SubjectId.
  • SQLite escolherรก uma resoluรงรฃo REPLACE para este conflito. Ele substitui o valor que jรก existe na tabela de assuntos pelo novo valor da instruรงรฃo insert. Entรฃo o "Curso de Base de Dadosโ€AssuntoName serรก substituรญdo porโ€œEstruturas de dados" Nome do assunto.

Resumo

As clรกusulas INSERT, UPDATE e DELETE sรฃo usadas para modificar os dados no SQLite banco de dados. A clรกusula CONFLICT รฉ uma clรกusula poderosa para resolver qualquer conflito entre os dados e os dados a serem modificados.

Resuma esta postagem com: