SQLite INFOGA, UPPDATERA, DELETE Fråga med exempel
Dataändringsklausulerna i SQLite är INSERT-, UPDATE- och DELETE-satser. Den används för att infoga nya rader, uppdatera befintliga värden eller ta bort rader från databasen.
Observera att för alla följande exempel måste du köra sqlite3.exe och öppna en anslutning till exempeldatabasen som flytande:
Steg 1) I detta steg
- Öppna Den här datorn och navigera till följande katalog "C:\sqlite"Och
- Öppna sedan "sqlite3.exe"
Steg 2) Öppna databasen "TutorialsSampleDB.db" med följande kommando:
.open TutorialsSampleDB.db
Nu är du redo att köra vilken typ av fråga som helst på databasen.
SQLite INFOGA
SQLite INSERT används för att infoga poster i en specificerad tabell i databasen. du måste använda 'INSERT'-satsen. Syntaxen för INSERT-satsen är som följer:
- Efter INSERT-satsen ska du ange vilken tabell du behöver infoga värdena i.
- Efter tabellnamnet skriver du listan med kolumner, du vill infoga värdena i.
- Du kan ignorera kolumnnamnet och inte skriva till dem.
- Om du inte skriver kolumnnamnet kommer värdena att infogas i alla kolumner som finns i tabellen i samma ordning, kolumnerna definieras i tabellen.
- Efter VALUES-satsen bör du lista de värden som ska infogas.
- Varje INSERT-sats infogar bara en rad. Om du vill infoga flera rader bör du skriva flera INSERT-satser, en för varje rad.
SQLite Infoga exempel
I följande exempel kommer vi att infoga 2 rader i elevtabellen, en för varje elev:
INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth) VALUES(11, 'Ahmad', 4, '1997-10-12'); INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');
Detta bör köras framgångsrikt och det finns ingen utdata för detta:
Detta kommer att infoga två elever:
- Den första studenten med StudentId=11, StudentName = Ahmad, DepartmentId = 4 och DateOfBirth = 1997-10-12.
- Den andra studenten med StudentId=12, StudentName = Aly, DepartmentId = 4 och DateOfBirth = 1996-10-12′.
I det första uttalandet listade vi kolumnernas namn "StudentId, StudentName, DepartmentId, DateOf Birth". Men i det andra uttalandet gjorde vi inte det.
De fyra värdena "12, 'Aly', 4, '1996-10-12'” kommer att infogas i alla fyra kolumner i tabellen Studenter i samma ordning som kolumnerna är definierade.
Låt oss nu verifiera att de två eleverna infogades i tabellen Studenter genom att köra följande fråga:
SELECT * FROM Students;
Då bör du se de två eleverna som returnerades från den frågan enligt följande:
SQLite Uppdatering
SQLite UPDATE Query används för att modifiera befintliga poster i en tabell. Du kan använda WHERE-satsen med UPDATE-frågan för att uppdatera valda rader. UPDATE-satsen uppdaterar en tabell genom att ändra ett värde för en specifik kolumn. Följande är syntaxen för UPDATE-satsen:
Som följande:
- Efter "uppdateringsklausulen" bör du skriva tabellnamnet för att uppdatera.
- Du måste skriva "SET-sats" som används för att skriva kolumnnamnet som ska uppdateras och värdet som ska uppdateras.
- Du kan uppdatera mer än en kolumn. Du kan använda ett kommatecken mellan varje rad.
- Du kan ange en WHERE-sats för att endast ange vissa rader. Endast de rader som uttrycket utvärderar till sanna uppdateras. Om du inte angav en WHERE-sats kommer alla rader att uppdateras.
SQLite Uppdateringsexempel
I följande UPDATE-uttalande kommer vi att uppdatera DepartmentId för studenten med StudentId = 6 till 3:
UPDATE Students SET DepartmentId = 3 WHERE StudentId = 6;
Detta bör köras framgångsrikt och du bör inte få någon utdata:
I UPDATE-satsen specificerade vi att vi vill uppdatera tabellen Studenter.
- I WHERE-satsen filtrerade vi alla elever för att bara välja raden för StudentId = 6.
- SET-klausulen kommer att uppdatera värdet på avdelnings-ID för de valda studenterna till 3.
Låt oss nu verifiera att studenten med ID 6 är uppdaterad genom att köra följande kommando:
SELECT * FROM Students WHERE StudentId = 6;
Du bör nu se att avdelnings-ID-värdet nu är 3 enligt följande:
SQLite Radera
SQLite DELETE-frågan används för att ta bort befintliga poster från en angiven tabell. Du kan använda WHERE-satsen med DELETE-frågor för att ta bort de markerade raderna.
DELETE-satsen har följande syntax:
- Du måste skriva ett tabellnamn efter DELETE FROM-satsen, från vilken du vill radera poster. (Notera: att DELETE-klausul används för att ta bort vissa poster från en tabell eller ta bort alla poster och det kommer inte att ta bort själva tabellen. Men den DROP-klausul används för att radera hela tabellen med alla poster på den.)
- Om du skriver DELETE-satsen så här "DELETE FROM guru", kommer detta att radera alla poster från tabellen "guru".
- Du kan ange ett WHERE-villkor med ett uttryck om du vill ta bort några specifika rader. Endast de rader för vilka uttrycket utvärderas till sant kommer att tas bort. Till exempel, "RADERA FRÅN guru WHERE id > 5" - detta tar bara bort de poster som har id större än 5.
Exempelvis
I följande uttalande kommer vi att ta bort två elever med StudentId 11 och 12:
DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;
Uttrycket "StudentId = 11 ELLER StudentId = 12” kommer endast att gälla för elever med ID 11 och 12. Så DELETE-satsen kommer att tillämpas på båda och tar bara bort dem.
Detta kommando bör köras framgångsrikt och du bör inte få någon utdata enligt följande:
Du kan verifiera att de två eleverna har tagits bort genom att välja alla poster från tabellen Studenter enligt följande:
SELECT * FROM Students;
Du bör inte se de två eleverna med id 11 och 12 enligt följande:
SQLite Konfliktklausul
Anta att du har en kolumn som har en av följande kolumnbegränsningar: UNIQUE, NOT NULL, CHECK eller PRIMARY KEY. Och sedan försökte du infoga eller uppdatera ett värde i den kolumnen med ett värde som strider mot denna begränsning.
Till exempel, om en kolumn har en UNIQUE-begränsning och du försökte infoga ett värde som redan finns (ett dubblettvärde), vilket står i konflikt med UNIQUE-begränsningen. Sedan låter CONFLICT-klausulen dig välja vad du ska göra i sådana fall för att lösa denna konflikt.
Innan vi fortsätter att förklara hur CONFLICT-klausulen löser konflikten. Du bör förstå vad en databastransaktion är.
Databastransaktion
Termen databastransaktion är en lista över SQLite operationer (infoga eller uppdatera eller ta bort). Databastransaktionen måste utföras som en enhet, antingen alla operationer utförda framgångsrikt eller inte alls. Alla operationer kommer att avbrytas om en av dem misslyckades.
Exempel på en databastransaktion
Transaktionen för att överföra pengar från ett bankkonto till ett annat kommer att involvera ett par aktiviteter. Denna transaktionsoperation inkluderar uttag av pengar från det första kontot och insättning av dem på ett annat konto. Denna transaktion måste slutföras helt eller helt avbrytas och inte misslyckas halvvägs.
Här är listan över fem lösningar du kan välja i KONFLIKT-satsen:
- RULLA TILLBAKA – detta kommer att rulla tillbaka transaktionen där den aktuella SQLite uttalande som har konflikten (det kommer att avbryta hela transaktionen). Om du till exempel försöker uppdatera 10 rader och den femte raden har ett värde som står i konflikt med en begränsning, kommer inga rader att uppdateras, de 10 raderna kommer att förbli desamma. Ett fel kommer att kastas.
- AVBRYTA – detta kommer att avbryta (avbryta) strömmen SQLite endast det uttalande som har konflikten och transaktionen kommer inte att avbrytas. Om du till exempel försöker uppdatera 10 rader och den femte raden har ett värde som står i konflikt med en begränsning, kommer bara det femte värdet inte att uppdateras utan de andra 9 raderna kommer att uppdateras. Ett fel kommer att kastas.
- FAIL – avbryter strömmen SQLite uttalande som har konflikten. Transaktionen kommer dock inte att fortsätta, men de tidigare ändringarna som gjorts på rader före raden som har konflikten kommer att genomföras. Om du till exempel försöker uppdatera 10 rader och den femte raden har ett värde som står i konflikt med en begränsning, kommer bara de fyra raderna att uppdateras och den andra inte. Ett fel kommer att kastas.
- IGNORERA – detta kommer att hoppa över raden som innehåller begränsningsöverträdelsen och fortsätta bearbeta de andra följande raderna i SQLite påstående. Om du till exempel försöker uppdatera 10 rader och den femte raden har ett värde som står i konflikt med en begränsning, kommer bara de fyra raderna att uppdateras och den andra inte. Det går inte vidare för att uppdatera andra rader och stannar vid raden som har konfliktvärdet. Inget fel kommer att kastas.
- ERSÄTTA – det beror på vilken typ av begränsning som har överträdelsen:
- När det finns en begränsningsöverträdelse för begränsningen UNIQUE eller PRIMARY KEY. REPLACE kommer att ersätta raden som orsakar överträdelsen med den nya infogade eller uppdaterade raden.
- När det finns en NOT NULL-begränsningsöverträdelse kommer REPLACE-satsen att ersätta NULL-värdet med standardvärdet för den kolumnen. Om kolumnen inte har ett standardvärde, då SQLite kommer att avbryta uttalandet (uttalandet kommer att avbrytas)
- OM överträdelsen av CHECK-begränsningen inträffar kommer klausulen att avbrytas.
Notera: Ovanstående 5 resolutioner är alternativ för hur du vill lösa konflikten. Det är kanske inte nödvändigtvis vad som är tillämpligt för att lösa en konflikt är tillämpligt för att lösa andra typer av konflikter.
Hur man förklarar KONFLICT-klausulen
Du kan deklarera ON CONFLICT-satsen när du definierar en begränsning för en kolumndefinition i CREATE TABLE-satsen. Använder följande syntax:
Du kan välja en av de fem lösningarna för att lösa konflikten som förklarats tidigare.
OM KONFLIKT IGNORERA Exempel
Steg 1) Skapa ett nytt tabellämne enligt följande:
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE, [SubjectName] NVARCHAR NOT NULL );
Lägg märke till att vi har definierat en PRIMARY KEY-begränsning i SubjectId-kolumnen. Primärnyckelbegränsningen tillåter inte att två dubblerade värden infogas i SubjectId-kolumnen så att alla värden i den kolumnen ska vara unika. Lägg också märke till att vi väljer en konfliktlösning som "IGNORERA".
Kommandot bör köras framgångsrikt och du bör inte få några fel:
Steg 2) Låt oss nu infoga några värden i de nya tabellämnena, men med ett värde som bryter mot den primära nyckelbegränsningen:
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');
I den här INSERT-satsen försökte vi infoga två kurser med samma primära nyckelämne-id 2, vilket är ett brott mot den primära nyckelbegränsningen.
Kommandona ska fungera bra och du ska inte få några fel. Som följande:
Steg 3) Välj alla ämnen från tabellen enligt följande:
SELECT * FROM Subjects;
Detta kommer att ge dig listan över ämnen:
Observera att endast tre ämnen infogades "Algebra, Databaskurs och Algorithms” istället för 4 rader.
Raden som har värdet som bryter mot primärnyckelns begränsning, som är "Datastrukturer", ignorerades och infogades inte. Dock, SQLite fortsätter att köra andra satser efter den raden.
Steg 4) DELETE tabellämnena för att skapa den igen med en annan ON CONFLICT-sats för följande exempel genom att köra följande kommando:
DROP TABLE Subjects;
Drop-kommandot tar bort hela tabellen. Tabellämnen finns nu inte.
OM KONFLIKT ERSÄTT Exempel
Steg 1) Skapa ett nytt tabellämne enligt följande:
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE, [SubjectName] NVARCHAR NOT NULL );
Lägg märke till att vi definierade en PRIMARY KEY-begränsning i ämnes-ID-kolumnen. Primärnyckelbegränsningen tillåter inte att två dubblerade värden infogas i SubjectId-kolumnen så att alla värden i den kolumnen ska vara unika.
Observera också att vi väljer ett konfliktlösningsalternativ att vara "ERSÄTTA". Kommandot bör köras framgångsrikt och du bör inte få några fel:
Steg 2) Låt oss nu infoga några värden i den nya tabellen Ämnen, men med ett värde som bryter mot den primära nyckelbegränsningen:
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');
I den här INSERT-satsen försökte vi infoga två kurser med samma primära nyckelämne-id 2, vilket är ett brott mot den primära nyckelbegränsningen.
Kommandona ska fungera bra och du ska inte få några fel. Som följande:
Steg 3) Välj alla ämnen från tabellen enligt följande:
SELECT * FROM Subjects;
Detta kommer att ge dig listan över ämnen:
Observera att endast tre ämnen infogades "Algebra, datastrukturer och Algorithms” medan vi försökte infoga 4 rader.
Raden som har värdet som bryter mot primärnyckelns begränsning, vilket är "Data struktur" ersatte värdet "Databaskurs" enligt följande:
- De två första infogningssatserna fungerar bra utan problem. Två ämnen Algebra och Databaskurs kommer att infogas med id 1, 2.
- När SQLite försöker köra den tredje insertsatsen med SubjectId 2 och SubjectName "Data struktur", får den reda på att det redan finns ett ämne med SubjectId = 2. Vilket är en överträdelse för den primära nyckelbegränsningen som definieras i SubjectId-kolumnen.
- SQLite kommer att välja en ERSÄTT lösning för denna konflikt. Det ersätter värdet som redan finns i ämnestabellen med det nya värdet från insert-satsen. Så den "Databaskurs" Ämnesnamn kommer att ersättas med "Data struktur” Ämnesnamn.
Sammanfattning
INSERT, UPDATE och DELETE-satser används för att modifiera data i SQLite databas. CONFLICT-satsen är en kraftfull klausul för att lösa eventuella konflikter mellan data och data som ska ändras.