SQLite SISESTAMINE, VÄRSKENDAMINE, KUSTUTAMINE Päring näitega

Andmete muutmise klauslid SQLite on INSERT, UPDATE ja DELETE avaldused. Seda kasutatakse uute ridade sisestamiseks, olemasolevate väärtuste värskendamiseks või ridade andmebaasist kustutamiseks.

Pange tähele, et kõigi järgmiste näidete puhul peate käivitama faili sqlite3.exe ja avama ühenduse näidisandmebaasiga voolavana:

Step 1) Selles sammus

  1. Avage Minu arvuti ja liikuge järgmisse kataloogi "C:\sqlite"Ja
  2. Seejärel avage "sqlite3.exe"

SQLite Päring – LISA, VÄRSKENDA, KUSTUTA

Step 2) Ava andmebaas "TutorialsSampleDB.db” järgmise käsuga:

.open TutorialsSampleDB.db

SQLite Päring – LISA, VÄRSKENDA, KUSTUTA

Nüüd olete valmis käivitama andmebaasis mis tahes tüüpi päringuid.

SQLite INSERT

SQLite INSERT kasutatakse kirjete sisestamiseks andmebaasi määratud tabelisse. peate kasutama klauslit "INSERT". INSERT-klausli süntaks on järgmine:

SQLite INSERT

  • Pärast INSERT-klauslit peaksite märkima, millisesse tabelisse peate väärtused sisestama.
  • Pärast tabeli nime, millesse kirjutate veergude loendi, soovite väärtused sisestada.
  • Võite veergude nimesid ignoreerida ja mitte neile kirjutada.
  • Kui veergude nime ei kirjuta, lisatakse väärtused kõikidesse tabelist leitud veergudesse samas järjekorras, veerud on tabelis määratletud.
  • Pärast klauslit VALUES peaksite loetlema lisatavad väärtused.
  • Iga INSERT-klausel lisab ainult ühe rea. Kui soovite lisada mitu rida, peaksite kirjutama mitu INSERT-klauslit, üks iga rea ​​jaoks.

SQLite Sisesta näide

Järgmises näites lisame õpilaste tabelisse 2 rida, üks iga õpilase kohta:

INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth)
              VALUES(11, 'Ahmad', 4, '1997-10-12');

INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');

See peaks edukalt töötama ja selle jaoks pole väljundit:

SQLite Sisesta

See lisab kaks õpilast:

  • Esimene õpilane, kelle StudentId = 11, StudentName = Ahmad, DepartmentId = 4 ja DateOf Birth = 1997-10-12.
  • Teine õpilane StudentId=12, StudentName = Aly, DepartmentId = 4 ja DateOfBirth = 1996-10-12′.

Esimeses avalduses loetlesime veergude nimed "StudentId, StudentName, DepartmentId, DateOfBirth“.Teises avalduses me aga mitte.

Neli väärtust "12, "Aly", 4, "1996-10-12"” lisatakse tabeli Õpilased kõigisse nelja veergu veergude määratlemise järjekorras.

Nüüd kontrollime, kas kaks õpilast lisati õpilaste tabelisse, käivitades järgmise päringu:

SELECT * FROM Students;

Seejärel peaksite nägema, et kaks õpilast on päringust tagasi tulnud järgmiselt:

SQLite Sisesta

SQLite Värskendused

SQLite UPDATE päringut kasutatakse tabelis olemasolevate kirjete muutmiseks. Valitud ridade värskendamiseks saate päringuga UPDATE kasutada klauslit WHERE. Klausel UPDATE värskendab tabelit, muutes konkreetse veeru väärtust. Järgmine on klausli UPDATE süntaks:

SQLite Värskendused

järgmiselt:

  • Pärast uuendusklauslit peaksite kirjutama värskendatava tabeli nime.
  • Peate kirjutama "SET-klausli", mida kasutatakse värskendatava veeru nime ja värskendatava väärtuse kirjutamiseks.
  • Saate värskendada rohkem kui ühte veergu. Iga rea ​​vahel võite kasutada koma.
  • Ainult mõne rea määramiseks saate määrata WHERE-klausli. Värskendatakse ainult neid ridu, mille avaldis hindab tõeseks. Kui te ei määranud WHERE-klauslit, värskendatakse kõiki ridu.

SQLite Värskenduse näide

Järgmises UPDATE avalduses värskendame õpilase ID = 6 osakonna ID väärtuseks 3:

UPDATE Students
SET DepartmentId = 3 
WHERE StudentId = 6;

See peaks töötama edukalt ja te ei tohiks saada väljundit:

SQLite Värskendused

UPDATE klauslis täpsustasime, et soovime uuendada tabelit Õpilased.

  • WHERE-klauslis filtreerisime kõik õpilased, et valida ainult rida StudentId = 6.
  • SET-klausel värskendab valitud üliõpilaste osakonna ID väärtuseks 3.

Nüüd kontrollime, kas ID 6-ga õpilast on värskendatud, käivitades järgmise käsu:

SELECT * FROM Students WHERE StudentId = 6;

Nüüd peaksite nägema, et osakonna ID väärtus on nüüd 3 järgmiselt:

SQLite Värskendused

SQLite kustutama

SQLite DELETE päringut kasutatakse olemasolevate kirjete eemaldamiseks määratud tabelist. Valitud ridade kustutamiseks saate kasutada DELETE-päringutega klauslit WHERE.

DELETE-klauslil on järgmine süntaks:

SQLite kustutama

  • DELETE FROM-klausli järele tuleb kirjutada tabeli nimi, millest soovid kirjeid kustutada. (Märge: et DELETE klausel kasutatakse mõne kirje kustutamiseks tabelist või kõigi kirjete kustutamiseks ja tabelit ennast see ei kustuta. Siiski, DROP klausel kasutatakse kogu tabeli kustutamiseks koos kõigi sellel olevate kirjetega.)
  • Kui kirjutate DELETE-klausli niimoodi "DELETE FROM guru", kustutab see kõik kirjed tabelist "guru".
  • Kui soovite kustutada mõned konkreetsed read, saate avaldisega määrata tingimuse WHERE. Kustutatakse ainult need read, mille puhul avaldis hindab tõeseks. Näiteks “DELETE FROM guru WHERE id > 5” – see kustutab ainult need kirjed, mille ID on suurem kui 5.

Näide

Järgmises avalduses kustutame kaks üliõpilast, kelle ID-d on 11 ja 12:

DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;

Väljend „StudentId = 11 VÕI StudentId = 12” kehtib ainult õpilastele, kelle ID-d on 11 ja 12. Seega rakendatakse klausel DELETE mõlemale ja kustutab ainult need.

See käsk peaks töötama edukalt ja te ei tohiks saada järgmist väljundit:

SQLite kustutama

Saate kontrollida, kas kaks õpilast on kustutatud, valides tabelist Õpilased kõik kirjed järgmiselt.

SELECT * FROM Students;

Te ei peaks nägema kahte õpilast ID-ga 11 ja 12 järgmiselt:

SQLite kustutama

SQLite Konfliktiklausel

Oletame, et teil on veerg, millel on üks järgmistest veerupiirangutest: UNIQUE, NOT NULL, CHECK või PRIMARY KEY. Seejärel proovisite sisestada või värskendada sellesse veergu väärtust väärtusega, mis on selle piiranguga vastuolus.

Näiteks kui veerus on UNIKALNE piirang ja proovisite sisestada väärtust, mis on juba olemas (duplikaatväärtus), mis on vastuolus UNIQUE piiranguga. Seejärel võimaldab CONFLICT klausel valida, mida sellistel juhtudel konflikti lahendamiseks teha.

Enne kui jätkame selgitamist, kuidas CONFLICT klausel konflikti lahendab. Peaksite mõistma, mis on andmebaasi tehing.

Andmebaasi tehing

Mõiste andmebaasi tehing on loend SQLite toimingud (sisestage või värskendage või kustutage). Andmebaasi tehing tuleb täita ühe üksusena, kas kõik toimingud on edukalt täidetud või üldse mitte. Kõik toimingud tühistatakse, kui üks neist ei õnnestunud.

Näide andmebaasi tehingu kohta

Tehing raha ülekandmiseks ühelt pangakontolt teisele hõlmab paari tegevust. See tehingutoiming hõlmab raha väljavõtmist esimeselt kontolt ja deponeerimist teisele kontole. See tehing peab olema täielikult lõpetatud või täielikult tühistatud ja mitte poolel teel ebaõnnestuma.

Siin on nimekiri viiest resolutsioonist, mille saate CONFLICT-klauslis valida:

  1. TAGASI – see tühistab tehingu, milles praegune SQLite avaldus, milles on vastuolu (see tühistab kogu tehingu). Näiteks kui proovite värskendada 10 rida ja viiendal real on väärtus, mis on piiranguga vastuolus, siis ühtegi rida ei värskendata, 10 rida jäävad samaks. Ilmub viga.
  2. ABORT – see katkestab (tühistab) voolu SQLite avaldus ainult selles, kus on vastuolu ja tehingut ei tühistata. Näiteks kui proovite värskendada 10 rida ja viiendal real on väärtus, mis on piiranguga vastuolus, siis ainult viiendat väärtust ei värskendata, vaid ülejäänud 9 rida. Ilmub viga.
  3. EBAÕNNESTUS – katkestab voolu SQLite avaldus, milles on konflikt. Tehing siiski ei jätku, kuid konflikti sisaldavale reale eelnevate ridade varasemad muudatused rakendatakse. Näiteks kui proovite värskendada 10 rida ja viiendal real on väärtus, mis on piiranguga vastuolus, värskendatakse ainult 4 rida ja teist mitte. Ilmub viga.
  1. SÜNDMUS – see jätab piirangu rikkumist sisaldava rea ​​vahele ja jätkab järgmiste ridade töötlemist SQLite avaldus. Näiteks kui proovite värskendada 10 rida ja viiendal real on väärtus, mis on piiranguga vastuolus, värskendatakse ainult 4 rida ja teist mitte. See ei jätka teiste ridade värskendamist ja peatub konfliktiväärtusega rea ​​juures. Viga ei ilmu.
  1. VAHETADA – see sõltub rikkumisega seotud piirangu tüübist:
  • Kui piirangu UNIQUE või PRIMARY KEY puhul esineb piirangu rikkumine. REPLACE asendab rikkumise põhjustanud rea uue sisestatud või värskendatud reaga.
  • Kui esineb piirangu NOT NULL rikkumine, asendab klausel REPLACE NULL väärtuse selle veeru vaikeväärtusega. Kui veerus ei ole vaikeväärtust, siis SQLite katkestab avalduse (väljavõte tühistatakse)
  • KUI KONTROLLI piirangu rikkumine toimub, katkestatakse klausel.

Märge: Ülaltoodud 5 lahendust on võimalused konflikti lahendamiseks. See, mis on kohaldatav ühe konflikti lahendamiseks, ei pruugi tingimata kehtida teist tüüpi konfliktide lahendamiseks.

Kuidas deklareerida KONFLIKTI klauslit

Saate deklareerida klausli ON CONFLICT, kui määrate veerumääratlusele piirangu klauslis CREATE TABLE. Kasutades järgmist süntaksit:

SQLite Konfliktiklausel

Saate valida viie lahenduse hulgast ühe konflikti lahendamiseks, nagu eespool selgitatud.

KONFLIKTI IGNOREERIMISEL Näide

Step 1) Looge uus tabeli teema järgmiselt:

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE,
    [SubjectName] NVARCHAR NOT NULL
);

Pange tähele, et oleme veerus SubjectId määratlenud piirangu PRIMARY KEY. Primaarvõtme piirang ei luba veergu SubjectId sisestada kahte dubleeritud väärtust, nii et kõik selles veerus olevad väärtused peaksid olema kordumatud. Samuti pange tähele, et me valime konflikti lahendamiseks "SÜNDMUS".

Käsk peaks edukalt töötama ja te ei tohiks saada ühtegi viga:

KONFLIKTI IGNOREERIMISEL Näide

Step 2) Nüüd lisame mõned väärtused uutesse tabeliobjektidesse, kuid väärtusega, mis rikub primaarvõtme piirangut:

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');

Sellesse INSERT-lausesse proovisime sisestada kahte sama primaarvõtme subjekti ID 2-ga kursust, mis on primaarvõtme piirangu rikkumine.

Käsud peaksid töötama hästi ja te ei tohiks vigu saada. järgmiselt:

KONFLIKTI IGNOREERIMISEL Näide

Step 3) Valige tabelist kõik teemad järgmiselt:

SELECT * FROM Subjects;

See annab teile teemade loendi:

KONFLIKTI IGNOREERIMISEL Näide

Pange tähele, et sisestati ainult kolm subjektiAlgebra, andmebaasikursus ja Algorithms” 4 rea asemel.

Rida, mille väärtus rikub primaarvõtme piirangut, milleks on „Andmestruktuurid”, ignoreeriti ja seda ei sisestatud. Siiski SQLite jätkab pärast seda rida muude lausete täitmist.

Step 4) KUSTUTAGE tabeli teemad, et luua see uuesti erineva ON CONFLICT klausliga järgmise näite jaoks, käivitades järgmise käsu:

DROP TABLE Subjects;

Drop-käsk kustutab kogu tabeli. Tabeliteemasid pole praegu olemas.

ON KONFLIKTI ASENDAMINE Näide

Step 1) Looge uus tabeli teema järgmiselt:

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE,
    [SubjectName] NVARCHAR NOT NULL
);

Pange tähele, et määratlesime veerus SubjectId piirangu PRIMARY KEY. Primaarvõtme piirang ei luba veergu SubjectId sisestada kahte dubleeritud väärtust, nii et kõik selles veerus olevad väärtused peaksid olema kordumatud.

Samuti pange tähele, et valime konfliktide lahendamise valikuks "VAHETADA“. Käsk peaks edukalt töötama ja te ei tohiks saada ühtegi viga:

ON KONFLIKTI ASENDAMINE Näide

Step 2) Nüüd lisame mõned väärtused uude tabelisse Subjects, kuid väärtusega, mis rikub primaarvõtme piirangut:

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');

Sellesse INSERT-lausesse proovisime sisestada kahte sama primaarvõtme subjekti ID 2-ga kursust, mis on primaarvõtme piirangu rikkumine.

Käsud peaksid töötama hästi ja te ei tohiks vigu saada. järgmiselt:

ON KONFLIKTI ASENDAMINE Näide

Step 3) Valige tabelist kõik teemad järgmiselt:

SELECT * FROM Subjects;

See annab teile teemade loendi:

ON KONFLIKTI ASENDAMINE Näide

Pange tähele, et sisestati ainult kolm subjektiAlgebra, andmestruktuurid ja Algorithms”, samas kui proovisime sisestada 4 rida.

Rida, mille väärtus rikub primaarvõtme piirangut, mis on "Andmestruktuurid" asendas väärtuse "Andmebaasi kursus” järgmiselt:

  • Esimesed kaks lisamislauset töötavad hästi ja ilma probleemideta. Kaks õppeainet, algebra ja andmebaasikursus, lisatakse ID-dega 1, 2.
  • Kui SQLite proovib käivitada kolmandat lisalauset SubjectId 2 ja SubjectName "Andmestruktuurid“, avastab see, et subjekt, mille SubjectId = 2, on juba olemas. See on veerus SubjectId määratletud primaarvõtme piirangu rikkumine.
  • SQLite valib sellele konfliktile lahenduse ASENDA. See asendab teemade tabelis juba olemasoleva väärtuse lisalause uue väärtusega. Niisiis, "Andmebaasi kursus"Teema nimi asendatakse tekstiga "Andmestruktuurid”Teema nimi.

kokkuvõte

INSERT, UPDATE ja DELETE klausleid kasutatakse andmete muutmiseks failis SQLite andmebaas. Klausel CONFLICT on võimas klausel andmete ja muudetavate andmete vahelise konflikti lahendamiseks.