SQLite-INSÄTTNING, UPPDATERING, RADERA fråga med exempel

Innehållsförteckning:

Anonim

Datamodifieringssatserna i SQLite är INSERT-, UPDATE- och DELETE-uttalanden. Den används för att infoga nya rader, uppdatera befintliga värden eller radera rader från databasen.

I den här handledningen lär du dig-

  • FÖRA IN
  • Uppdatering
  • Radera
  • Konfliktbestämmelse

Observera att för alla följande exempel måste du köra sqlite3.exe och öppna en anslutning till exempeldatabasen som flödande:

Steg 1) I detta steg,

  1. Öppna Den här datorn och navigera till följande katalog " C: \ sqlite " och
  2. Öppna sedan " sqlite3.exe ":

Steg 2) Öppna databasen " TutorialsSampleDB.db " med följande kommando:

.öppna TutorialsSampleDB.db

Nu är du redo att köra alla typer av frågor i databasen.

SQLite INSERT

SQLite INSERT används för att infoga poster i en specifik tabell i databasen. du måste använda INSERT-klausulen. INSERT-klausulens syntax är som följer:

  • Efter INSERT-klausulen bör du ange vilken tabell du behöver för att infoga värdena.
  • Efter tabellnamnet du skriver kolumnlistan vill du infoga värdena i.
  • Du kan ignorera kolumnnamnet och inte skriva till dem.
  • Om du inte skriver kolumnnamnet infogas värdena i alla kolumner som finns i tabellen i samma ordning, kolumnerna definieras i tabellen.
  • Efter VALUES-paragrafen 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.

Exempel på SQLite-infogning

I följande exempel infogar vi två rader i studenttabellen, en för varje elev:

INSERT INTO Students (StudentId, StudentName, DepartmentId, DateOfBirth)VÄRDEN (11, 'Ahmad', 4, '1997-10-12');INSÄTTA I studenterVÄRDEN (12, 'Aly', 4, '1996-10-12');

Detta ska 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 kolumnnamnen " StudentId, StudentName, DepartmentId, DateOfBirth ". Men i det andra uttalandet gjorde vi det inte.

De fyra värdena " 12, 'Aly', 4, '1996-10-12' " kommer att införas i alla de fyra kolumnerna i tabellen Students i samma ordning som kolumnerna definieras.

Låt oss nu verifiera att de två eleverna infördes i tabellen Students genom att köra följande fråga:

VÄLJ * FRÅN studenter;

Då bör du se de två studenterna återvänt från den frågan enligt följande:

SQLite-uppdatering

SQLite UPDATE Query används för att ändra befintliga poster i en tabell. Du kan använda WHERE-satsen med UPDATE-frågan för att uppdatera valda rader. UPDATE-klausulen uppdaterar en tabell genom att ändra ett värde för en viss kolumn. Följande är syntaxen för UPDATE-klausulen:

Enligt följande:

  • Efter "uppdateringsklausulen" bör du skriva tabellnamnet för att uppdatera.
  • Du måste skriva "SET-klausul" som används för att skriva kolumnnamnet som ska uppdateras och det värde 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 bara specificera vissa rader. Endast de rader som uttrycket utvärderar till sant uppdateras. Om du inte angav en WHERE-sats uppdateras alla rader.

Exempel på SQLite-uppdatering

I följande UPDATE-uttalande kommer vi att uppdatera DepartmentId för studenten med StudentId = 6 till 3:

UPPDATERA studenterSET DepartmentId = 3VAR StudentId = 6;

Detta ska köras framgångsrikt och du borde inte få någon utdata:

I UPDATE-klausulen specificerade vi att vi vill uppdatera tabellen Students.

  • I WHERE-paragrafen filtrerade vi alla elever för att bara välja raden för StudentId = 6.
  • SET-klausulen uppdaterar värdet på institutionens ID för de valda studenterna till att vara 3.

Låt oss nu verifiera att eleven med ID 6 är uppdaterad genom att köra följande kommando:

VÄLJ * FRÅN studenter VAR 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 radera de valda raderna.

DELETE-satsen har följande syntax:

  • Du måste skriva ett tabellnamn efter DELETE FROM-satsen, från vilken du vill ta bort poster. ( Obs: att DELETE-satsen 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. DROP-satsen används dock för att ta bort hela tabellen med alla poster på den. )
  • Om du skriver DELETE-satsen så här "DELETE FROM guru" kommer detta att ta bort alla poster från tabellen "guru".
  • Du kan ange ett WHERE-tillstånd med ett uttryck om du vill ta bort vissa specifika rader. Endast raderna för vilka uttrycket utvärderas till sant raderas. Till exempel "DELETE FROM guru WHERE id> 5" - detta tar bara bort de poster som har id som är större än 5.

Exempel

I följande uttalande tar vi bort två studenter med StudentId 11 och 12:

RADERA FRÅN Studenter VAR StudentId = 11 ELLER StudentId = 12;

Uttrycket " StudentId = 11 ELLER StudentId = 12 " gäller endast studenter med Id 11 och 12. Så DELETE-satsen används på båda och tar bara bort dem.

Det här kommandot ska köras framgångsrikt och du ska inte få någon utdata enligt följande:

Du kan verifiera att de två eleverna har tagits bort genom att välja alla poster i tabellen Students enligt följande:

VÄLJ * FRÅN studenter;

Du bör inte se de två eleverna med id 11 och 12 enligt följande:

SQLite Conflict Clause

Antag att du har en kolumn som har en av följande kolumnbegränsningar: UNIK, INTE NULL, KONTROLL eller PRIMÄR 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 duplikatvärde), vilket strider mot UNIQUE-begränsningen. Då låter CONFLICT-klausulen 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 KONFLIKTSKlausul löser konflikten. Du bör förstå vad som är en databastransaktion.

Databastransaktion:

Termen databastransaktion är en lista över SQLite-operationer (infoga eller uppdatera eller ta bort). Databasstransaktionen måste köras som en enhet, antingen alla operationer som utförts framgångsrikt eller inte alls. Alla åtgärder kommer att avbrytas om någon av dem misslyckades med att utföra.

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 på ett annat konto. Denna transaktion måste vara helt slutförd eller helt annullerad och inte misslyckas halvvägs.

Här är listan över fem resolutioner som du kan välja i CONFLICT-klausulen:

  1. ROLLBACK - detta rullar tillbaka transaktionen där det aktuella SQLite-uttalandet som har konflikten (det kommer att avbryta hela transaktionen). Till exempel, om du försöker uppdatera 10 rader och den femte raden har ett värde som strider mot en begränsning, kommer inga rader att uppdateras, de 10 raderna förblir desamma. Ett fel kommer att kastas.
  2. ABORT - detta avbryter (avbryter) det aktuella SQLite-uttalandet endast som har konflikten och transaktionen kommer inte att annulleras. Till exempel, om du försöker uppdatera 10 rader och den femte raden har ett värde som strider mot en begränsning, kommer endast det femte värdet inte att uppdateras utan de andra nio raderna kommer att uppdateras. Ett fel kommer att kastas.
  3. FAIL - avbryter det aktuella SQLite-uttalandet som har konflikten. Transaktionen fortsätter dock inte, men de tidigare ändringarna som gjordes i rader före raden som har konflikten kommer att göras. Till exempel, om du försöker uppdatera 10 rader och den femte raden har ett värde som strider mot en begränsning, kommer bara de fyra raderna att uppdateras och den andra inte. Ett fel kommer att kastas.
  1. IGNORE - detta hoppar över raden som innehåller begränsningen och fortsätter att bearbeta de andra följande raderna i SQLite-uttalandet. Till exempel, om du försöker uppdatera 10 rader och den femte raden har ett värde som strider mot en begränsning, kommer bara de fyra raderna att uppdateras och den andra inte. Det fortsätter inte längre med att uppdatera andra rader och stoppa vid raden som har konfliktvärdet. Inget fel kommer att kastas.
  1. Byt ut - det beror på vilken typ av begränsning som har överträdelsen:
  • När det finns en överträdelse av begränsningen för UNIQUE eller PRIMARY KEY-begränsningen. REPLACE ersätter raden som orsakar överträdelsen med den nya infogade eller uppdaterade raden.
  • När det inträffar en INTE NULL-överträdelse kommer ersättningen att ersätta NULL-värdet med standardvärdet i den kolumnen. Om kolumnen inte har ett standardvärde avbryter SQLite uttalandet (uttalandet kommer att avbrytas)
  • Om överträdelsen av CHECK-begränsningen inträffar kommer klausulen att avbrytas.

Obs! Ovanstående 5 resolutioner är alternativ för hur du vill lösa konflikten. Det kanske inte nödvändigtvis är vad som är tillämpligt för att lösa en konflikt som är tillämpligt för att lösa andra typer av konflikter.

Hur man deklarerar CONFLICT-klausulen

Du kan deklarera ON CONFLICT-satsen när du definierar en begränsning för en kolumndefinition inom CREATE TABLE-satsen. Med följande syntax:

Du kan välja en av de fem resolutionerna för att lösa konflikten som förklarats tidigare.

PÅ KONFLIK IGNORERA Exempel

Steg 1) Skapa ett nytt tabellämne enligt följande:

SKAPA TABELL [Ämnen] ([SubjectId] INTEGER INTE NULL PRIMÄR NYCKELNAD PÅ KONFLIK IGNORERA[Ämnesnamn] NVARCHAR INTE NULL); 

Observera att vi har definierat en PRIMÄR KEY-begränsning i kolumnen SubjectId. Den primära nyckelbegränsningen tillåter inte att två duplicerade värden infogas i kolumnen SubjectId 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 " IGNORE ".

Kommandot ska 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 detta INSERT-uttalande 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 bör inte få några fel. Enligt följande:

Steg 3) Välj alla ämnen från tabellen enligt följande:

VÄLJ * FRÅN ämnen;

Detta ger dig listan över ämnen:

Observera att endast tre ämnen infogades " Algebra, databaskurs och algoritmer " istället för 4 rader.

Raden som har värdet som bryter mot den primära nyckelbegränsningen, som är "Datastrukturer" ignorerades och infogades inte. SQLite fortsätter dock att köra andra uttalanden efter den raden.

Steg 4) RADERA 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 Ämnen; 

Drop-kommandot raderar hela tabellen. Tabellämnen finns nu inte.

OM UTBYTE AV KONFLIKT Exempel

Steg 1) Skapa ett nytt tabellämne enligt följande:

SKAPA TABELL [Ämnen] ([SubjectId] INTEGER INTE NULL PRIMÄR NYCKELTID FÖR ERSTATNING AV KONFLIK,[Ämnesnamn] NVARCHAR INTE NULL); 

Lägg märke till att vi definierade en PRIMÄR KEY-begränsning i kolumnen SubjectId. Den primära nyckelbegränsningen tillåter inte att två duplicerade värden infogas i kolumnen SubjectId så att alla värden i den kolumnen ska vara unika.

Lägg också märke till att vi väljer ett alternativ för konfliktlösning för att vara " ERSÄTT ". Kommandot ska 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 detta INSERT-uttalande 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 bör inte få några fel. Enligt följande:

Steg 3) Välj alla ämnen från tabellen enligt följande:

VÄLJ * FRÅN ämnen;

Detta ger dig listan över ämnen:

Lägg märke till att endast tre ämnen infördes " Algebra, datastrukturer och algoritmer " medan vi försökte infoga 4 rader.

Raden som har värdet som bryter mot den primära nyckelbegränsningen, som är " Datastrukturer " ersatte värdet " Databaskurs " enligt följande:

  • De första två infogningsuttalandena går 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 insatsen uttalande med SubjectId 2 och SubjectName " datastrukturer " finner det sig att det redan finns ett ämne med SubjectId = 2. Vilket är ett brott för den primära avgörande begränsning definieras på SubjectId kolumnen.
  • SQLite väljer en ersättningsupplösning för denna konflikt. Det ersätter det värde som redan finns i ämnestabellen med det nya värdet från insättningsuttalandet. Så, " Database Course kommer att" SubjectName ersätts med " datastrukturer " SubjectName.

Sammanfattning:

INSERT-, UPDATE- och DELETE-satser används för att modifiera data i SQLite-databasen. CONFLICT-klausulen är en kraftfull klausul för att lösa eventuella konflikter mellan data och data som ska ändras.