Duomenų modifikavimo sąlygos SQLite yra INSERT, UPDATE ir DELETE sakiniai. Jis naudojamas įterpiant naujas eilutes, atnaujinant esamas reikšmes arba ištrinant eilutes iš duomenų bazės.
Šioje pamokoje sužinosite
- ĮDĖTI
- Atnaujinti
- Ištrinti
- Konflikto išlyga
Atminkite, kad visų šių pavyzdžių atveju turite paleisti sqlite3.exe ir atidaryti ryšį su pavyzdine duomenų baze:
1 žingsnis) Šiame žingsnyje
- Atidarykite „Mano kompiuteris“ ir eikite į šį katalogą „ C: \ sqlite “ ir
- Tada atidarykite „ sqlite3.exe “:
2 žingsnis. Atidarykite duomenų bazę „ TutorialsSampleDB.db “ atlikdami šią komandą:
. atidarykite mokymo programasSampleDB.db
Dabar esate pasirengę vykdyti bet kokio tipo užklausas duomenų bazėje.
SQLite ĮDĖTI
SQLite INSERT naudojamas įrašams įterpti į nurodytą duomenų bazės lentelę. turite naudoti sąlygą „INSERT“. Sąlygos INSERT sintaksė yra tokia:
- Po sąlyga INSERT turėtumėte nurodyti, į kurią lentelę turite įterpti reikšmes.
- Po lentelės pavadinimo rašote stulpelių sąrašą, į kurį norite įterpti reikšmes.
- Galite nepaisyti stulpelių pavadinimo ir nerašyti jiems.
- Jei nerašysite stulpelių pavadinimo, reikšmės bus įterptos į visus lentelėje esančius stulpelius ta pačia tvarka, stulpeliai apibrėžti lentelėje.
- Po sąlyga VALUES turėtumėte išvardyti įterptinas vertes.
- Kiekviena INSERT sąlyga įterpia tik vieną eilutę. Jei norite įterpti kelias eilutes, turėtumėte parašyti po kelias INSERT sąlygas, po vieną kiekvienai eilutei.
SQLite įterpimo pavyzdys
Šiame pavyzdyje į studentų lentelę įterpsime 2 eilutes, po vieną kiekvienam studentui:
INSERT INTO Students (StudentId, StudentName, DepartmentId, DateOfBirth)VERTYBĖS (11, 'Ahmad', 4, '1997-10-12');ĮDĖTI Į studentų VERTES (12, 'Aly', 4, '1996-10-12');
Tai turėtų būti sėkmingai paleista, o tam nėra išvesties:
Taip bus įterpti du studentai:
- Pirmasis studentas su StudentId = 11, StudentName = Ahmad, DepartmentId = 4 ir DateOfBirth = 1997-10-12.
- Antrasis studentas, kurio StudentId = 12, StudentName = Aly, DepartmentId = 4 ir DateOfBirth = 1996-10-12 '.
Pirmajame teiginyje mes nurodėme stulpelių pavadinimus „ StudentId, StudentName, DepartmentId, DateOfBirth “. Tačiau antrame teiginyje mes to nepadarėme.
Keturios reikšmės " 12, 'Aly", 4,' 1996-10-12 ' "bus įterptos į visus keturis studentų lentelės stulpelius ta pačia tvarka, kaip apibrėžta stulpeliai.
Dabar patikrinkime, ar du studentai buvo įtraukti į lentelę Studentai, vykdydami šią užklausą:
PASIRINKTI * IŠ studentų;
Tada turėtumėte pamatyti du studentus, grįžusius iš šios užklausos, taip:
SQLite atnaujinimas
SQLite UPDATE Query naudojama modifikuojant esamus lentelės įrašus. Norėdami atnaujinti pasirinktas eilutes, galite naudoti sąlygą WHERE su UPDATE užklausa. Sąlyga UPDATE atnaujina lentelę, pakeisdama konkretaus stulpelio vertę. Toliau pateikiama sąlyga UPDATE:
Taip:
- Po „atnaujinimo sąlyga“ turėtumėte parašyti lentelės pavadinimą, kurį norite atnaujinti.
- Jūs turite parašyti „SET sąlygą“, kuri naudojama norint atnaujinti stulpelio pavadinimą ir reikšmę.
- Galite atnaujinti daugiau nei vieną stulpelį. Tarp kiekvienos eilutės galite naudoti kablelį.
- Norėdami nurodyti tik kai kurias eilutes, galite nurodyti sąlygą WHERE. Atnaujinamos tik eilutės, kurias išraiška įvertina kaip teisingas. Jei nenurodėte sąlygos WHERE, visos eilutės bus atnaujintos.
SQLite atnaujinimo pavyzdys
Šiame UPDATE sakinyje mes atnaujinsime „DepartmentId“ studentui, kurio „StudentId = 6“ bus 3:
ATNAUJINTI studentusSET skyriaus ID = 3KUR StudentId = 6;
Tai turėtų būti sėkmingai paleista ir neturėtumėte gauti jokios išvesties:
Sąlygoje UPDATE nurodėme, kad norime atnaujinti lentelę „Studentai“.
- Sąlygoje WHERE filtravome visus studentus, kad pasirinktume tik eilutę StudentId = 6.
- SET sąlyga atnaujins pasirinktų studentų katedros ID vertę iki 3.
Dabar patikrinkime, ar studentas su ID 6 yra atnaujintas, vykdydami šią komandą:
PASIRINKITE * IŠ studentų, kur StudentId = 6;
Dabar turėtumėte pamatyti, kad skyriaus ID reikšmė dabar yra 3:
SQLite Ištrinti
SQLite DELETE užklausa naudojama esamiems įrašams pašalinti iš nurodytos lentelės. Norėdami ištrinti pasirinktas eilutes, galite naudoti sąlygą WHERE su DELETE užklausomis.
Sąlyga DELETE turi tokią sintaksę:
- Po sakiniu „DELETE FROM“ turite parašyti lentelės pavadinimą, iš kurio norite ištrinti įrašus. ( Pastaba: kad DELETE sąlyga . Naudojamas pašalinti keletą įrašų iš lentelės arba ištrinti visus įrašus ir jis nebus ištrinti pačios lentelės Tačiau DROP sąlyga naudojama ištrinti visą lentelę su visais įrašais apie jį. )
- Jei parašysite sąlygą „DELETE“ kaip „DELETE FROM guru“, tai ištrins visus įrašus iš lentelės „guru“.
- Jei norite ištrinti keletą konkrečių eilučių, su išraiška galite nurodyti sąlygą WHERE. Bus ištrintos tik tos eilutės, kurių išraiška vertinama kaip teisinga. Pvz., „IŠTRINTI IŠ guru WHERE id> 5“ - tai ištrins tik tuos įrašus, kurių ID yra didesnis nei 5.
Pavyzdys
Šiame pareiškime ištrinsime du studentus su „StudentId 11“ ir „12“:
IŠTRINTI IŠ studentų, kur StudentId = 11 ARBA StudentId = 12;
Išraiška „ StudentId = 11 OR StudentId = 12 “ bus taikoma tik studentams, turintiems 11 ir 12 ID. Taigi išlyga „DELETE“ bus taikoma abiem ir jas ištrins.
Ši komanda turėtų būti sėkmingai paleista ir neturėtumėte gauti jokių išvesties taip:
Galite patikrinti, ar du studentai buvo ištrinti, lentelėje „Studentai“ pasirinkdami visus įrašus taip:
PASIRINKTI * IŠ studentų;
Neturėtumėte matyti dviejų studentų, kurių ID yra 11 ir 12, taip:
SQLite konflikto sąlyga
Tarkime, kad turite stulpelį, kuriame yra vienas iš šių stulpelių apribojimų: UNIKALUS, NE NULL, PATIKRINTI arba PAGRINDINIS RAKTAS. Tada bandėte įterpti arba atnaujinti tame stulpelyje reikšmę, kuri prieštarauja šiam apribojimui.
Pvz., Jei stulpelyje yra UNIKALUS suvaržymas ir bandėte įterpti jau esamą vertę (pasikartojančią vertę), kuri prieštarauja UNIKALUMO apribojimui. Tada sąlyga KONFLIKTAS leidžia jums pasirinkti, ką daryti tokiais atvejais, kad išspręstumėte šį konfliktą.
Prieš tęsdami aiškinimą, kaip CONFLICT sąlyga išsprendžia konfliktą. Turėtumėte suprasti, kas yra duomenų bazės operacija.
Duomenų bazės operacijos:
Terminas duomenų bazės operacija yra SQLite operacijų sąrašas (įterpti, atnaujinti arba ištrinti). Duomenų bazės operacija turi būti vykdoma kaip vienas vienetas - visos operacijos vykdomos sėkmingai arba iš viso nevykdomos. Visos operacijos bus atšauktos, jei vienos iš jų nepavyko atlikti.
Duomenų bazės operacijos pavyzdys:
Pinigų pervedimo iš vienos banko sąskaitos į kitą operacija apims porą veiklų. Ši operacijos operacija apima pinigų išėmimą iš pirmosios sąskaitos ir pervedimą į kitą sąskaitą. Ši operacija turi būti visiškai įvykdyta arba visiškai atšaukta ir nepavyks pusiaukelėje.
Čia pateikiamas penkių rezoliucijų, kurias galite pasirinkti sąlygoje CONFLICT, sąrašas:
- ROLLBACK - tai grąžins operaciją, kurioje dabartinis SQLite sakinys, turintis konfliktą (jis atšauks visą operaciją). Pvz., Jei bandote atnaujinti 10 eilučių, o penktoje eilutėje yra vertė, kuri prieštarauja apribojimui, jokios eilutės nebus atnaujintos, 10 eilučių išliks tokios pačios. Bus išmesta klaida.
- ABORT - tai nutrauks (atšauks) tik dabartinį SQLite sakinį, kuris turi prieštaravimą, ir operacija nebus atšaukta. Pvz., Jei bandote atnaujinti 10 eilučių, o penktoje eilutėje yra vertė, kuri prieštarauja apribojimui, tik penkta reikšmė nebus atnaujinta, bet kitos 9 eilutės bus atnaujintos. Bus išmesta klaida.
- FAIL - nutraukia dabartinį SQLite sakinį, kuris turi konfliktą. Tačiau operacija nebus tęsiama, tačiau bus įvykdyti ankstesni eilių pakeitimai, atlikti prieš konfliktinę eilutę. Pvz., Jei bandote atnaujinti 10 eilučių, o penktoje eilutėje yra vertė, kuri prieštarauja apribojimui, tik 4 eilutės bus atnaujintos, o kitos - ne. Bus išmesta klaida.
- IGNORE - tai praleis eilutę, kurioje yra apribojimo pažeidimas, ir toliau apdoros kitas sekančias SQLite sakinio eilutes. Pvz., Jei bandote atnaujinti 10 eilučių, o penktoje eilutėje yra vertė, kuri prieštarauja apribojimui, tik 4 eilutės bus atnaujintos, o kitos - ne. Toliau nebus atnaujinta kitų eilučių ir sustojama ties eile, turinčia konflikto vertę. Jokia klaida nebus išmesta.
- REPLACE - tai priklauso nuo pažeidimo tipo:
- Kai yra UNIKALUMO arba PAGRINDINIO RAKTO apribojimo pažeidimas. REPLACE pakeis pažeidimą sukėlusią eilutę nauja įterpta arba atnaujinta eilute.
- Kai yra suvaržymo „NE NULL“ pažeidimas, nuostata REPLACE pakeis NULL reikšmę numatytąjąja stulpelio verte. Jei stulpelyje nėra numatytosios vertės, tada „SQLite“ nutrauks teiginį (teiginys bus atšauktas)
- JEI PATIKRINI suvaržymo pažeidimą, sąlyga bus nutraukta.
Pastaba: Aukščiau pateiktos 5 rezoliucijos yra galimybės, kaip išspręsti konfliktą. Gali būti, kad nebūtinai tai, kas taikoma sprendžiant vieną konfliktą, yra tinkama išspręsti kitų tipų konfliktus.
Kaip paskelbti sąlygą CONFLICT
Galite deklaruoti sąlygą ON CONFLICT, kai sąlygoje CREATE TABLE apibrėžiate stulpelio apibrėžimo apribojimą. Naudojant šią sintaksę:
Kaip išsiaiškinta anksčiau, konfliktui išspręsti galite pasirinkti vieną iš penkių rezoliucijų.
DĖL KONFLIKTINĖS IGNORE pavyzdžio
1 žingsnis. Sukurkite naują lentelės temą taip:
SUKURTI LENTEL [[Dalykai] ([SubjectId] INTEGRUOKITE NE VISĄ PAGRINDINĮ KONFLIKTŲ IGNORE RAKTĄ,[SubjectName] „NVARCHAR NOT NULL“);
Atkreipkite dėmesį, kad stulpelyje „SubjectId“ apibrėžėme PRIMARY RAKTO apribojimą. Pirminis rakto apribojimas neleis įterpti dviejų pasikartojančių reikšmių į stulpelį SubjectId, kad visos to stulpelio reikšmės būtų unikalios. Be to, atkreipkite dėmesį, kad mes pasirenkame konfliktų sprendimą „ IGNORE “.
Komanda turėtų būti sėkmingai vykdoma ir neturėtumėte gauti jokių klaidų:
2 žingsnis) Dabar įterpkime kai kurias reikšmes į naujus lentelės dalykus, bet su verte, kuri pažeidžia pagrindinio rakto apribojimą:
INSERT INTO Subjects VALUES (1, 'Algebra');INSERT INTO Subjects VALUES (2, „Duomenų bazės kursai“);INSERT INTO SUBJEKTŲ VERTYBĖS (2, „Duomenų struktūros“);INSERT INTO Subjects VALUES (4, 'Algoritmai');
Šiame INSERT sakinyje bandėme įterpti du kursus su tuo pačiu pirminio rakto subjekto ID 2, o tai yra pagrindinio rakto suvaržymo pažeidimas.
Komandos turėtų veikti gerai ir neturėtumėte gauti jokių klaidų. Taip:
3 žingsnis) Pasirinkite visus objektus iš lentelės taip:
PASIRINKTI * IŠ subjektų;
Tai suteiks jums dalykų sąrašą:
Atkreipkite dėmesį, kad vietoj 4 eilučių buvo įterpti tik trys dalykai „ Algebra, duomenų bazių kursai ir algoritmai “.
Eilutė, kurios vertė yra pažeidžianti pirminio rakto apribojimą, ty „Duomenų struktūros“, buvo ignoruota ir neįterpta. Tačiau SQLite po šios eilutės toliau vykdo kitus sakinius.
4 žingsnis. IŠTRINKITE lentelės temas, kad vėl sukurtumėte naudodami kitą sąlygą ON CONFLICT, vykdydami šią komandą:
LAŠYTI STALĄ Dalykai;
Komanda „drop“ ištrina visą lentelę. Lentelės temų dabar nėra.
DĖL KONFLIKTO PAKEITIMO pavyzdys
1 žingsnis. Sukurkite naują lentelės temą taip:
SUKURTI LENTEL [[Dalykai] ([SubjectId] INTEGRUOKITE NE VISĄ PAGRINDINĮ KONFLIKTŲ PAKEITIMO RAKTĄ,[SubjectName] „NVARCHAR NOT NULL“);
Atkreipkite dėmesį, kad stulpelyje „SubjectId“ apibrėžėme PRIMARY RAKTO apribojimą. Pirminis rakto apribojimas neleis įterpti dviejų pasikartojančių reikšmių į stulpelį SubjectId, kad visos to stulpelio reikšmės būtų unikalios.
Be to, atkreipkite dėmesį, kad mes pasirenkame konflikto sprendimo parinktį „ PAKEISTI “. Komanda turėtų būti sėkmingai vykdoma ir neturėtumėte gauti jokių klaidų:
2 žingsnis) Dabar įterpkime keletą reikšmių į naują lentelę „Subjects“, bet su verte, kuri pažeidžia pagrindinio rakto apribojimą:
INSERT INTO Subjects VALUES (1, 'Algebra');INSERT INTO Subjects VALUES (2, „Duomenų bazės kursai“);INSERT INTO SUBJEKTŲ VERTYBĖS (2, „Duomenų struktūros“);INSERT INTO Subjects VALUES (4, 'Algoritmai');
Šiame INSERT sakinyje bandėme įterpti du kursus su tuo pačiu pirminio rakto subjekto ID 2, o tai yra pagrindinio rakto suvaržymo pažeidimas.
Komandos turėtų veikti gerai ir neturėtumėte gauti jokių klaidų. Taip:
3 žingsnis) Pasirinkite visus objektus iš lentelės taip:
PASIRINKTI * IŠ subjektų;
Tai suteiks jums dalykų sąrašą:
Atkreipkite dėmesį, kad tik trys subjektai buvo įterpti „ Algebra, duomenų struktūros ir algoritmai “, o mes bandėme įterpti 4 eilutes.
Eilutė, kurios vertė pažeidžia pagrindinio rakto apribojimą, ty „ Duomenų struktūros “, pakeitė reikšmę „ Duomenų bazės kursai “ taip:
- Pirmieji du įterpimo teiginiai veikia be problemų. Du dalykai „Algebra“ ir „Database Course“ bus įterpti su 1, 2 ID.
- Kai „SQLite“ bando paleisti trečiąjį įterpimo sakinį su „SubjectId 2“ ir „SubjectName“ „ Duomenų struktūromis “, ji sužino, kad jau yra subjektas su „SubjectId“ = 2. Tai pažeidžia stulpelyje „SubjectId“ apibrėžtą pirminio rakto apribojimą.
- „SQLite“ pasirinks šio konflikto REPLACE rezoliuciją. Ji pakeičia vertę, kuri jau yra temų lentelėje, nauja reikšme iš įterpimo sakinio. Taigi, „ Duomenų bazės kursai “ „SubjectName“ bus pakeisti į „ Duomenų struktūros “ SubjectName.
Santrauka:
Sąlygos INSERT, UPDATE ir DELETE yra naudojamos SQLite duomenų bazės duomenims modifikuoti. Sąlyga CONFLICT yra galinga sąlyga, skirta išspręsti bet kokį duomenų ir modifikuojamų duomenų konfliktą.