Datamodifiseringsklausulene i SQLite er INSERT-, UPDATE- og DELETE-setninger. Den brukes til å sette inn nye rader, oppdatere eksisterende verdier eller slette rader fra databasen.
I denne veiledningen vil du lære-
- SETT INN
- Oppdater
- Slett
- Konfliktparagraf
Merk at for alle følgende eksempler må du kjøre sqlite3.exe og åpne en forbindelse 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:
.åpne TutorialsSampleDB.db
Nå er du klar til å kjøre alle typer spørsmål i databasen.
SQLite INSERT
SQLite INSERT brukes til å sette inn poster i en spesifisert tabell i databasen. du må bruke INSERT-klausulen. INSERT-leddens syntaks er som følger:
- Etter INSERT-setningen bør du oppgi hvilken tabell du trenger for å sette inn verdiene i.
- Etter tabellnavnet du skriver listen over kolonner, vil du sette inn verdiene i.
- Du kan ignorere kolonnenavnet og ikke skrive til dem.
- Hvis du ikke skriver kolonnenavnet, blir verdiene satt inn i alle kolonnene som finnes i tabellen i samme rekkefølge, kolonnene er definert i tabellen.
- Etter VALUES-setningen bør du liste opp verdiene som skal settes inn.
- Hver INSERT-ledd setter inn bare én rad. Hvis du vil sette inn flere rader, bør du skrive flere INSERT-ledd, en for hver rad.
Eksempel på SQLite Insert
I det følgende eksemplet vil vi sette inn 2 rader i studenttabellen, en for hver elev:
INSERT IN Students (StudentId, StudentName, DepartmentId, DateOfBirth)VERDIER (11, 'Ahmad', 4, '1997-10-12');INNFØR IN Studentene VERDIER (12, 'Aly', 4, '1996-10-12');
Dette skal kjøre vellykket, og det er ingen utdata 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 uttalelsen listet vi opp kolonnene " StudentId, StudentName, DepartmentId, DateOfBirth ". I den andre uttalelsen gjorde vi det ikke.
De fire verdiene " 12, 'Aly', 4, '1996-10-12' " vil bli satt 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 Students-tabellen ved å kjøre følgende spørsmål:
VELG * FRA studenter;
Deretter bør du se de to studentene som kom tilbake fra spørringen som følger:
SQLite-oppdatering
SQLite UPDATE Query brukes til å endre eksisterende poster i en tabell. Du kan bruke WHERE-setningen med UPDATE-spørring for å oppdatere valgte rader. UPDATE-setningen oppdaterer en tabell ved å endre en verdi for en bestemt kolonne. Følgende er syntaksen for UPDATE-setningen:
Som følger:
- Etter "oppdateringsklausulen", bør du skrive tabellnavnet du vil oppdatere.
- Du må skrive "SET-ledd" 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-ledd for å spesifisere bare noen rader. Bare radene som uttrykket vurderer til sant blir oppdatert. Hvis du ikke spesifiserte en WHERE-ledd, vil alle radene bli oppdatert.
Eksempel på SQLite-oppdatering
I følgende UPDATE-uttalelse vil vi oppdatere DepartmentId for Student med StudentId = 6 til å være 3:
OPPDATER studenterSET DepartmentId = 3HVOR StudentId = 6;
Dette skal kjøre vellykket, og du bør ikke få noen utdata:
I UPDATE-setningen spesifiserte vi at vi vil oppdatere tabellen Students.
- I WHERE-setningen filtrerte vi alle studentene for å velge bare raden for StudentId = 6.
- SET-setningen vil oppdatere verdien til avdelings-ID for de valgte studentene til å være 3.
La oss nå bekrefte at studenten med ID 6 er oppdatert, ved å kjøre følgende kommando:
VELG * FRA studenter der StudentId = 6;
Du bør nå se at avdelings-id-verdien nå er 3 som følger:
SQLite Slett
SQLite DELETE-spørring brukes til å fjerne eksisterende poster fra en spesifisert tabell. Du kan bruke WHERE-setningen med DELETE-spørsmål for å slette de valgte radene.
DELETE-setningen har følgende syntaks:
- Du må skrive et tabellnavn etter DELETE FROM-setningen, hvorfra du vil slette poster. ( Merk: at DELETE-leddet brukes til å slette noen poster fra en tabell eller slette alle poster, og det vil ikke slette selve tabellen. DROP-setningen brukes imidlertid til å slette hele tabellen med alle postene på den. )
- Hvis du skriver DELETE-setningen slik "SLETT FRA guru", vil dette slette alle postene fra tabellen "guru".
- Du kan spesifisere en WHERE-tilstand med et uttrykk hvis du vil slette noen spesifikke rader. Bare radene som uttrykket evalueres som sant vil bli slettet. For eksempel "SLETT FRA guru WHERE id> 5" - dette vil bare slette postene som har ID større enn 5.
Eksempel
I den følgende uttalelsen vil vi slette to studenter med StudentId 11 og 12:
SLETT FRA studenter der StudentId = 11 ELLER StudentId = 12;
Uttrykket " StudentId = 11 ELLER StudentId = 12 " vil være sant for bare studenter med Id 11 og 12. Så SLETT-klausulen blir brukt på begge og vil bare slette dem.
Denne kommandoen skal kjøre vellykket, og du bør ikke få noen utdata som følger:
Du kan bekrefte at de to studentene ble slettet, ved å velge alle postene fra studenttabellen som følger:
VELG * FRA studenter;
Du bør ikke se de to studentene med ID 11 og 12 som følger:
SQLite-konfliktklausul
Anta at du har en kolonne som har en av følgende kolonnebegrensninger: UNIK, IKKE NULL, KONTROLL eller PRIMÆR NØKKEL. Og så prøvde du å sette inn eller oppdatere en verdi i 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-klausul løser konflikten. Du bør forstå hva som er en databasetransaksjon.
Databasetransaksjon:
Begrepet databasetransaksjon er en liste over SQLite-operasjoner (sett inn eller oppdater eller slett). Databasetransaksjonen må utføres som en enhet, enten alle operasjonene er utført vellykket eller ikke i det hele tatt. Alle operasjoner vil bli kansellert hvis en av dem ikke klarte å utføre.
Eksempel på en databasetransaksjon:
Transaksjonen for overføring av penger fra en bankkonto til en annen vil innebære et par aktiviteter. Denne transaksjonsoperasjonen inkluderer uttak av penger fra den første kontoen, og innskudd på en annen konto. Denne transaksjonen må være fullført eller fullstendig kansellert og ikke mislykkes halvveis.
Her er listen over fem resolusjoner du kan velge i CONFLICT-paragrafen:
- ROLLBACK - dette vil rulle tilbake transaksjonen der den gjeldende SQLite-setningen som har konflikten (den vil avbryte 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 vil forbli de samme. En feil vil bli kastet.
- ABORT - dette vil avbryte (avbryte) den gjeldende SQLite-setningen bare 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 gjeldende SQLite-setning 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 begått. 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.
- IGNORE - dette vil hoppe over raden som inneholder begrensningsbrudd og fortsette å behandle de andre følgende radene i SQLite-setningen. 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 på raden som har konfliktverdien. Ingen feil vil bli kastet.
- ERSTATT - det avhenger av typen begrensning som har brudd:
- Når det er en begrensning for UNIQUE eller PRIMARY KEY-begrensningen. ERSTATT vil erstatte raden som forårsaker bruddet med den nye innsatte eller oppdaterte raden.
- Når det er et IKKE NULL-begrensningsbrudd, vil REPLACE-setningen erstatte NULL-verdien med standardverdien i den kolonnen. Hvis kolonnen ikke har en standardverdi, avbryter SQLite utsagnet (utsagnet blir kansellert)
- HVIS bruddet på CHECK-begrensningen oppstår, vil klausulen bli avbrutt.
Merk: Ovennevnte 5 oppløsninger er alternativer for hvordan du vil løse konflikten. Det kan ikke være nødvendigvis hva som er aktuelt for å løse en konflikt, som gjelder for å løse andre typer konflikter.
Hvordan erklære KONFLIKT-klausulen
Du kan deklarere ON CONFLICT-setningen når du definerer en begrensning for en kolonnedefinisjon i CREATE TABLE-setningen. Ved hjelp av 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:
OPPRETT TABELL [Emner] ([SubjectId] INTEGER IKKE NULL PRIMÆR NØKKEL PÅ KONFLIKT Ignorer,[SubjectName] NVARCHAR IKKE NULL);
Legg merke til at vi har definert en PRIMÆR Nøkkelbegrensning i SubjectId-kolonnen. Den primære nø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 for å være " IGNORE ".
Kommandoen skal kjøre vellykket, og du bør ikke få noen feil:
Trinn 2) La oss nå sette inn noen verdier i de nye tabellemnene, men med en verdi som bryter med den primære nøkkelbegrensningen:
INSERT INTO FAG VERDIER (1, 'Algebra');INSERT INTO FAGVERDIER (2, 'Database Course');INSERT INTO FAG VERDIER (2, 'Datastrukturer');INSERT INTO Subjects VALUES (4, 'Algorithms');
I denne INSERT-setningen prøvde vi å sette inn to kurs med samme primærnøkkelemne id 2, noe som er et brudd på den primære nøkkelbegrensningen.
Kommandoene skal gå bra, og du bør ikke få noen feil. Som følger:
Trinn 3) Velg alle emnene fra tabellen som følger:
VELG * FRA emner;
Dette vil gi deg listen over emner:
Legg merke til at bare tre fag ble satt inn " Algebra, Database Course, and Algorithms " i stedet for 4 rader.
Raden som har verdien som bryter med den primære nøkkelbegrensningen, som er "Datastrukturer" ble ignorert og ikke satt inn. Imidlertid fortsetter SQLite med å utføre andre utsagn etter den raden.
Trinn 4) SLETT tabellemnene for å lage det igjen med en annen ON CONFLICT-ledd for følgende eksempel ved å kjøre følgende kommando:
DROP TABLE Emner;
Slippkommandoen sletter hele tabellen. Tabellemner eksisterer nå ikke.
PÅ UTSKIFTNING AV KONFLIKT Eksempel
Trinn 1) Opprett et nytt tabellemne som følger:
OPPRETT TABELL [Emner] ([SubjectId] INTEGER IKKE NULL PRIMÆR NØKKEL PÅ UTBYTTING AV KONFLIKT,[SubjectName] NVARCHAR IKKE NULL);
Legg merke til at vi definerte en PRIMÆR Nøkkelbegrensning i SubjectId-kolonnen. Den primære nø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 alternativ for å løse konflikter for å være " ERSTAT ". Kommandoen skal kjøre vellykket, og du bør 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 den primære nøkkelbegrensningen:
INSERT INTO FAG VERDIER (1, 'Algebra');INSERT INTO FAGVERDIER (2, 'Database Course');INSERT INTO FAG VERDIER (2, 'Datastrukturer');INSERT INTO Subjects VALUES (4, 'Algorithms');
I denne INSERT-setningen prøvde vi å sette inn to kurs med samme primærnøkkelemne id 2, noe som er et brudd på den primære nøkkelbegrensningen.
Kommandoene skal gå bra, og du bør ikke få noen feil. Som følger:
Trinn 3) Velg alle emnene fra tabellen som følger:
VELG * FRA emner;
Dette vil gi deg listen over emner:
Legg merke til at bare tre fag ble satt inn " Algebra, datastrukturer og algoritmer " mens vi prøvde å sette inn 4 rader.
Raden som har verdien som bryter med den primære nøkkelbegrensningen, som er " Datastrukturer ", erstattet verdien " Databankurs " som følger:
- De to første innleggssetningene går bra uten problemer. To fag Algebra og Database Course blir satt inn med id 1, 2.
- Når SQLite prøver å kjøre den tredje sett-setningen med SubjectId 2 og SubjectName " Datastrukturer ", finner den ut at det allerede er et emne med SubjectId = 2. Hvilket er et brudd på den primære nøkkelbegrensningen definert i SubjectId-kolonnen.
- SQLite velger en ERSTATT-løsning for denne konflikten. Den erstatter verdien som allerede eksisterer i fagtabellen med den nye verdien fra sett-setningen. Så " Database Course " SubjectName vil bli erstattet med " Data Structures " SubjectName.
Sammendrag:
INSERT-, UPDATE- og DELETE-ledd brukes til å modifisere dataene i SQLite-databasen. CONFLICT-klausulen er en kraftig klausul for å løse eventuelle konflikter mellom dataene og dataene som skal endres.