Klavzule o spreminjanju podatkov v SQLite so stavki INSERT, UPDATE in DELETE. Uporablja se za vstavljanje novih vrstic, posodabljanje obstoječih vrednosti ali brisanje vrstic iz baze podatkov.
V tej vadnici boste izvedeli-
- VSTAVI
- Nadgradnja
- Izbriši
- Klavzula o konfliktu
Za vse naslednje primere morate zagnati sqlite3.exe in odpreti povezavo do vzorčne baze podatkov kot tekočo:
Korak 1) V tem koraku
- Odprite Moj računalnik in se pomaknite do naslednjega imenika " C: \ sqlite " in
- Nato odprite " sqlite3.exe ":
Korak 2) Z naslednjim ukazom odprite bazo podatkov " TutorialsSampleDB.db ":
.open TutorialsSampleDB.db
Zdaj ste pripravljeni zagnati katero koli vrsto poizvedbe v zbirki podatkov.
SQLIT INSERT
SQLite INSERT se uporablja za vstavljanje zapisov v določeno tabelo baze podatkov. morate uporabiti stavek 'INSERT'. Sintaksa stavka INSERT je naslednja:
- Po stavku INSERT navedite, v katero tabelo morate vstaviti vrednosti.
- Po imenu tabele, v katero napišete seznam stolpcev, želite vrednosti vstaviti.
- Ime stolpca lahko prezrete in ne pišete vanj.
- Če ne napišete imena stolpcev, bodo vrednosti vstavljene v vse stolpce v tabeli z enakim vrstnim redom, stolpci pa so definirani v tabeli.
- Za stavkom VALUES morate navesti vrednosti, ki jih želite vstaviti.
- Vsak stavek INSERT vstavi samo eno vrstico. Če želite vstaviti več vrstic, morate napisati več stavkov INSERT, po enega za vsako vrstico.
Primer vstavitve SQLite
V naslednjem primeru bomo v tabelo študentov vstavili dve vrstici, po eno za vsakega študenta:
INSERT INTO Students (StudentId, StudentName, DepartmentId, DateOfBirth)VREDNOTE (11, 'Ahmad', 4, '1997-10-12');VSTAVITE V VREDNOTE študentov (12, 'Aly', 4, '1996-10-12');
To bi se moralo uspešno izvajati in za to ni izhoda:
To bo vstavilo dva študenta:
- Prvi študent s StudentId = 11, StudentName = Ahmad, DepartmentId = 4 in DateOfBirth = 1997-10-12.
- Drugi študent s StudentId = 12, StudentName = Aly, DepartmentId = 4 in DateOfBirth = 1996-10-12 '.
V prvi izjavi smo našteli imena stolpcev " StudentId, StudentName, DepartmentId, DateOfBirth ". V drugi izjavi pa nismo.
Štiri vrednosti " 12, 'Aly', 4, '1996-10-12' " bodo vstavljene v vse štiri stolpce tabele Študenti v enakem vrstnem redu, kot so določeni.
Zdaj pa preverimo, ali sta bila študenta vstavljena v tabelo Študenti, tako da zaženemo naslednjo poizvedbo:
IZBERI * IZ študentov;
Potem bi morali videti dva študenta, ki sta se vrnila iz te poizvedbe, kot sledi:
Posodobitev SQLite
SQLite UPDATE Query se uporablja za spreminjanje obstoječih zapisov v tabeli. Za posodobitev izbranih vrstic lahko uporabite stavek WHERE z poizvedbo UPDATE. Stavek UPDATE posodobi tabelo tako, da spremeni vrednost za določen stolpec. Sledi sintaksa stavka UPDATE:
Kot sledeče:
- Po "klavzuli o posodobitvi" morate napisati ime tabele, ki jo želite posodobiti.
- Napisati morate "klavzulo SET", ki se uporablja za zapis imena stolpca, ki ga želite posodobiti, in vrednosti, ki jo želite posodobiti.
- Lahko posodobite več kot en stolpec. Med vsako vrstico lahko uporabite vejico.
- Določite lahko stavek WHERE, da določite samo nekatere vrstice. Posodobijo se samo vrstice, ki jih izraz oceni kot true. Če niste določili stavka WHERE, bodo posodobljene vse vrstice.
Primer posodobitve SQLite
V naslednji izjavi UPDATE bomo posodobili DepartmentId za študenta s StudentId = 6 na 3:
UPDATE ŠtudentiSET DepartmentId = 3KJE StudentId = 6;
To bi se moralo uspešno izvajati in ne bi smeli dobiti nobenih izhodnih podatkov:
V stavku UPDATE smo določili, da želimo posodobiti tabelo Študenti.
- V stavku WHERE smo filtrirali vse študente, da smo izbrali samo vrstico za StudentId = 6.
- Klavzula SET bo posodobila vrednost ID oddelka za izbrane študente na 3.
Zdaj pa preverimo, ali je študent z ID 6 posodobljen, tako da zaženemo naslednji ukaz:
SELECT * FROM Students WHERE StudentId = 6;
Zdaj bi morali videti, da je vrednost Id oddelka zdaj 3, kot sledi:
SQLite Delete
Poizvedba SQLite DELETE se uporablja za odstranjevanje obstoječih zapisov iz določene tabele. Za brisanje izbranih vrstic lahko uporabite stavek WHERE z poizvedbami DELETE.
Stavek DELETE ima naslednjo sintakso:
- Za klavzulo DELETE FROM morate napisati ime tabele, iz katere želite izbrisati zapise. ( Opomba: da DELETE klavzula . Uporablja se izbrisati nekaj zapisov iz tabele ali izbrisati vse zapise in ne bo izbrisati tabelo sam pa je klavzula DROP se uporablja za brisanje celotno tabelo z vsemi zapisi o njem. )
- Če klavzulo DELETE napišete takole kot "DELETE FROM guru", boste s tem izbrisali vse zapise iz tabele "guru".
- Pogoj WHERE lahko podate z izrazom, če želite izbrisati nekatere določene vrstice. Izbrisane bodo samo vrstice, za katere izraz oceni kot true. Na primer, "IZbriši iz guruja WHERE id> 5" - to bo izbrisalo samo zapise, ki imajo id večji od 5.
Primer
V naslednji izjavi bomo izbrisali dva študenta s StudentId 11 in 12:
IZBRIŠI ŠTUDENTJE, KJER je StudentId = 11 ALI StudentId = 12;
Izraz " StudentId = 11 ALI StudentId = 12 " bo veljal samo za študente z ID-jema 11 in 12. Torej bo klavzula DELETE veljala za oba in jih bo samo izbrisala.
Ta ukaz bi se moral uspešno zagnati in ne bi smeli dobiti nobenega izpisa, kot sledi:
Če sta bila dva študenta izbrisana, lahko preverite tako, da v tabeli Študenti izberete vse zapise, kot sledi:
IZBERI * IZ študentov;
Dveh študentov z id 11 in 12 ne bi smeli videti na naslednji način:
Klavzula o konfliktu SQLite
Recimo, da imate stolpec, ki ima eno od naslednjih omejitev stolpca: UNIQUE, NOT NULL, CHECK ali PRIMARY KEY. Nato ste v ta stolpec poskušali vstaviti ali posodobiti vrednost z vrednostjo, ki je v nasprotju s to omejitvijo.
Če ima na primer stolpec omejitev UNIQUE in ste poskušali vstaviti vrednost, ki že obstaja (podvojena vrednost), kar je v nasprotju z omejitvijo UNIQUE. Potem vam klavzula CONFLICT omogoča, da izberete, kaj storiti v takih primerih, da rešite ta spor.
Preden nadaljujemo z razlago, kako klavzula CONFLICT rešuje spor. Morali bi razumeti, kaj je transakcija baze podatkov.
Transakcija zbirke podatkov:
Izraz transakcija baze podatkov je seznam operacij SQLite (vstavljanje, posodobitev ali brisanje). Transakcijo baze podatkov je treba izvesti kot eno enoto, bodisi vse operacije, ki so bile izvedene uspešno ali pa sploh ne. Vse operacije bodo preklicane, če ene od njih ni bilo mogoče izvesti.
Primer transakcije baze podatkov:
Transakcija za prenos denarja z enega bančnega računa na drugega bo vključevala nekaj dejavnosti. Ta transakcijska operacija vključuje dvig denarja s prvega računa in njegovo polaganje na drug račun. Ta transakcija mora biti v celoti zaključena ali v celoti preklicana in ne sme propasti na pol poti.
Tu je seznam petih ločljivosti, ki jih lahko izberete v klavzuli CONFLICT:
- ROLLBACK - to bo vrnilo transakcijo, v kateri je trenutni stavek SQLite, ki je v sporu (preklicalo bo celotno transakcijo). Če na primer poskušate posodobiti 10 vrstic in ima peta vrstica vrednost, ki je v navzkrižju z omejitvijo, potem nobena vrstica ne bo posodobljena, 10 vrstic ostane nespremenjenih. Izpisana bo napaka.
- PREKINI - s tem bo prekinjen (preklican) trenutni stavek SQLite samo s konfliktom in transakcija ne bo preklicana. Če na primer poskušate posodobiti 10 vrstic in ima peta vrstica vrednost, ki je v navzkrižju z omejitvijo, ne bo posodobljena samo peta vrednost, posodobljene pa bodo ostale 9 vrstic. Izpisana bo napaka.
- FAIL - prekine trenutni stavek SQLite, ki ima konflikt. Vendar se transakcija ne bo nadaljevala, bodo pa sprejete predhodne spremembe v vrsticah pred vrstico, v kateri je spor. Če na primer poskušate posodobiti 10 vrstic in ima peta vrstica vrednost, ki je v nasprotju z omejitvijo, bodo posodobljene samo 4 vrstice, druge pa ne. Izpisana bo napaka.
- IGNORE - s tem boste preskočili vrstico, ki vsebuje kršitev omejitve, in nadaljevali z obdelavo drugih naslednjih vrstic stavka SQLite. Če na primer poskušate posodobiti 10 vrstic in ima peta vrstica vrednost, ki je v nasprotju z omejitvijo, bodo posodobljene samo 4 vrstice, druge pa ne. Ne bo nadaljeval posodabljanja drugih vrstic in se ustavil pri vrstici, ki ima vrednost konflikta. Nobena napaka ne bo vržena.
- ZAMENJAJ - odvisno od vrste omejitve, ki ima kršitev:
- Ko gre za kršitev omejitve za UNIKATNO ali PRIMARNO KLJUČ. REPLACE bo vrstico, ki povzroči kršitev, zamenjal z novo vstavljeno ali posodobljeno vrstico.
- Ko pride do kršitve omejitve NOT NULL, bo stavek REPLACE zamenjal vrednost NULL s privzeto vrednostjo tega stolpca. Če stolpec nima privzete vrednosti, bo SQLite izjavo prekinil (stavek bo preklican)
- ČE pride do kršitve omejitve CHECK, bo klavzula prekinjena.
Opomba: Zgornjih 5 ločljivosti so možnosti, kako želite rešiti spor. Morda ni nujno, da se za reševanje enega konflikta uporablja za reševanje drugih vrst konfliktov.
Kako razglasiti klavzulo CONFLICT
Stavek ON CONFLICT lahko prijavite, ko definirate omejitev za definicijo stolpca v stavku CREATE TABLE. Uporaba naslednje sintakse:
Za rešitev spora lahko izberete eno izmed petih resolucij, kot je bilo že razloženo.
ON CONFLICT IGNORE Primer
Korak 1) Ustvarite novo temo tabele, kot sledi:
USTVARI TABELO [Predmeti] ([SubjectId] INTEGER NIŠČEN PRIMARNI KLJUČ NA KONFLIKTNO IGNORO,[SubjectName] NVARCHAR NOT NULL);
Upoštevajte, da smo v stolpcu SubjectId definirali omejitev PRIMARNI KLJUČ. Omejitev primarnega ključa ne dovoli vstavljanja dveh podvojenih vrednosti v stolpec SubjectId, tako da bi morale biti vse vrednosti v tem stolpcu enolične. Upoštevajte tudi, da smo za rešitev konflikta izbrali način " IGNORE ".
Ukaz bi se moral uspešno zagnati in ne sme priti do napak:
Korak 2) Zdaj vstavimo nekaj vrednosti v nove predmete tabele, vendar z vrednostjo, ki krši omejitev primarnega ključa:
INSERT INTO Subjects VALUES (1, 'Algebra');INSERT INTO Subjects VALUES (2, „Tečaj zbirke podatkov“);INSERT INTO Subjects VALUES (2, 'Data Structures');VSTAVITE V VREDNOTE predmetov (4, „Algoritmi“);
V to izjavo INSERT smo poskušali vstaviti dva tečaja z istim predmetom primarnega ključa id 2, kar je kršitev omejitve primarnega ključa.
Ukazi naj se dobro izvajajo in ne smete imeti napak. Kot sledeče:
Korak 3) Iz tabele izberite vse predmete, kot sledi:
SELECT * FROM Subjects;
Tako boste dobili seznam predmetov:
Upoštevajte, da so bili namesto 4 vrstic vstavljeni le trije predmeti » Algebra, tečaj zbirke podatkov in algoritmi «.
Vrstica z vrednostjo, ki krši omejitev primarnega ključa, to je "Podatkovne strukture", je bila prezrta in ni bila vstavljena. Vendar SQLite nadaljuje z izvajanjem drugih stavkov po tej vrstici.
Korak 4) IZBRIŠI predmete tabele, da jih znova ustvarite z drugim stavkom ON CONFLICT za naslednji primer, tako da zaženete naslednji ukaz:
DROP TABLE Predmeti;
Spustni ukaz izbriše celotno tabelo. Predmeti tabele zdaj ne obstajajo.
O ZAMENITVI KONFLIKTA Primer
Korak 1) Ustvarite novo temo tabele, kot sledi:
USTVARI TABELO [Predmeti] ([SubjectId] INTEGER NIŠČEN PRIMARNI KLJUČ O ZAMENITVI KONFLIKTA,[SubjectName] NVARCHAR NOT NULL);
Opazite, da smo v stolpcu SubjectId definirali omejitev PRIMARNI KLJUČ. Omejitev primarnega ključa ne dovoli vstavljanja dveh podvojenih vrednosti v stolpec SubjectId, tako da bi morale biti vse vrednosti v tem stolpcu enolične.
Upoštevajte tudi, da izberemo možnost reševanja sporov kot » ZAMENJAJ «. Ukaz bi se moral uspešno zagnati in ne sme priti do napak:
Korak 2) V nove predmete tabele vstavimo nekaj vrednosti, vendar z vrednostjo, ki krši omejitev primarnega ključa:
INSERT INTO Subjects VALUES (1, 'Algebra');INSERT INTO Subjects VALUES (2, „Tečaj zbirke podatkov“);INSERT INTO Subjects VALUES (2, 'Data Structures');VSTAVITE V VREDNOTE predmetov (4, „Algoritmi“);
V to izjavo INSERT smo poskušali vstaviti dva tečaja z istim predmetom primarnega ključa id 2, kar je kršitev omejitve primarnega ključa.
Ukazi naj se dobro izvajajo in ne smete imeti napak. Kot sledeče:
Korak 3) Iz tabele izberite vse predmete, kot sledi:
SELECT * FROM Subjects;
Tako boste dobili seznam predmetov:
Upoštevajte, da so bili vstavljeni samo trije predmeti " Algebra, podatkovne strukture in algoritmi ", medtem ko smo poskušali vstaviti 4 vrstice.
Vrstica z vrednostjo, ki krši omejitev primarnega ključa, to je " Podatkovne strukture ", je nadomestila vrednost " Tečaj baze podatkov ", kot sledi:
- Prva dva stavka vstavka delujeta brez težav. Dva predmeta Algebra in tečaj zbirke podatkov bosta dodana z id 1, 2.
- Ko SQLite poskuša zagnati tretji stavek za vstavljanje s SubjectId 2 in SubjectName " Data Structures ", ugotovi, da že obstaja subjekt s SubjectId = 2. Kar je kršitev omejitve primarnega ključa, definirane v stolpcu SubjectId.
- SQLite bo izbral rešitev REPLACE za ta spor. Vrednost, ki že obstaja v tabeli predmetov, nadomesti z novo vrednostjo iz stavka insert. Torej, " Predmet baze podatkov " SubjectName bo nadomeščen z " Data Strukture " SubjectName.
Povzetek:
Stavki INSERT, UPDATE in DELETE se uporabljajo za spreminjanje podatkov v zbirki podatkov SQLite. Klavzula CONFLICT je močna klavzula za reševanje morebitnih sporov med podatki in podatki, ki jih je treba spremeniti.