Andmete muutmise klauslid SQLite'is on INSERT, UPDATE ja DELETE laused. Seda kasutatakse uute ridade lisamiseks, olemasolevate väärtuste värskendamiseks või ridade kustutamiseks andmebaasist.
Selles õpetuses saate teada
- SISSE
- Uuenda
- Kustuta
- Konflikti klausel
Pange tähele, et kõigi järgmiste näidete puhul peate käivitama sqlite3.exe ja avama vooluühenduse näidisandmebaasiga:
1. samm) Selles etapis
- Avage Minu arvuti ja navigeerige järgmisse kataloogi " C: \ sqlite " ja
- Seejärel avage " sqlite3.exe ":
Samm 2) Avage järgmise käsuga andmebaas " TutorialsSampleDB.db ":
.avatud õpetusedSampleDB.db
Nüüd olete andmebaasis valmis käivitama mis tahes tüüpi päringuid.
SQLite INSERT
SQLite INSERT-i kasutatakse kirjete sisestamiseks andmebaasi täpsustatud tabelisse. peate kasutama klauslit INSERT. INSERT-klausli süntaks on järgmine:
- Pärast klauslit INSERT peaksite märkima, millisesse tabelisse peate väärtused sisestama.
- Pärast tabeli nime kirjutate veergude loendi, kuhu soovite väärtused sisestada.
- Võite veergude nime ignoreerida ja neile mitte kirjutada.
- Kui te veergude nime ei kirjuta, lisatakse väärtused kõigile tabelis leitud veergudele samas järjekorras, veerud on määratletud tabelis.
- Pärast klauslit VALUES peaksite lisama lisatavad väärtused.
- Iga INSERT-lause lisab ainult ühe rea. Kui soovite lisada mitu rida, peaksite kirjutama mitu sisestamisklauslit, ühe igale reale.
SQLite sisestamise näide
Järgmises näites lisame õpilaste tabelisse 2 rida, ühe iga õpilase kohta:
INSERT INTO õpilased (StudentId, StudentName, DepartmentId, DateOfBirth)VÄÄRTUSED (11, 'Ahmad', 4, '1997-10-12');INSERT INTO õpilaste väärtused (12, 'Aly', 4, '1996-10-12');
See peaks töötama edukalt ja selle jaoks pole väljundit:
See lisab kaks õpilast:
- Esimene õpilane, kellel on StudentId = 11, StudentName = Ahmad, DepartmentId = 4 ja DateOfBirth = 1997-10-12.
- Teine õpilane, kellel on StudentId = 12, StudentName = Aly, DepartmentId = 4 ja DateOfBirth = 1996-10-12 '.
Esimeses avalduses loetlesime veergude nimed " StudentId, StudentName, DepartmentId, DateOfBirth ". Kuid teises avalduses me seda ei teinud.
Neli väärtust " 12, 'Aly", 4,' 1996-10-12 " lisatakse õpilaste tabeli nelja veergu samas järjekorras nagu need veerud on määratletud.
Nüüd kontrollime, kas kaks õpilast sisestati õpilaste tabelisse, käivitades järgmise päringu:
VALI * Õpilaste seast;
Siis peaksite nägema, kuidas kaks õpilast naasevad selle päringu järgi järgmiselt:
SQLite värskendus
SQLite UPDATE Query kasutatakse tabelis olemasolevate kirjete muutmiseks. Valitud ridade värskendamiseks võite kasutada klauslit WHERE koos UPDATE päringuga. Klausel UPDATE värskendab tabelit, muutes konkreetse veeru väärtust. Järgmine on klausli UPDATE süntaks:
Järgmiselt:
- Pärast värskendusklauslit peaksite värskendamiseks kirjutama tabeli nime.
- Peate kirjutama "SET-klausli", mida kasutatakse värskendatava veeru nime ja värskendatava väärtuse kirjutamiseks.
- Saate värskendada mitut veergu. Iga rea vahel saate kasutada koma.
- Ainult mõne rea määramiseks võite määrata klausli WHERE. Värskendatakse ainult ridu, mille avaldis hindab tõeseks. Kui te ei määranud klauslit WHERE, värskendatakse kõiki ridu.
SQLite värskenduse näide
Järgmises avalduses UPDATE värskendame StudentId = 6 õpilase DepartmentId väärtuseks 3:
UUENDA õpilasiSET osakonna ID = 3KUS StudentId = 6;
See peaks töötama edukalt ja te ei tohiks saada väljundit:
Klauslis UPDATE täpsustasime, et tahame värskendada tabelit Õpilased.
- Klauslis WHERE filtreerisime kõik õpilased, et valida ainult StudentId = 6 rida.
- SET-klausel uuendab valitud üliõpilaste osakonna ID väärtuseks 3.
Nüüd kontrollime, kas õpilane, kellel on ID 6, on värskendatud, käivitades järgmise käsu:
VALI * õpilaste hulgast, kus StudentId = 6;
Nüüd peaksite nägema, et osakonna ID väärtus on nüüd järgmine:
SQLite Kustuta
SQLite DELETE päringut kasutatakse olemasolevate kirjete eemaldamiseks määratud tabelist. Valitud ridade kustutamiseks võite kasutada klauslit WHERE koos DELETE päringutega.
Klauselil DELETE on järgmine süntaks:
- Klausli DELETE FROM järele tuleb kirjutada tabeli nimi, kust soovite kirjeid kustutada. ( Märkus: et kustutada lõik kasutatakse kustutada mõned kirjed tabelist või kustutada kõik andmed ja see ei kustuta tabeli ise. Kuid DROP klausel kasutatakse kustutada kogu tabeli kõik dokumendid seda. )
- Kui kirjutate klausli DELETE nii nagu "DELETE FROM guru", kustutab see kõik kirjed tabelist "guru".
- Mõne konkreetse rea kustutamiseks võite avaldisega määrata tingimuse WHERE. Kustutatakse ainult read, mille puhul avaldise hinnang on tõene. Näiteks "DELETE FROM guru WHERE id> 5" - see kustutab ainult kirjed, mille ID on suurem kui 5.
Näide
Järgmises avalduses kustutame kaks õpilast, kellel on StudentId 11 ja 12:
KUSTUTA õpilastelt, kus StudentId = 11 VÕI StudentId = 12;
Väljend " StudentId = 11 VÕI StudentId = 12 " kehtib ainult õpilaste jaoks, kellel on ID-d 11 ja 12. Nii et mõlemale rakendatakse klauslit DELETE ja see kustutab ainult need.
See käsk peaks käivituma edukalt ja te ei tohiks saada järgmist väljundit:
Saate kontrollida, kas kaks õpilast on kustutatud, valides tabelist Õpilased kõik kirjed järgmiselt:
VALI * Õpilaste seast;
Te ei tohiks näha kahte õpilast, kellel on ID 11 ja 12, järgmiselt:
SQLite'i vastuoluklausel
Oletame, et teil on veerg, millel on üks järgmistest veerupiirangutest: UNIKAALNE, MITTE NULL, KONTROLLIGA või PÕHIVÕTI. Ja siis proovisite sellesse veergu lisada või värskendada väärtust väärtusega, mis on selle piiranguga vastuolus.
Näiteks kui veerul on unikaalne piirang ja proovisite lisada juba olemasoleva väärtuse (duplikaatväärtus), mis on vastuolus unikaalse piiranguga. Seejärel võimaldab klausel CONFLICT teil valida, mida sellistel juhtudel konflikti lahendamiseks teha.
Enne kui jätkame selle selgitamist, kuidas CONFLICT-klausel konflikti lahendab. Peaksite mõistma, mis on andmebaasi tehing.
Andmebaasi tehing:
Mõiste andmebaasi tehing on SQLite toimingute loend (sisestage või värskendage või kustutage). Andmebaasi tehing tuleb täita ühe üksusena, kas kõik toimingud on edukalt sooritatud või mitte. Kui üks neist ei õnnestunud, tühistatakse kõik toimingud.
Näide andmebaasi tehingu kohta:
Tehing raha ülekandmiseks ühelt pangakontolt teisele hõlmab paari tegevust. See tehing hõlmab raha väljavõtmist esimeselt kontolt ja selle teisele kontole kandmist. See tehing peab olema täielikult lõpule viidud või täielikult tühistatud ega tohi poolenisti nurjuda.
Siin on loetelu viiest resolutsioonist, mille saate valida klauslis CONFLICT:
- ROLLBACK - see tühistab tehingu, milles praegune SQLite-lause, millel on konflikt (see tühistab kogu tehingu). Näiteks kui proovite värskendada 10 rida ja viiendal real on piiranguga vastuolus olev väärtus, siis ühtegi rida ei värskendata, 10 rida jäävad samaks. Vise visatakse.
- ABORT - see katkestab (tühistab) ainult praeguse SQLite-lause, millel on konflikt ja tehingut ei tühistata. Näiteks kui proovite värskendada 10 rida ja viiendal real on piiranguga vastuolus olev väärtus, siis ainult viiendat väärtust ei värskendata, kuid ülejäänud 9 rida värskendatakse. Vise visatakse.
- FAIL - katkestab praeguse SQLite-lause, millel on konflikt. Tehing ei jätku, kuid eelmised reas tehtud muudatused, mis on tehtud enne konfliktset rida, tehakse. Näiteks kui proovite värskendada 10 rida ja viiendal real on piiranguga vastuolus olev väärtus, siis värskendatakse ainult 4 rida ja teist mitte. Vise visatakse.
- IGNORE - see jätab piirangurikkumist sisaldava rea vahele ja jätkab SQLite-lause teiste järgmiste ridade töötlemist. Näiteks kui proovite värskendada 10 rida ja viiendal real on piiranguga vastuolus olev väärtus, siis värskendatakse ainult 4 rida ja teist mitte. Teiste ridade värskendamiseks ja peatumiseks reas, millel on konflikti väärtus, ei jätkata. Viga ei visata.
- REPLACE - see sõltub rikkumise tüübi piirangust:
- Kui UNIKAALSE või PÕHIVÕTI piirangu rikkumine on piiratud. REPLACE asendab rikkumise põhjustanud rea uue sisestatud või värskendatud reaga.
- Piirangu EI NULL rikkumise korral asendab klausel REPLACE NULL väärtuse selle veeru vaikeväärtusega. Kui veerul pole vaikeväärtust, katkestab SQLite lause (lause tühistatakse)
- KUI KONTROLLI piirangu rikkumine katkestatakse klausel.
Märkus . Ülaltoodud viis lahendust on võimalused konflikti lahendamiseks. Ühe konflikti lahendamiseks ei pruugi olla tingimata kohaldatav muud tüüpi konfliktide lahendamine.
Kuidas deklareerida klauslit KONFLIKT
Võite kuulutada klausli ON CONFLICT, kui määrate klausli CREATE TABLE piires veerumääratluse. Kasutades järgmist süntaksit:
Konflikti lahendamiseks võite valida ühe viiest resolutsioonist, nagu eelnevalt selgitatud.
Näide vastuolulisest teadmisest
1. samm. Looge uus tabeli teema järgmiselt:
LOE TABEL [Teemad] ([SubjectId] INTEGRE MITTE NULL PRIMAARNE VÕTI KONFLIKTIDE IGNORE'IL,[SubjectName] NVARCHAR EI NULL);
Pange tähele, et oleme veerus SubjectId määranud PÕHIVÕTI piirangu. Esmane võtmepiirang ei luba veergu SubjectId sisestada kahte dubleeritud väärtust, nii et kõik selle veeru väärtused peaksid olema unikaalsed. Pange tähele ka seda, et valime konflikti lahenduseks IGNORE .
Käsk peaks töötama edukalt ja te ei tohiks saada vigu:
Samm 2) Nüüd lisame mõned väärtused uutesse tabeli teemadesse, kuid väärtusega, mis rikub peamise võtme piirangut:
INSERT INTO Subjects VALUES (1, 'Algebra');INSERT INTO Subjects VALUES (2, 'Andmekogukursus');INSERT INTO Subjects VALUES (2, 'Andmestruktuurid');INSERT INTO Subjects VALUES (4, 'Algoritmid');
Selles INSERT-i avalduses proovisime sisestada kaks kursust sama primaarvõtme teema ID-ga 2, mis on primaarvõtme piirangu rikkumine.
Käsud peaksid töötama hästi ja te ei tohiks vigu saada. Järgmiselt:
3. samm. Valige tabelist kõik teemad järgmiselt:
SELECT * FROM Subjektidest;
See annab teile ainete loendi:
Pange tähele, et 4 rea asemel lisati ainult kolm õppeainet " Algebra, andmebaasi kursus ja algoritmid ".
Rida, mille väärtus rikub peamise võtmepiirangut, nimelt „Andmestruktuurid”, ignoreeriti ja seda ei lisatud. SQLite jätkab aga pärast seda rida muude lausete täitmist.
Samm 4) Kustutage tabeli teemad, et luua järgmine näide uuesti uue klausliga ON CONFLICT, käivitades järgmise käsu:
DROP TABEL Ained;
Käsk tilk kustutab kogu tabeli. Tabeli teemasid pole nüüd olemas.
Konflikti asendamise näide
1. samm. Looge uus tabeli teema järgmiselt:
LOE TABEL [Teemad] ([SubjectId] INTEGRE NULL PRIMAARNE VÕTI KONFLIKTIDE ASENDAMISEKS,[SubjectName] NVARCHAR EI NULL);
Pange tähele, et veerus SubjectId määratlesime PRIMARY KEY piirangu. Esmane võtmepiirang ei luba veergu SubjectId sisestada kahte dubleeritud väärtust, nii et kõik selle veeru väärtused peaksid olema unikaalsed.
Pange tähele ka seda, et valime konfliktide lahendamise variandiks asenduse . Käsk peaks töötama edukalt ja te ei tohiks saada vigu:
Samm 2) Nüüd lisame mõned väärtused uude tabelisse Subjektid, kuid väärtusega, mis rikub peamise võtme piirangut:
INSERT INTO Subjects VALUES (1, 'Algebra');INSERT INTO Subjects VALUES (2, 'Andmekogukursus');INSERT INTO Subjects VALUES (2, 'Andmestruktuurid');INSERT INTO Subjects VALUES (4, 'Algoritmid');
Selles INSERT-i avalduses proovisime sisestada kaks kursust sama primaarvõtme teema ID-ga 2, mis on primaarvõtme piirangu rikkumine.
Käsud peaksid töötama hästi ja te ei tohiks vigu saada. Järgmiselt:
3. samm. Valige tabelist kõik teemad järgmiselt:
SELECT * FROM Subjektidest;
See annab teile ainete loendi:
Pange tähele, et ainult kolm uuritavat sisestati " Algebra, andmestruktuurid ja algoritmid ", samas kui proovisime sisestada 4 rida.
Rida, mille väärtus rikub peamise võtme piirangut, milleks on „ Andmekonstruktsioonid ”, asendas väärtuse „ Andmebaasi kursus ” järgmiselt:
- Esimesed kaks sisestuslauset töötavad ilma probleemideta. Kaks ainet Algebra ja andmebaasikursus lisatakse ID-dega 1, 2.
- Kui SQLite proovib käitada kolmandat sisestusväljendit subjektide ID 2 ja subjektinime " andmestruktuurid " abil, saab ta teada, et juba on subjekt subjektiga ID = 2, mis on veerus SubjectId määratletud esmase võtme piirangu rikkumine.
- SQLite valib selle konflikti jaoks lahenduse REPLACE. See asendab subjektitabelis juba eksisteeriva väärtuse insert-lause uue väärtusega. Niisiis, " Andmebaasi kursus " SubjectName asendatakse nimega " Data Structures ".
Kokkuvõte:
SQLite andmebaasi andmete muutmiseks kasutatakse klausleid INSERT, UPDATE ja DELETE. CONFLICT-klausel on võimas klausel andmete ja muudetavate andmete vaheliste konfliktide lahendamiseks.