SQLite LISÄÄ, PÄIVITYS, POISTA kysely esimerkin avulla

Tietojen muutoslausekkeet SQLite ovat INSERT-, UPDATE- ja DELETE-käskyt. Sitä käytetään uusien rivien lisäämiseen, olemassa olevien arvojen päivittämiseen tai rivien poistamiseen tietokannasta.

Huomaa, että kaikissa seuraavissa esimerkeissä sinun on suoritettava sqlite3.exe ja avattava yhteys mallitietokantaan juoksevana:

Vaihe 1) Tässä vaiheessa

  1. Avaa Oma tietokone ja siirry seuraavaan hakemistoon "C:\sqlite"Ja
  2. Avaa sitten "sqlite3.exe"

SQLite Kysely - LISÄÄ, PÄIVITYS, POISTA

Vaihe 2) Avaa tietokanta "TutorialsSampleDB.db" seuraavalla komennolla:

.open TutorialsSampleDB.db

SQLite Kysely - LISÄÄ, PÄIVITYS, POISTA

Nyt olet valmis suorittamaan minkä tahansa tyyppisiä kyselyjä tietokannassa.

SQLite INSERT

SQLite INSERT-toimintoa käytetään tietueiden lisäämiseen tietokannan määritettyyn taulukkoon. sinun on käytettävä INSERT-lausetta. INSERT-lauseen syntaksi on seuraava:

SQLite INSERT

  • INSERT-lauseen jälkeen tulee ilmoittaa, mihin taulukkoon arvot on lisättävä.
  • Taulukon nimen jälkeen kirjoitat sarakeluettelon, johon haluat lisätä arvot.
  • Voit jättää huomioimatta sarakkeiden nimen etkä kirjoita niihin.
  • Jos et kirjoita sarakkeiden nimeä, arvot lisätään kaikkiin taulukon sarakkeisiin samassa järjestyksessä, sarakkeet määritellään taulukossa.
  • VALUES-lauseen jälkeen sinun tulee luetella lisättävät arvot.
  • Jokainen INSERT-lause lisää vain yhden rivin. Jos haluat lisätä useita rivejä, sinun tulee kirjoittaa useita INSERT-lauseita, yksi jokaiselle riville.

SQLite Lisää esimerkki

Seuraavassa esimerkissä lisäämme opiskelijataulukkoon 2 riviä, yhden kullekin opiskelijalle:

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

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

Tämän pitäisi toimia onnistuneesti, eikä tälle ole tulostetta:

SQLite liite

Tämä lisää kaksi opiskelijaa:

  • Ensimmäinen opiskelija, jonka StudentId = 11, StudentName = Ahmad, DepartmentId = 4 ja DateOfBirth = 1997-10-12.
  • Toinen opiskelija, jonka StudentId=12, StudentName = Aly, DepartmentId = 4 ja DateOfBirth = 1996-10-12′.

Ensimmäisessä lauseessa listasimme sarakkeiden nimet "StudentId, StudentName, DepartmentId, DateOfBirthToisessa lausunnossa emme kuitenkaan tehneet.

Neljä arvoa "12, "Aly", 4, "1996-10-12"” lisätään Opiskelijat-taulukon kaikkiin neljään sarakkeeseen samassa järjestyksessä kuin sarakkeet on määritetty.

Tarkastetaan nyt, että nämä kaksi opiskelijaa lisättiin Opiskelijat-taulukkoon suorittamalla seuraava kysymys:

SELECT * FROM Students;

Sitten sinun pitäisi nähdä kaksi opiskelijaa palasivat kyseisestä kyselystä seuraavasti:

SQLite liite

SQLite Päivitykset

SQLite UPDATE-kyselyä käytetään taulukon olemassa olevien tietueiden muokkaamiseen. Voit käyttää WHERE-lausetta UPDATE-kyselyn kanssa päivittääksesi valitut rivit. UPDATE-lauseke päivittää taulukon muuttamalla tietyn sarakkeen arvoa. Seuraava on UPDATE-lauseen syntaksi:

SQLite Päivitykset

seuraavasti:

  • Päivityslausekkeen jälkeen sinun tulee kirjoittaa päivitettävän taulukon nimi.
  • Sinun on kirjoitettava "SET-lauseke", jota käytetään päivitettävän sarakkeen nimen ja päivitettävän arvon kirjoittamiseen.
  • Voit päivittää useamman kuin yhden sarakkeen. Voit käyttää pilkkua jokaisen rivin välissä.
  • Voit määrittää WHERE-lauseen vain joidenkin rivien määrittämiseksi. Vain rivit, jotka lauseke arvioi tosiksi, päivitetään. Jos et määrittänyt WHERE-lausetta, kaikki rivit päivitetään.

SQLite Päivitysesimerkki

Päivitämme seuraavassa UPDATE-lauseessa opiskelijan osastotunnuksen, jonka StudentId = 6, arvoon 3:

UPDATE Students
SET DepartmentId = 3 
WHERE StudentId = 6;

Tämän pitäisi toimia onnistuneesti, eikä sinun pitäisi saada mitään tulostetta:

SQLite Päivitykset

UPDATE-lauseessa määritimme, että haluamme päivittää Opiskelijat-taulukon.

  • WHERE-lauseessa suodatimme kaikki opiskelijat valitsemaan vain rivin StudentId = 6.
  • SET-lauseke päivittää valittujen opiskelijoiden osastotunnuksen arvoksi 3.

Nyt tarkistetaan, että opiskelija, jolla on tunnus 6, on päivitetty suorittamalla seuraava komento:

SELECT * FROM Students WHERE StudentId = 6;

Sinun pitäisi nyt nähdä, että osastotunnuksen arvo on nyt 3 seuraavasti:

SQLite Päivitykset

SQLite Poista

SQLite DELETE-kyselyä käytetään olemassa olevien tietueiden poistamiseen määritetystä taulukosta. Voit käyttää WHERE-lausetta DELETE-kyselyiden kanssa poistaaksesi valitut rivit.

DELETE-lauseella on seuraava syntaksi:

SQLite Poista

  • Sinun on kirjoitettava DELETE FROM -lauseen jälkeen taulukon nimi, josta haluat poistaa tietueita. (Huomautus: että DELETE-lauseke käytetään poistamaan joitakin tietueita taulukosta tai poistamaan kaikki tietueet, eikä se poista itse taulukkoa. Kuitenkin DROP-lauseke käytetään poistamaan koko taulukko kaikkine tietueineen.)
  • Jos kirjoitat DELETE-lauseen näin "DELETE FROM guru", tämä poistaa kaikki tietueet taulukosta "guru".
  • Voit määrittää WHERE-ehdon lausekkeella, jos haluat poistaa tiettyjä rivejä. Vain rivit, joiden lauseke arvioi tosi, poistetaan. Esimerkiksi “DELETE FROM guru WHERE id > 5” – tämä poistaa vain tietueet, joiden tunnus on suurempi kuin 5.

esimerkki

Seuraavassa lausunnossa poistamme kaksi opiskelijaa, joiden opiskelijatunnus on 11 ja 12:

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

Ilmaisu ”Opiskelijatunnus = 11 TAI opiskelijatunnus = 12” on totta vain opiskelijoille, joilla on tunnukset 11 ja 12. Joten DELETE-lauseke sovelletaan molempiin ja poistaa vain ne.

Tämän komennon pitäisi toimia onnistuneesti, eikä sinun pitäisi saada mitään tulostetta seuraavasti:

SQLite Poista

Voit varmistaa, että kaksi opiskelijaa on poistettu, valitsemalla kaikki tietueet Opiskelijat-taulukosta seuraavasti:

SELECT * FROM Students;

Sinun ei pitäisi nähdä kahta opiskelijaa, joilla on tunnukset 11 ja 12 seuraavasti:

SQLite Poista

SQLite Ristiriitalauseke

Oletetaan, että sinulla on sarake, jossa on jokin seuraavista sarakerajoituksista: UNIQUE, NOT NULL, CHECK tai PRIMARY KEY. Ja sitten yritit lisätä tai päivittää arvon kyseiseen sarakkeeseen arvolla, joka on ristiriidassa tämän rajoituksen kanssa.

Jos sarakkeessa on esimerkiksi YKSILÖLLINEN rajoitus ja yritit lisätä jo olemassa olevan arvon (kopioarvo), joka on ristiriidassa YKSILÖLLÄ rajoitteen kanssa. Sitten CONFLICT-lauseke antaa sinun valita, mitä tehdä tällaisissa tapauksissa konfliktin ratkaisemiseksi.

Ennen kuin jatkamme selittämistä, kuinka CONFLICT-lauseke ratkaisee ristiriidan. Sinun pitäisi ymmärtää, mikä on tietokantatapahtuma.

Tietokantatapahtuma

Termi tietokantatapahtuma on luettelo SQLite toiminnot (lisää tai päivitä tai poista). Tietokantatapahtuma on suoritettava yhtenä yksikkönä, joko kaikki toiminnot suoritetaan onnistuneesti tai ei ollenkaan. Kaikki toiminnot peruutetaan, jos jokin niistä epäonnistuu.

Esimerkki tietokantatapahtumasta

Rahan siirto pankkitililtä toiselle sisältää muutaman toiminnon. Tämä tapahtuma sisältää rahan noston ensimmäiseltä tililtä ja talletuksen toiselle tilille. Tämän tapahtuman on oltava täysin valmis tai peruutettu kokonaan, eikä se saa epäonnistua puolivälissä.

Tässä on luettelo viidestä ratkaisusta, jotka voit valita CONFLICT-lausekkeessa:

  1. palautus – tämä peruuttaa tapahtuman, jossa nykyinen SQLite lauseke, jossa on ristiriita (se peruuttaa koko tapahtuman). Jos esimerkiksi yrität päivittää 10 riviä ja viidennellä rivillä on arvo, joka on ristiriidassa rajoituksen kanssa, rivejä ei päivitetä, vaan 10 riviä pysyvät samoina. Virhe tulee näkyviin.
  2. KESKEYTTÄÄ – tämä keskeyttää (peruuttaa) virran SQLite vain siinä on ristiriita, eikä tapahtumaa peruuteta. Jos esimerkiksi yrität päivittää 10 riviä ja viidennellä rivillä on arvo, joka on ristiriidassa rajoituksen kanssa, vain viidettä arvoa ei päivitetä, mutta muut 9 riviä päivitetään. Virhe tulee näkyviin.
  3. Epäonnistui – katkaisee virran SQLite lausunto, jossa on ristiriita. Tapahtumaa ei kuitenkaan jatketa, mutta aiemmat muutokset, jotka on tehty ristiriitaa sisältävää riviä edeltäville riveille, hyväksytään. Jos esimerkiksi yrität päivittää 10 riviä ja viidennellä rivillä on arvo, joka on ristiriidassa rajoituksen kanssa, vain 4 riviä päivitetään ja toista ei. Virhe tulee näkyviin.
  1. sivuuttaa – tämä ohittaa rivin, joka sisältää rajoitteen rikkomisen, ja jatkaa muiden seuraavien rivien käsittelyä SQLite lausunto. Jos esimerkiksi yrität päivittää 10 riviä ja viidennellä rivillä on arvo, joka on ristiriidassa rajoituksen kanssa, vain 4 riviä päivitetään ja toista ei. Se ei jatka muiden rivien päivittämistä ja lopeta riville, jolla on ristiriitaarvo. Virhettä ei anneta.
  1. VAIHDA – se riippuu rikkomuksen aiheuttavan rajoituksen tyypistä:
  • Kun UNIQUE- tai PRIMARY KEY -rajoitteelle on rajoitusrikkomus. REPLACE korvaa rikkomuksen aiheuttaneen rivin uudella lisätyllä tai päivitetyllä rivillä.
  • Kun NOT NULL -rajoitusrikkomus tapahtuu, REPLACE-lause korvaa NULL-arvon kyseisen sarakkeen oletusarvolla. Jos sarakkeella ei ole oletusarvoa, niin SQLite keskeyttää lausunnon (lausunto peruutetaan)
  • JOS CHECK-rajoitusrikkomus tapahtuu, lauseke keskeytyy.

Huomautus: Yllä olevat 5 ratkaisua ovat vaihtoehtoja, joilla haluat ratkaista ristiriidan. Se ei välttämättä ole sitä, mikä soveltuu yhden ristiriidan ratkaisemiseen, on sovellettavissa muun tyyppisten ristiriitojen ratkaisemiseen.

Kuinka julistaa CONFLICT-lauseke

Voit ilmoittaa ON CONFLICT -lauseen, kun määrität rajoituksen sarakemäärittelylle CREATE TABLE -lauseessa. Käyttämällä seuraavaa syntaksia:

SQLite Ristiriitalauseke

Voit valita yhden viidestä ratkaisusta ratkaistaksesi ristiriidan edellä kuvatulla tavalla.

KONFLIKTIOHJEET Esimerkki

Vaihe 1) Luo uusi taulukon aihe seuraavasti:

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

Huomaa, että olemme määrittäneet PRIMARY KEY -rajoitteen SubjectId-sarakkeeseen. Ensisijaisen avaimen rajoitus ei salli kahden päällekkäisen arvon lisäämistä SubjectId-sarakkeeseen, joten kaikkien sarakkeen arvojen tulee olla yksilöllisiä. Huomaa myös, että valitsemme konfliktien ratkaisuksi "sivuuttaa".

Komennon pitäisi toimia onnistuneesti, eikä virheitä pitäisi saada:

KONFLIKTIOHJEET Esimerkki

Vaihe 2) Lisätään nyt joitain arvoja uusiin taulukon aiheisiin, mutta arvolla, joka rikkoo ensisijaisen avaimen rajoitusta:

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

Tässä INSERT-käskyssä yritimme lisätä kaksi kurssia samalla Primary Key Subject -tunnuksella 2, mikä rikkoo ensisijaisen avaimen rajoitusta.

Komentojen pitäisi toimia hyvin, eikä virheitä pitäisi saada. seuraavasti:

KONFLIKTIOHJEET Esimerkki

Vaihe 3) Valitse kaikki aiheet taulukosta seuraavasti:

SELECT * FROM Subjects;

Tämä antaa sinulle luettelon aiheista:

KONFLIKTIOHJEET Esimerkki

Huomaa, että vain kolme aihetta lisättiin "Algebra, tietokantakurssi ja Algorithms”4 rivin sijaan.

Rivi, jonka arvo rikkoo ensisijaisen avaimen rajoitusta, joka on "Datarakenteet", ohitettiin, eikä sitä lisätty. Kuitenkin, SQLite jatkaa muiden lauseiden suorittamista kyseisen rivin jälkeen.

Vaihe 4) POISTA taulukon aiheet luodaksesi se uudelleen eri ON CONFLICT -lausekkeella seuraavassa esimerkissä suorittamalla seuraava komento:

DROP TABLE Subjects;

Pudotuskomento poistaa koko taulukon. Taulukon aiheita ei ole nyt olemassa.

ON CONFLICT REPLACE Esimerkki

Vaihe 1) Luo uusi taulukon aihe seuraavasti:

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

Huomaa, että määritimme SubjectId-sarakkeeseen PRIMARY KEY -rajoitteen. Ensisijaisen avaimen rajoitus ei salli kahden päällekkäisen arvon lisäämistä SubjectId-sarakkeeseen, joten kaikkien sarakkeen arvojen tulee olla yksilöllisiä.

Huomaa myös, että valitsemme konfliktinratkaisuvaihtoehdoksi "VAIHDA". Komennon pitäisi toimia onnistuneesti, eikä virheitä pitäisi saada:

ON CONFLICT REPLACE Esimerkki

Vaihe 2) Lisätään nyt joitain arvoja uuteen Subjects-taulukkoon, mutta arvolla, joka rikkoo ensisijaisen avaimen rajoitusta:

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

Tässä INSERT-käskyssä yritimme lisätä kaksi kurssia samalla Primary Key Subject -tunnuksella 2, mikä rikkoo ensisijaisen avaimen rajoitusta.

Komentojen pitäisi toimia hyvin, eikä virheitä pitäisi saada. seuraavasti:

ON CONFLICT REPLACE Esimerkki

Vaihe 3) Valitse kaikki aiheet taulukosta seuraavasti:

SELECT * FROM Subjects;

Tämä antaa sinulle luettelon aiheista:

ON CONFLICT REPLACE Esimerkki

Huomaa, että vain kolme aihetta lisättiin "Algebra, tietorakenteet ja Algorithms”, kun taas yritimme lisätä 4 riviä.

Rivi, jonka arvo rikkoo ensisijaisen avaimen rajoitusta, joka on "Tietorakenteet" korvasi arvon"Tietokannan kurssi" seuraavasti:

  • Kaksi ensimmäistä inserttilauseketta toimivat hyvin ilman ongelmia. Kaksi oppiainetta, Algebra ja Tietokantakurssi lisätään tunnisteilla 1, 2.
  • Kun SQLite yrittää suorittaa kolmannen insert-käskyn, jossa on SubjectId 2 ja SubjectName "Tietorakenteet", se havaitsee, että on jo aihe, jonka SubjectId = 2. Mikä on SubjectId-sarakkeessa määritetyn ensisijaisen avaimen rajoitteen vastainen.
  • SQLite valitsee tälle ristiriidalle ratkaisun REPLACE. Se korvaa aihetaulukossa jo olevan arvon insert-käskyn uudella arvolla. Joten "Tietokannan kurssi"Aihenimi korvataan ""Tietorakenteet”Aihenimi.

Yhteenveto

INSERT-, UPDATE- ja DELETE-lauseita käytetään tietojen muokkaamiseen SQLite tietokanta. CONFLICT-lauseke on tehokas lauseke, joka ratkaisee ristiriidat tietojen ja muokattavan tiedon välillä.