De clausules voor gegevenswijziging in SQLite zijn INSERT-, UPDATE- en DELETE-instructies. Het wordt gebruikt voor het invoegen van nieuwe rijen, het bijwerken van bestaande waarden of het verwijderen van rijen uit de database.
In deze tutorial leer je-
- INVOEGEN
- Bijwerken
- Verwijderen
- Conflictclausule
Merk op dat u voor alle volgende voorbeelden de sqlite3.exe moet uitvoeren en een verbinding met de voorbeelddatabase moet openen als stromend:
Stap 1) In deze stap,
- Open Deze computer en ga naar de volgende map " C: \ sqlite " en
- Open vervolgens " sqlite3.exe ":
Stap 2) Open de database " TutorialsSampleDB.db " met het volgende commando:
.open TutorialsSampleDB.db
Nu bent u klaar om elk type query op de database uit te voeren.
SQLite INSERT
SQLite INSERT wordt gebruikt om records in een opgegeven tabel van de database in te voegen. je moet de 'INSERT'-clausule gebruiken. De syntaxis van de INSERT-clausule is als volgt:
- Geef na de INSERT-clausule aan in welke tabel u de waarden moet invoegen.
- Na de tabelnaam schrijft u de lijst met kolommen waarin u de waarden wilt invoegen.
- U kunt de naam van de kolom negeren en er niet naar schrijven.
- Als u de kolomnaam niet schrijft, worden de waarden in dezelfde volgorde in alle kolommen in de tabel ingevoegd, de kolommen worden in de tabel gedefinieerd.
- Na de VALUES-clausule moet u de waarden vermelden die moeten worden ingevoegd.
- Elke INSERT-clausule voegt slechts één rij in. Als u meerdere rijen wilt invoegen, moet u meerdere INSERT-clausules schrijven, één voor elke rij.
SQLite Insert Voorbeeld
In het volgende voorbeeld zullen we 2 rijen invoegen in de leerlingentabel, één voor elke leerling:
INVOEGEN IN Studenten (Student-ID, Student-naam, Afdelings-ID, Geboortedatum)WAARDEN (11, 'Ahmad', 4, '1997-10-12');INVOEGEN IN DE WAARDEN VAN DE STUDENTEN (12, 'Aly', 4, '1996-10-12');
Dit zou met succes moeten werken en er is geen uitvoer voor:
Hiermee worden twee leerlingen ingevoegd:
- De eerste student met StudentId = 11, StudentName = Ahmad, DepartmentId = 4 en DateOfBirth = 1997-10-12.
- De tweede student met StudentId = 12, StudentName = Aly, DepartmentId = 4 en DateOfBirth = 1996-10-12 '.
In het eerste statement hebben we de kolomnamen " StudentId, StudentName, DepartmentId, DateOfBirth " vermeld. In het tweede statement echter niet.
De vier waarden " 12, 'Aly', 4, '1996-10-12' " worden in alle vier de kolommen van de Leerlingen-tabel ingevoegd in dezelfde volgorde waarin de kolommen zijn gedefinieerd.
Laten we nu controleren of de twee studenten zijn ingevoegd in de studententabel door de volgende query uit te voeren:
SELECTEER * UIT studenten;
Dan zou je de twee studenten als volgt uit die vraag moeten zien terugkomen:
SQLite-update
SQLite UPDATE Query wordt gebruikt om de bestaande records in een tabel te wijzigen. U kunt de WHERE-component gebruiken met de UPDATE-query om geselecteerde rijen bij te werken. De UPDATE-clausule werkt een tabel bij door een waarde voor een specifieke kolom te wijzigen. Het volgende is de syntaxis van de UPDATE-clausule:
Als volgt:
- Na de "update-clausule" moet u de tabelnaam schrijven om bij te werken.
- U moet de "SET-clausule" schrijven die wordt gebruikt om de kolomnaam te schrijven die moet worden bijgewerkt en de waarde die moet worden bijgewerkt.
- U kunt meer dan één kolom bijwerken. U kunt tussen elke regel een komma plaatsen.
- U kunt een WHERE-component specificeren om slechts enkele rijen op te geven. Alleen de rijen die door de uitdrukking waar worden geëvalueerd, worden bijgewerkt. Als u geen WHERE-component heeft opgegeven, worden alle rijen bijgewerkt.
SQLite Update Voorbeeld
In het volgende UPDATE-statement zullen we de DepartmentId voor de Student met StudentId = 6 updaten naar 3:
UPDATE studentenSET DepartmentId = 3WAAR StudentId = 6;
Dit zou met succes moeten werken en u zou geen uitvoer moeten krijgen:
In de UPDATE-clausule hebben we aangegeven dat we de tabel Students willen bijwerken.
- In de WHERE-component hebben we alle studenten gefilterd om alleen de rij voor StudentId = 6 te selecteren.
- De SET-clausule zal de waarde van de afdelings-ID voor de geselecteerde studenten bijwerken naar 3.
Laten we nu controleren of de leerling met ID 6 is bijgewerkt door de volgende opdracht uit te voeren:
SELECTEER * UIT studenten WAAR StudentId = 6;
U zou nu moeten zien dat de waarde van de afdelings-ID nu 3 is als volgt:
SQLite Verwijderen
SQLite DELETE-query wordt gebruikt om bestaande records uit een opgegeven tabel te verwijderen. U kunt de WHERE-component gebruiken met DELETE-query's om de geselecteerde rijen te verwijderen.
DELETE-clausule heeft de volgende syntaxis:
- U moet een tabelnaam schrijven na de DELETE FROM-component, waaruit u records wilt verwijderen.
- Als je de DELETE-clausule zoals deze "DELETE FROM guru" schrijft, zal dit alle records uit de tabel "guru" verwijderen.
- U kunt een WHERE-voorwaarde met een uitdrukking specificeren als u enkele specifieke rijen wilt verwijderen. Alleen de rijen waarvoor de uitdrukking true oplevert, worden verwijderd. Bijvoorbeeld: "DELETE FROM goeroe WHERE id> 5" - dit zal alleen de records verwijderen die een ID hebben groter dan 5.
Voorbeeld
In de volgende verklaring verwijderen we twee studenten met StudentId 11 en 12:
VERWIJDEREN UIT Leerlingen WAAR StudentId = 11 OF StudentId = 12;
De uitdrukking " StudentId = 11 OR StudentId = 12 " zal alleen waar zijn voor studenten met Ids 11 en 12. De DELETE-clausule wordt dus op beide toegepast en zal ze alleen verwijderen.
Deze opdracht zou met succes moeten worden uitgevoerd en u zou geen uitvoer moeten krijgen als volgt:
U kunt controleren of de twee studenten zijn verwijderd door alle records in de tabel met studenten als volgt te selecteren:
SELECTEER * UIT studenten;
Je zou de twee studenten met id 11 en 12 niet als volgt moeten zien:
SQLite-conflictclausule
Stel dat u een kolom heeft met een van de volgende kolombeperkingen: UNIEK, NIET NULL, CONTROLE of PRIMAIRE SLEUTEL. En toen probeerde u een waarde in die kolom in te voegen of bij te werken met een waarde die in strijd is met deze beperking.
Als een kolom bijvoorbeeld een UNIQUE-beperking heeft en u hebt geprobeerd een waarde in te voegen die al bestaat (een dubbele waarde), is dit in strijd met de UNIQUE-beperking. Vervolgens laat de CONFLICT-clausule u kiezen wat u in dergelijke gevallen wilt doen om dit conflict op te lossen.
Voordat we verder gaan met uitleggen hoe de CONFLICT-clausule het conflict oplost. U moet begrijpen wat een databasetransactie is.
Database transactie:
De term databasetransactie is een lijst met SQLite-bewerkingen (invoegen, bijwerken of verwijderen). De databasetransactie moet als één geheel worden uitgevoerd, alle bewerkingen zijn met succes of helemaal niet uitgevoerd. Alle bewerkingen worden geannuleerd als een ervan niet kon worden uitgevoerd.
Voorbeeld voor een databasetransactie:
De transactie voor het overboeken van geld van de ene bankrekening naar de andere zal een aantal activiteiten met zich meebrengen. Deze transactie omvat het opnemen van geld van de eerste rekening en het storten op een andere rekening. Deze transactie moet volledig of volledig worden geannuleerd en mag niet halverwege mislukken.
Hier is de lijst met vijf resoluties die u kunt kiezen in de CONFLICT-clausule:
- ROLLBACK - dit zal de transactie terugdraaien waarin de huidige SQLite-instructie met het conflict is (het zal de hele transactie annuleren). Als u bijvoorbeeld 10 rijen probeert bij te werken, en de vijfde rij heeft een waarde die conflicteert met een beperking, dan worden er geen rijen bijgewerkt, de 10 rijen blijven hetzelfde. Er wordt een fout gegenereerd.
- ABORT - hiermee wordt alleen de huidige SQLite-instructie afgebroken (geannuleerd) die het conflict bevat en wordt de transactie niet geannuleerd. Als u bijvoorbeeld 10 rijen probeert bij te werken, en de vijfde rij heeft een waarde die conflicteert met een beperking, dan wordt alleen de vijfde waarde niet bijgewerkt, maar worden de andere 9 rijen bijgewerkt. Er wordt een fout gegenereerd.
- MISLUKT - breekt de huidige SQLite-instructie met het conflict af. De transactie gaat echter niet door, maar de eerdere wijzigingen die zijn aangebracht in rijen voorafgaand aan de rij met het conflict, worden vastgelegd. Als u bijvoorbeeld 10 rijen probeert bij te werken, en de vijfde rij heeft een waarde die in strijd is met een beperking, dan worden alleen de 4 rijen bijgewerkt en de andere niet. Er wordt een fout gegenereerd.
- IGNORE - hiermee wordt de rij met de overtreding van de beperking overgeslagen en wordt de verwerking van de andere volgende rijen van de SQLite-instructie voortgezet. Als u bijvoorbeeld 10 rijen probeert bij te werken, en de vijfde rij heeft een waarde die in strijd is met een beperking, dan worden alleen de 4 rijen bijgewerkt en de andere niet. Het zal niet verder gaan om andere rijen bij te werken en te stoppen bij de rij met de conflictwaarde. Er wordt geen fout gegenereerd.
- VERVANG - het hangt af van het type beperking dat de overtreding heeft:
- Wanneer er een schending van de beperking is voor de beperking UNIQUE of PRIMARY KEY. De REPLACE vervangt de rij die de overtreding veroorzaakt door de nieuw ingevoegde of bijgewerkte rij.
- Als er een NOT NULL-schending is, vervangt de REPLACE-clausule de NULL-waarde door de standaardwaarde van die kolom. Als de kolom geen standaardwaarde heeft, breekt SQLite de instructie af (instructie wordt geannuleerd)
- Als de CHECK-beperking wordt geschonden, wordt de clausule geannuleerd.
Opmerking: de bovenstaande 5 resoluties zijn opties voor hoe u het conflict wilt oplossen. Het hoeft niet per se te zijn dat wat van toepassing is om een conflict op te lossen, ook van toepassing is op andere soorten conflicten.
Hoe de CONFLICT-clausule aangeven
U kunt de clausule ON CONFLICT declareren wanneer u een beperking definieert voor een kolomdefinitie binnen de clausule CREATE TABLE. Gebruik de volgende syntaxis:
U kunt een van de vijf oplossingen kiezen om het conflict op te lossen, zoals eerder uitgelegd.
BIJ CONFLICTEN NEGEREN Voorbeeld
Stap 1) Maak als volgt een nieuw tabelonderwerp:
MAAK TABEL [Onderwerpen] ([SubjectId] INTEGER NOT NULL PRIMAIRE SLEUTEL BIJ CONFLICT IGNORE,[SubjectName] NVARCHAR NOT NULL
Merk op dat we een PRIMARY KEY-beperking hebben gedefinieerd voor de SubjectId-kolom. De primaire sleutelbeperking staat niet toe dat twee dubbele waarden worden ingevoegd in de SubjectId-kolom, zodat alle waarden in die kolom uniek moeten zijn. Merk ook op dat we een conflictoplossing kiezen als " NEGEREN ".
De opdracht zou met succes moeten worden uitgevoerd en u zou geen fouten moeten krijgen:
Stap 2) Laten we nu enkele waarden invoegen in de nieuwe tabelonderwerpen, maar met een waarde die in strijd is met de primaire sleutelbeperking:
INVOEGEN IN Onderwerpen WAARDEN (1, 'Algebra');INVOEGEN IN Onderwerpen WAARDEN (2, 'Databasecursus');INVOEGEN IN Subject WAARDEN (2, 'Gegevensstructuren');INVOEGEN IN Onderwerpen WAARDEN (4, 'Algoritmen');
In deze INSERT-instructie hebben we geprobeerd twee cursussen in te voegen met dezelfde Primary Key Subject ID 2, wat een schending is van de primaire sleutelbeperking.
De opdrachten zouden goed moeten werken en u zou geen fouten moeten krijgen. Als volgt:
Stap 3) Selecteer als volgt alle onderwerpen uit de tabel:
SELECTEER * UIT onderwerpen;
Dit geeft je de lijst met onderwerpen:
Merk op dat er slechts drie onderwerpen zijn ingevoegd " Algebra, Databasecursus en Algoritmen " in plaats van 4 rijen.
De rij met de waarde die de primaire sleutelbeperking schendt, namelijk "Gegevensstructuren", werd genegeerd en niet ingevoegd. SQLite gaat echter door met het uitvoeren van andere instructies na die rij.
Stap 4) VERWIJDER de tabelonderwerpen om deze opnieuw te maken met een andere ON CONFLICT-clausule voor het volgende voorbeeld door de volgende opdracht uit te voeren:
DROP TABLE Onderwerpen;
Het drop-commando verwijdert de hele tabel. Tabelonderwerpen bestaan nu niet.
OVER CONFLICTEN VERVANGEN Voorbeeld
Stap 1) Maak als volgt een nieuw tabelonderwerp:
MAAK TABEL [Onderwerpen] ([SubjectId] INTEGER NOT NULL PRIMAIRE SLEUTEL BIJ CONFLICT VERVANGEN,[SubjectName] NVARCHAR NOT NULL
Merk op dat we een PRIMARY KEY-beperking hebben gedefinieerd voor de SubjectId-kolom. De primaire sleutelbeperking staat niet toe dat twee dubbele waarden worden ingevoegd in de SubjectId-kolom, zodat alle waarden in die kolom uniek moeten zijn.
Merk ook op dat we een optie voor conflictoplossing kiezen om " VERVANGEN " te zijn. De opdracht zou met succes moeten worden uitgevoerd en u zou geen fouten moeten krijgen:
Stap 2) Laten we nu enkele waarden invoegen in de nieuwe tabel Onderwerpen, maar met een waarde die in strijd is met de primaire sleutelbeperking:
INVOEGEN IN Onderwerpen WAARDEN (1, 'Algebra');INVOEGEN IN Onderwerpen WAARDEN (2, 'Databasecursus');INVOEGEN IN Subject WAARDEN (2, 'Gegevensstructuren');INVOEGEN IN Onderwerpen WAARDEN (4, 'Algoritmen');
In deze INSERT-instructie hebben we geprobeerd twee cursussen in te voegen met dezelfde Primary Key Subject ID 2, wat een schending is van de primaire sleutelbeperking.
De opdrachten zouden goed moeten werken en u zou geen fouten moeten krijgen. Als volgt:
Stap 3) Selecteer als volgt alle onderwerpen uit de tabel:
SELECTEER * UIT onderwerpen;
Dit geeft je de lijst met onderwerpen:
Merk op dat er slechts drie onderwerpen werden ingevoegd " Algebra, gegevensstructuren en algoritmen " terwijl we probeerden 4 rijen in te voegen.
De rij met de waarde die de primaire sleutelbeperking schendt, namelijk ' Gegevensstructuren ', heeft de waarde ' Databasecursus ' als volgt vervangen:
- De eerste twee invoeginstructies werken probleemloos. Twee vakken Algebra en Databasecursus worden ingevoegd met ID's 1, 2.
- Wanneer SQLite de derde insert-instructie probeert uit te voeren met SubjectId 2 en SubjectName " Data Structures ", komt het erachter dat er al een subject is met SubjectId = 2. Dit is een overtreding voor de primaire sleutelbeperking die is gedefinieerd in de SubjectId-kolom.
- SQLite zal een REPLACE-oplossing kiezen voor dit conflict. Het vervangt de waarde die al in de onderwerptabel bestaat door de nieuwe waarde uit de insert-instructie. De " Databasecursus " SubjectName wordt dus vervangen door " Data Structures " SubjectName.
Overzicht:
INSERT-, UPDATE- en DELETE-clausules worden gebruikt om de gegevens in de SQLite-database te wijzigen. De CONFLICT-clausule is een krachtige clausule om elk conflict tussen de gegevens en de te wijzigen gegevens op te lossen.