SQLite INSERT, UPDATE, DELETE Fråga med exempel

Datamodifieringsklausulerna 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.

I denna handledning lär du dig-

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 Min dator och navigera till följande katalog ' C: sqlite 'och
  2. Öppna sedan ' sqlite3.exe ':

Steg 2) Öppna databasen ' TutorialsSampleDB.db 'med följande kommando: | _+_ |

Nu är du redo att köra vilken typ av fråga som helst i databasen.

SQLite INSERT

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

  • Efter INSERT -satsen ska du ange vilken tabell du behöver infoga värdena i.
  • Efter tabellnamnet du skriver listan över kolumner vill du infoga värdena i.
  • Du kan ignorera kolumnerna och inte skriva till dem.
  • Om du inte skriver kolumnerna infogas värdena i alla kolumner som finns i tabellen med samma ordning, kolumnerna definieras i tabellen.
  • Efter VALUES -klausulen bör du lista de värden som ska infogas.
  • Varje INSERT -sats sätter bara in 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: | _+_ |

Detta bör köras framgångsrikt och det finns ingen utdata för detta:

Detta kommer att infoga två studenter:

  • 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 inte det.

De fyra värdena 12, 'Aly', 4, '1996-10-12' 'kommer att infogas i alla fyra kolumnerna i studenttabellen i samma ordning som kolumnerna definieras.

Låt oss nu verifiera att de två eleverna sattes in i tabellen Studenter genom att köra följande fråga: | _+_ |

Då ska du se de två eleverna återvända 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 -satsen uppdaterar en tabell genom att ändra ett värde för en specifik kolumn. Följande är syntaxen för UPDATE -satsen:

Enligt 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 komma mellan varje rad.
  • Du kan ange en WHERE -sats för att bara ange några rader. Endast raderna som uttrycket utvärderar till sant uppdateras. Om du inte angav en WHERE -sats kommer alla rader att uppdateras.

Exempel på uppdatering av SQLite

I följande UPDATE -uttalande uppdaterar vi DepartmentId för studenten med StudentId = 6 till 3: | _+_ |

Detta bör köras framgångsrikt och du bör inte få någon utdata:

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

  • I WHERE -klausulen filtrerade vi alla studenter för att bara välja raden för StudentId = 6.
  • SET -klausulen uppdaterar värdet för avdelnings -ID för de utvalda studenterna till 3.

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

Du bör nu se att avdelnings -ID -värdet nu är 3 enligt följande:

Ta bort SQLite

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. ( Notera: Att den DELETE -klausul används för att ta bort vissa poster från en tabell eller ta bort alla poster och det tar inte bort själva tabellen. Men 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 ta bort alla poster från tabellen 'guru'.
  • Du kan ange ett WHERE -villkor med ett uttryck om du vill radera vissa specifika rader. Endast raderna för vilka uttrycket utvärderas till sant kommer att raderas. Till exempel 'DELETE FROM guru WHERE id> 5' - detta kommer bara att ta bort poster som har id större än 5.

Exempel

I följande uttalande kommer vi att ta bort två studenter med StudentId 11 och 12: | _+_ |

Uttrycket ' StudentId = 11 ELLER StudentId = 12 'kommer att gälla för endast elever med id 11 och 12. Så DELETE -satsen kommer att tillämpas på båda och kommer bara att ta bort dem.

Detta kommando ska köras framgångsrikt och du bör inte få någon utdata enligt följande:

Du kan verifiera att de två eleverna har raderats genom att välja alla poster från tabellen Elever enligt följande: | _+_ |

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

SQLite -konfliktklausul

Antag att du har en kolumn som har en av följande kolumnbegränsningar: UNIK, INTE NULL, KONTROLLERA, ELLER PRIMÄR NYCKEL. Och sedan försökte du infoga eller uppdatera ett värde på 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öker infoga ett värde som redan finns (ett duplicerat vä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 som är en databastransaktion.

Datatransaktion:

Termen databastransaktion är en lista över SQLite -operationer (infoga eller uppdatera eller ta bort). Datatransaktionen måste utföras som en enhet, antingen alla operationer som utförts framgångsrikt eller inte alls. Alla operationer kommer att avbrytas om en 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 innebära 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 genomförd eller helt avbruten och inte misslyckas halvvägs.

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

  1. RULLA TILLBAKA - detta kommer att rulla tillbaka transaktionen där den aktuella SQLite -satsen 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 strider mot en begränsning, kommer inga rader att uppdateras, de 10 raderna kommer att förbli desamma. Ett fel kommer att kastas.
  2. ABORT - detta avbryter (avbryter) endast den aktuella SQLite -satsen 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 strider mot en begränsning, kommer bara det femte värdet inte att uppdateras utan de andra nio raderna kommer att uppdateras. Ett fel kommer att kastas.
  3. FAIL - avbryter den aktuella SQLite -satsen som har konflikten. Transaktionen fortsätter dock inte, men de tidigare ändringarna som gjorts i raderna 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 strider mot en begränsning, kommer endast de fyra raderna att uppdateras och den andra inte. Ett fel kommer att kastas.
  1. IGNORERA - detta hoppar över raden som innehåller begränsningsöverträdelsen och fortsätter att bearbeta de andra följande raderna i SQLite -satsen. Om du till exempel försöker uppdatera 10 rader och den femte raden har ett värde som strider mot en begränsning, kommer endast de fyra raderna att uppdateras och den andra inte. Det går inte vidare för att uppdatera andra rader och stanna vid raden som har konfliktvärdet. Inget fel kommer att kastas.
  1. BYTA UT - det beror på vilken typ av begränsning som har överträdelsen:
  • När det finns en tvångsöverträdelse för den unika eller primära nyckeln. REPLACE ersätter raden som orsakar överträdelsen med den nya infogade eller uppdaterade raden.
  • När det finns en överträdelse av NOT NULL, ersätter klausulen REPLACE NULL -värdet med standardvärdet för den kolumnen. Om kolumnen inte har ett standardvärde avbryter SQLite påståendet (sats kommer att avbrytas)
  • OM CHECK -begränsningsöverträdelsen inträffar avbryts klausulen.

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

Hur deklareras 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 enligt förklaringen tidigare.

ON CONFLICT IGNORE Exempel

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

Lägg märke till att vi har definierat en PRIMARY KEY -begränsning i kolumnen SubjectId. Den primära nyckelbegränsningen tillåter inte att två dubblerade 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 att vara ' IGNORERA '.

Kommandot ska köras framgångsrikt och du ska 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 huvudnyckelbegränsningen: | _+_ |

I detta INSERT -uttalande försökte vi infoga två kurser med samma primära nyckelämne -id 2, vilket är en överträdelse för primärnyckelbegränsningen.

Kommandona ska fungera bra och du får inga fel. Enligt följande:

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

Detta ger dig en lista med ämnen:

Lägg märke till att endast tre ämnen infogades ' Algebra, databankurs och algoritmer 'istället för 4 rader.

Raden som har det värde 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: | _+_ |

Kommandot drop tar bort hela tabellen. Tabellämnen finns nu inte.

ON CONFLICT REPLACE Exempel

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

Lägg märke till att vi definierade en PRIMARY KEY -begränsning i kolumnen SubjectId. Den primära nyckelbegränsningen tillåter inte att två dubblerade 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 att vara ' BYTA UT '. Kommandot ska köras framgångsrikt och du ska 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 huvudnyckelbegränsningen: | _+_ |

I detta INSERT -uttalande försökte vi infoga två kurser med samma primära nyckelämne -id 2, vilket är en överträdelse för primärnyckelbegränsningen.

Kommandona ska fungera bra och du får inga fel. Enligt följande:

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

Detta ger dig en lista med ämnen:

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

Raden som har det värde som bryter mot den primära nyckelbegränsningen, som är ' Data struktur 'ersatte värdet' Datakurs ' enligt följande:

  • De två första insatserna går bra utan problem. Två ämnen Algebra och databankurs infogas med id 1, 2.
  • När SQLite försöker köra den tredje insert -satsen med SubjectId 2 och SubjectName ' Data struktur ', får den reda på att det redan finns ett ämne med SubjectId = 2. Vilket är ett brott mot den primära nyckelbegränsningen som definieras i kolumnen SubjectId.
  • SQLite väljer en REPLACE -lösning för denna konflikt. Det ersätter det värde som redan finns i ämnesbordet med det nya värdet från infogningssatsen. Så, ' Datakurs 'Ämnesnamn kommer att ersättas med' Data struktur 'Ämnesnamn.

Sammanfattning:

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