SQLite INSERT, UPDATE, SLETT Spørring med eksempel
Datamodifikasjonsklausulene i SQLite er INSERT-, UPDATE- og DELETE-setninger. Den brukes til å sette inn nye rader, oppdatere eksisterende verdier eller slette rader fra databasen.
Merk at for alle de følgende eksemplene må du kjøre sqlite3.exe og åpne en tilkobling til eksempeldatabasen som flytende:
Trinn 1) I dette trinnet
- Åpne Min datamaskin og naviger til følgende katalog "C:\sqlite"Og
- Åpne deretter "sqlite3.exe"
Trinn 2) Åpne databasen "TutorialsSampleDB.db" med følgende kommando:
.open TutorialsSampleDB.db
Nå er du klar til å kjøre alle typer spørringer på databasen.
SQLite INSERT
SQLite INSERT brukes til å sette inn poster i en spesifisert tabell i databasen. du må bruke 'INSERT'-klausulen. Syntaksen for INSERT-leddet er som følger:
- Etter INSERT-leddet bør du angi hvilken tabell du trenger å sette inn verdiene i.
- Etter tabellnavnet skriver du listen over kolonner, du vil sette inn verdiene i.
- Du kan ignorere kolonnenavnet og ikke skrive til dem.
- Hvis du ikke skriver kolonnenavnet, vil verdiene settes inn i alle kolonnene som finnes i tabellen med samme rekkefølge, kolonnene er definert i tabellen.
- Etter VALUES-leddet bør du liste verdiene som skal settes inn.
- Hver INSERT-klausul setter bare inn én rad. Hvis du vil sette inn flere rader, bør du skrive flere INSERT-klausuler, en for hver rad.
SQLite Sett inn eksempel
I følgende eksempel vil vi sette inn 2 rader i elevtabellen, en for hver 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');
Dette skal kjøres vellykket, og det er ingen utgang for dette:
Dette vil sette inn to studenter:
- Den første studenten med StudentId=11, StudentName = Ahmad, DepartmentId = 4 og DateOfBirth = 1997-10-12.
- Den andre studenten med StudentId=12, StudentName = Aly, DepartmentId = 4 og DateOfBirth = 1996-10-12′.
I den første setningen listet vi opp kolonnenavnene "StudentId, StudentName, DepartmentId, DateOfBirth«.I den andre uttalelsen gjorde vi det imidlertid ikke.
De fire verdiene "12, 'Aly', 4, '1996-10-12'” vil settes inn i alle de fire kolonnene i Studenttabellen i samme rekkefølge som kolonnene er definert.
La oss nå bekrefte at de to studentene ble satt inn i Studenter-tabellen ved å kjøre følgende spørring:
SELECT * FROM Students;
Da bør du se de to studentene som ble returnert fra den spørringen som følger:
SQLite Oppdater
SQLite UPDATE Query brukes til å endre de eksisterende postene i en tabell. Du kan bruke WHERE-klausulen med UPDATE-spørringen for å oppdatere valgte rader. UPDATE-leddet oppdaterer en tabell ved å endre en verdi for en bestemt kolonne. Følgende er syntaksen til UPDATE-klausulen:
Som følgende:
- Etter "oppdateringsklausulen" bør du skrive tabellnavnet for å oppdatere.
- Du må skrive "SET-klausul" som brukes til å skrive kolonnenavnet som skal oppdateres og verdien som skal oppdateres.
- Du kan oppdatere mer enn én kolonne. Du kan bruke komma mellom hver linje.
- Du kan spesifisere en WHERE-klausul for å spesifisere bare noen rader. Bare radene som uttrykket evaluerer til sanne, oppdateres. Hvis du ikke spesifiserte en WHERE-klausul, vil alle radene bli oppdatert.
SQLite Oppdateringseksempel
I den følgende UPDATE-setningen vil vi oppdatere avdelings-IDen for studenten med StudentId = 6 til 3:
UPDATE Students SET DepartmentId = 3 WHERE StudentId = 6;
Dette skal kjøre vellykket, og du skal ikke få noe utdata:
I UPDATE-klausulen spesifiserte vi at vi ønsker å oppdatere tabellen Studenter.
- I WHERE-leddet filtrerte vi alle elevene for å velge bare raden for StudentId = 6.
- SET-klausulen vil oppdatere verdien av avdelings-ID for de valgte studentene til 3.
La oss nå verifisere at studenten med ID 6 er oppdatert, ved å kjøre følgende kommando:
SELECT * FROM Students WHERE StudentId = 6;
Du skal nå se at avdelings-ID-verdien nå er 3 som følger:
SQLite Delete
SQLite DELETE-spørringen brukes til å fjerne eksisterende poster fra en spesifisert tabell. Du kan bruke WHERE-leddet med DELETE-spørringer for å slette de valgte radene.
DELETE-leddet har følgende syntaks:
- Du må skrive et tabellnavn etter DELETE FROM-leddet, som du ønsker å slette poster fra. (OBS: at SLETT-klausul brukes til å slette noen poster fra en tabell eller slette alle postene, og den vil ikke slette selve tabellen. Imidlertid DROP-klausul brukes til å slette hele tabellen med alle postene på den.)
- Hvis du skriver DELETE-klausulen slik "DELETE FROM guru", vil dette slette alle postene fra tabellen "guru".
- Du kan spesifisere en WHERE-betingelse med et uttrykk hvis du vil slette noen spesifikke rader. Bare radene som uttrykket evaluerer til sant vil bli slettet. For eksempel, "DELETE FROM guru WHERE id > 5" - dette vil slette bare postene som har id større enn 5.
Eksempel
I følgende uttalelse vil vi slette to studenter med StudentId 11 og 12:
DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;
Uttrykket "StudentId = 11 ELLER StudentId = 12” vil kun gjelde for studenter med ID 11 og 12. Så SLETT-klausulen vil bli brukt på begge og vil bare slette dem.
Denne kommandoen skal kjøre vellykket, og du skal ikke få noen utdata som følger:
Du kan bekrefte at de to studentene ble slettet ved å velge alle postene fra Elev-tabellen som følger:
SELECT * FROM Students;
Du bør ikke se de to elevene med ID 11 og 12 som følger:
SQLite Konfliktklausul
Anta at du har en kolonne som har en av følgende kolonnebegrensninger: UNIQUE, NOT NULL, CHECK eller PRIMARY KEY. Og så prøvde du å sette inn eller oppdatere en verdi på den kolonnen med en verdi som er i konflikt med denne begrensningen.
For eksempel, hvis en kolonne har en UNIQUE-begrensning og du prøvde å sette inn en verdi som allerede eksisterer (en duplikatverdi), som er i konflikt med UNIQUE-begrensningen. Deretter lar KONFLIKT-klausulen deg velge hva du skal gjøre i slike tilfeller for å løse denne konflikten.
Før vi fortsetter å forklare hvordan KONFLIKT-klausulen løser konflikten. Du bør forstå hva en databasetransaksjon er.
Databasetransaksjon
Begrepet databasetransaksjon er en liste over SQLite operasjoner (sett inn eller oppdater eller slett). Databasetransaksjonen må utføres som én enhet, enten alle operasjonene er utført vellykket eller ikke i det hele tatt. Alle operasjoner vil bli kansellert hvis en av dem ikke ble utført.
Eksempel på en databasetransaksjon
Transaksjonen for å overføre penger fra en bankkonto til en annen vil involvere et par aktiviteter. Denne transaksjonsoperasjonen inkluderer uttak av penger fra den første kontoen og innskudd på en annen konto. Denne transaksjonen må fullføres eller kanselleres fullstendig og ikke mislykkes halvveis.
Her er listen over fem oppløsninger du kan velge i KONFLIKT-klausulen:
- TILBAKE – dette vil rulle tilbake transaksjonen der gjeldende SQLite uttalelsen som har konflikten (den vil kansellere hele transaksjonen). For eksempel, hvis du prøver å oppdatere 10 rader, og den femte raden har en verdi som er i konflikt med en begrensning, vil ingen rader bli oppdatert, de 10 radene forblir de samme. En feil vil bli kastet.
- AVBRYTE – dette vil avbryte (avbryte) gjeldende SQLite kun erklæringen som har konflikten, og transaksjonen vil ikke bli kansellert. For eksempel, hvis du prøver å oppdatere 10 rader, og den femte raden har en verdi som er i konflikt med en begrensning, vil bare den femte verdien ikke bli oppdatert, men de andre 9 radene vil bli oppdatert. En feil vil bli kastet.
- FAIL – avbryter strømmen SQLite uttalelse som har konflikten. Transaksjonen vil imidlertid ikke fortsette, men de tidligere endringene som er gjort i rader før raden som har konflikten, vil bli utført. For eksempel, hvis du prøver å oppdatere 10 rader, og den femte raden har en verdi som er i konflikt med en begrensning, vil bare de 4 radene bli oppdatert og den andre ikke. En feil vil bli kastet.
- OVERSE – dette vil hoppe over raden som inneholder begrensningsbruddet og fortsette å behandle de andre påfølgende radene i SQLite uttalelse. For eksempel, hvis du prøver å oppdatere 10 rader, og den femte raden har en verdi som er i konflikt med en begrensning, vil bare de 4 radene bli oppdatert og den andre ikke. Det vil ikke fortsette å oppdatere andre rader og stoppe ved raden som har konfliktverdien. Ingen feil vil bli kastet.
- BYTT – det avhenger av typen begrensning som har bruddet:
- Når det er et begrensningsbrudd for UNIQUE eller PRIMÆR NØKKEL-begrensningen. REPLACE vil erstatte raden som forårsaker bruddet med den nye innsatte eller oppdaterte raden.
- Når det er et NOT NULL-begrensningsbrudd, vil REPLACE-leddet erstatte NULL-verdien med standardverdien for den kolonnen. Hvis kolonnen ikke har en standardverdi, da SQLite vil avbryte erklæringen (erklæringen vil bli kansellert)
- HVIS bruddet på CHECK-begrensningen oppstår, vil klausulen bli avbrutt.
OBS: De 5 vedtakene ovenfor er alternativer for hvordan du ønsker å løse konflikten. Det er kanskje ikke nødvendigvis det som er aktuelt for å løse en konflikt er aktuelt for å løse andre typer konflikter.
Hvordan erklære KONFLIKT-klausulen
Du kan erklære ON CONFLICT-leddet når du definerer en begrensning for en kolonnedefinisjon i CREATE TABLE-leddet. Bruker følgende syntaks:
Du kan velge en av de fem løsningene for å løse konflikten som forklart tidligere.
PÅ KONFLIKT IGNORER Eksempel
Trinn 1) Opprett et nytt tabellemne som følger:
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE, [SubjectName] NVARCHAR NOT NULL );
Legg merke til at vi har definert en PRIMÆR NØKKEL-begrensning på SubjectId-kolonnen. Primærnøkkelbegrensningen tillater ikke at to dupliserte verdier settes inn i SubjectId-kolonnen slik at alle verdiene i den kolonnen skal være unike. Legg også merke til at vi velger en konfliktløsning som "OVERSE".
Kommandoen skal kjøre vellykket, og du skal ikke få noen feil:
Trinn 2) La oss nå sette inn noen verdier i de nye tabellemnene, men med en verdi som bryter med primærnøkkelbegrensningen:
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 denne INSERT-setningen prøvde vi å sette inn to kurs med samme primærnøkkelemne-id 2, som er et brudd på primærnøkkelbegrensningen.
Kommandoene skal kjøre fint, og du skal ikke få noen feil. Som følgende:
Trinn 3) Velg alle emnene fra tabellen som følger:
SELECT * FROM Subjects;
Dette vil gi deg listen over emner:
Legg merke til at bare tre emner ble satt inn "Algebra, Databasekurs og Algorithms” i stedet for 4 rader.
Raden som har verdien som bryter primærnøkkelbegrensningen, som er "Datastrukturer", ble ignorert og ikke satt inn. Imidlertid SQLite fortsetter å kjøre andre setninger etter den raden.
Trinn 4) SLETT tabellemnene for å lage den igjen med en annen ON CONFLICT-klausul for følgende eksempel ved å kjøre følgende kommando:
DROP TABLE Subjects;
Drop-kommandoen sletter hele tabellen. Tabellemner eksisterer nå ikke.
PÅ KONFLIKT ERSTATT Eksempel
Trinn 1) Opprett et nytt tabellemne som følger:
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE, [SubjectName] NVARCHAR NOT NULL );
Legg merke til at vi definerte en PRIMÆR NØKKEL-begrensning på SubjectId-kolonnen. Primærnøkkelbegrensningen tillater ikke at to dupliserte verdier settes inn i SubjectId-kolonnen slik at alle verdiene i den kolonnen skal være unike.
Legg også merke til at vi velger et konfliktløsningsalternativ som "BYTT«. Kommandoen skal kjøre vellykket, og du skal ikke få noen feil:
Trinn 2) La oss nå sette inn noen verdier i den nye tabellen Emner, men med en verdi som bryter med primærnøkkelbegrensningen:
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 denne INSERT-setningen prøvde vi å sette inn to kurs med samme primærnøkkelemne-id 2, som er et brudd på primærnøkkelbegrensningen.
Kommandoene skal kjøre fint, og du skal ikke få noen feil. Som følgende:
Trinn 3) Velg alle emnene fra tabellen som følger:
SELECT * FROM Subjects;
Dette vil gi deg listen over emner:
Legg merke til at bare tre emner ble satt inn "Algebra, datastrukturer og Algorithms” mens vi prøvde å sette inn 4 rader.
Raden som har verdien som bryter primærnøkkelbegrensningen, som er "Datastrukturer" erstattet verdien "Database Course" som følgende:
- De to første insert-setningene fungerer fint uten problemer. To emner Algebra og Databasekurs vil bli satt inn med id 1, 2.
- Når SQLite prøver å kjøre den tredje insert-setningen med SubjectId 2 og SubjectName "Datastrukturer“, finner den ut at det allerede er et emne med SubjectId = 2. Noe som er et brudd på primærnøkkelbegrensningen som er definert i SubjectId-kolonnen.
- SQLite vil velge en ERSTATT-løsning for denne konflikten. Den erstatter verdien som allerede finnes i emnetabellen med den nye verdien fra insert-setningen. Så, "Database Course" Emnenavn vil bli erstattet med "Datastrukturer" Emnenavn.
Oppsummering
INSERT-, UPDATE- og DELETE-klausuler brukes til å endre dataene i SQLite database. KONFLIKT-klausulen er en kraftig klausul for å løse enhver konflikt mellom dataene og dataene som skal endres.