SQLite INSERT, UPDATE, DELETE Kysely esimerkillä

Sisällysluettelo:

Anonim

SQLiten tietojen muutoslausekkeet ovat INSERT-, UPDATE- ja DELETE-käskyjä. Sitä käytetään uusien rivien lisäämiseen, nykyisten arvojen päivittämiseen tai rivien poistamiseen tietokannasta.

Tässä opetusohjelmassa opit-

  • LISÄÄ
  • Päivittää
  • Poistaa
  • Ristiriita

Huomaa, että kaikissa seuraavissa esimerkeissä sinun on suoritettava sqlite3.exe ja avattava yhteys näytetietokantaan virtaavana:

Vaihe 1) Tässä vaiheessa

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

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

. Avaa oppaatDampleDB.db

Nyt olet valmis suorittamaan minkä tahansa tyyppisen kyselyn tietokannassa.

SQLite INSERT

SQLite INSERT -toimintoa käytetään tietueiden lisäämiseen tietyn tietokannan taulukkoon. sinun on käytettävä INSERT-lauseketta. INSERT-lausekkeen syntakse on seuraava:

  • INSERT-lausekkeen jälkeen sinun on ilmoitettava, mihin taulukkoon sinun on lisättävä arvot.
  • Kun kirjoitat taulukon nimen jälkeen sarakeluettelon, haluat lisätä arvot.
  • Voit ohittaa sarakkeiden nimen äläkä kirjoita niihin.
  • Jos et kirjoita sarakkeiden nimeä, arvot lisätään kaikkiin taulukon sarakkeisiin samalla järjestyksellä, sarakkeet määritetään taulukossa.
  • VALUES-lauseen jälkeen sinun tulee luetella lisättävät arvot.
  • Jokainen INSERT-lauseke lisää vain yhden rivin. Jos haluat lisätä useita rivejä, sinun on kirjoitettava useita INSERT-lausekkeita, yksi kullekin riville.

SQLite-lisäysesimerkki

Seuraavassa esimerkissä lisätään 2 riviä opiskelijoiden taulukkoon, yksi kutakin opiskelijaa kohti:

INSERT INTO Opiskelijat (StudentId, StudentName, DepartmentId, DateOfBirth)ARVOT (11, 'Ahmad', 4, '1997-10-12');INSERT INTO opiskelijoiden arvot (12, 'Aly', 4, '1996-10-12');

Tämän pitäisi toimia onnistuneesti, eikä tälle ole lähtöä:

Tämä lisää kaksi opiskelijaa:

  • Ensimmäinen opiskelija, jolla 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 lueteltiin sarakkeiden nimet " StudentId, StudentName, DepartmentId, DateOfBirth ". Toisessa lauseessa emme kuitenkaan tehneet sitä.

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

Tarkistetaan nyt, että kaksi opiskelijaa on lisätty Opiskelijat-taulukkoon suorittamalla seuraava kysely:

VALITSE * OPISKELIJOISTA;

Sitten sinun pitäisi nähdä, että kaksi opiskelijaa palasi kyselystä seuraavasti:

SQLite-päivitys

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

Seuraavasti:

  • "Päivityslausekkeen" jälkeen sinun on kirjoitettava päivitettävä 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ää useita sarakkeita. Voit käyttää pilkkua jokaisen rivin välillä.
  • Voit määrittää WHERE-lausekkeen vain joidenkin rivien määrittämiseksi. Ainoastaan ​​rivit, jotka lauseke arvioi tosi, päivitetään. Jos et määritä WHERE-lauseketta, kaikki rivit päivitetään.

Esimerkki SQLite-päivityksestä

Seuraavassa UPDATE-käskyssä päivitämme StudentId = 6 -opiskelijan DepartmentId-arvon 3:

PÄIVITÄ opiskelijatSET-osaston tunnus = 3Missä StudentId = 6;

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

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

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

Tarkistetaan nyt, että opiskelija, jolla on tunniste 6, päivitetään suorittamalla seuraava komento:

VALITSE * OPISKELIJOISTA MISSÄ StudentId = 6

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

SQLite Poista

SQLite DELETE -kyselyä käytetään olemassa olevien tietueiden poistamiseen määritetystä taulukosta. Voit poistaa WHERE-lauseen ja POISTA kyselyt valitut rivit.

DELETE-lausekkeella on seuraava syntakse:

  • Sinun on kirjoitettava taulukon nimi DELETE FROM -lausekkeen jälkeen, josta haluat poistaa tietueita. ( Huom että DELETE lauseketta käytetään poistamaan joidenkin tietojen taulukosta tai poistaa kaikki tiedot ja se ei poista itse pöytä. Kuitenkin DROP lauseketta käytetään poistaa koko pöydän kaikki tiedot siitä. )
  • Jos kirjoitat DELETE-lausekkeen näin: "POISTA GURULTA", tämä poistaa kaikki tietueet taulukosta "guru".
  • Voit määrittää WHERE-ehdon lausekkeella, jos haluat poistaa tiettyjä rivejä. Ainoastaan ​​rivit, joiden lauseke arvioi tosi, poistetaan. Esimerkiksi "POISTA GURUSTA MISSÄ id> 5" - tämä poistaa vain tietueet, joiden tunnus on suurempi kuin 5.

Esimerkki

Seuraavassa lauseessa poistamme kaksi opiskelijaa, joilla on StudentId 11 ja 12:

POISTA OPISKELIJOISTA, JOS StudentId = 11 TAI StudentId = 12;

Lauseke " StudentId = 11 TAI StudentId = 12 " pätee vain opiskelijoille, joilla on tunnukset 11 ja 12. Joten DELETE-lauseketta sovelletaan molempiin ja ne poistetaan vain.

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

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

VALITSE * OPISKELIJOISTA;

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

SQLite-ristiriitalauseke

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

Jos esimerkiksi sarakkeessa on UNIQUE-rajoitus ja yritit lisätä jo olemassa olevan arvon (kaksoisarvo), joka on ristiriidassa UNIQUE-rajoituksen kanssa. Sitten CONFLICT-lausekkeen avulla voit 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-toiminnoista (lisää tai päivitä tai poista). Tietokantatapahtuma on suoritettava yhtenä yksikkönä, joko kaikki toiminnot suoritetaan onnistuneesti tai ei lainkaan. Kaikki toiminnot peruutetaan, jos jokin niistä epäonnistui.

Esimerkki tietokantatapahtumasta:

Tapahtuma rahan siirtämiseksi pankkitililtä toiselle sisältää pari toimintaa. Tämä tapahtuma sisältää rahan nostamisen ensimmäiseltä tililtä ja tallettamisen toiselle tilille. Tämä tapahtuma on suoritettava kokonaan tai kokonaan, eikä se saa epäonnistua puolivälissä.

Tässä on luettelo viidestä päätöslauselmasta, jotka voit valita CONFLICT-lausekkeesta:

  1. ROLLBACK - tämä palauttaa tapahtuman, jossa nykyinen SQLite-käsky, jolla on ristiriita (se peruuttaa koko tapahtuman). Esimerkiksi, jos yrität päivittää 10 riviä ja viidennessä rivissä on arvo, joka on ristiriidassa rajoituksen kanssa, yhtään riviä ei päivitetä, 10 riviä pysyvät ennallaan. Virhe heitetään.
  2. ABORT - tämä keskeyttää (peruuttaa) vain nykyisen SQLite-käskyn, jolla on ristiriita, eikä tapahtumaa peruuteta. Esimerkiksi, jos yrität päivittää 10 riviä ja viidennessä rivissä on arvo, joka on ristiriidassa rajoituksen kanssa, vain viides arvo ei päivity, mutta muut 9 riviä päivitetään. Virhe heitetään.
  3. FAIL - keskeyttää nykyisen SQLite-käskyn, jolla on ristiriita. Kauppa ei kuitenkaan jatku, mutta edelliset riveihin tehdyt muutokset ennen konfliktiriviä tehdään. Esimerkiksi, jos yrität päivittää 10 riviä ja viidennellä rivillä on arvo, joka on ristiriidassa rajoituksen kanssa, vain 4 riviä päivitetään ja toinen ei. Virhe heitetään.
  1. IGNORE - tämä ohittaa rajan, joka sisältää rajoiterikkomuksen, ja jatkaa SQLite-käskyn muiden seuraavien rivien käsittelyä. Esimerkiksi, jos yrität päivittää 10 riviä ja viidennellä rivillä on arvo, joka on ristiriidassa rajoituksen kanssa, vain 4 riviä päivitetään ja toinen ei. Se ei jatka päivittää muita rivejä ja pysähtyy rivillä, jolla on ristiriita-arvo. Virheitä ei heitetä.
  1. VAIHDA - se riippuu rikkomuksen tyypistä:
  • Kun UNIQUE- tai PRIMARY KEY -rajoitukseen liittyy rajoiterikkomus. VAIHDA korvaa rikkomuksen aiheuttaneen rivin uudella lisätyllä tai päivitetyllä rivillä.
  • Kun NOT NULL -rajoitusta on rikottu, REPLACE-lauseke korvaa NULL-arvon kyseisen sarakkeen oletusarvolla. Jos sarakkeella ei ole oletusarvoa, SQLite keskeyttää lauseen (käsky perutaan)
  • JOS TARKASTUSRAJOITUSrikkomus ilmenee, lauseke keskeytetään.

Huomautus: Yllä olevat 5 ratkaisua ovat vaihtoehtoja konfliktin ratkaisemiseksi. Yhden konfliktin ratkaiseminen ei välttämättä ole välttämätöntä muun tyyppisten konfliktien ratkaisemiseksi.

Kuinka julistaa CONFLICT-lauseke

Voit ilmoittaa ON CONFLICT -lausekkeen, kun määrität rajoituksen sarakemääritykselle CREATE TABLE -lausekkeessa. Käyttämällä seuraavaa syntaksia:

Voit valita yhden viidestä päätöslauselmasta konfliktin ratkaisemiseksi kuten edellä on selitetty.

Esimerkki ristiriitaisista tiedoista

Vaihe 1) Luo uusi taulukon aihe seuraavasti:

LUO TAULUKKO [Aiheet] ([SubjectId] INTEGER EI NULL ENSISIJAINEN AVAIN Ristiriitaisissa asioissa IGNORE,[SubjectName] NVARCHAR EI NULL); 

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

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

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

INSERT INTO Aiheiden arvot (1, 'Algebra');INSERT INTO Aiheiden arvot (2, 'Tietokantakurssi');INSERT INTO Objects ARVES (2, 'Tietorakenteet');INSERT INTO Objects ARVES (4, 'Algoritmit');

Tässä INSERT-käskyssä yritimme lisätä kaksi kurssia samalla primäärisen avaimen aihe 2: lla, mikä on ensisijaisen avaimen rajoituksen vastaista.

Komennojen pitäisi toimia hyvin, eikä sinun pitäisi saada virheitä. Seuraavasti:

Vaihe 3) Valitse kaikki aiheet taulukosta seuraavasti:

SELECT * FROM Aiheet;

Tämä antaa sinulle luettelon aiheista:

Huomaa, että vain kolme aihetta lisättiin " Algebra, tietokantakurssi ja algoritmit " neljän rivin sijaan.

Rivi, jolla on arvo, joka rikkoo ensisijaisen avaimen rajoitusta, eli "Tietorakenteet", jätettiin huomiotta eikä sitä lisätty. SQLite jatkaa kuitenkin muiden lauseiden suorittamista kyseisen rivin jälkeen.

Vaihe 4) POISTA taulukon aiheet ja luo se uudella eri ON CONFLICT -lausekkeella seuraavaa esimerkkiä varten suorittamalla seuraava komento:

DROP TABLE Aiheet; 

Pudotuskomento poistaa koko taulukon. Taulukkoaiheita ei ole nyt olemassa.

Ristiriitaisen vaihdon esimerkki

Vaihe 1) Luo uusi taulukon aihe seuraavasti:

LUO TAULUKKO [Aiheet] ([SubjectId] INTEGER EI NULL ENSISIJAINEN AVAIN Ristiriitojen vaihdossa,[SubjectName] NVARCHAR EI NULL); 

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

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

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

INSERT INTO Aiheiden arvot (1, 'Algebra');INSERT INTO Aiheiden arvot (2, 'Tietokantakurssi');INSERT INTO Objects ARVES (2, 'Tietorakenteet');INSERT INTO Objects ARVES (4, 'Algoritmit');

Tässä INSERT-käskyssä yritimme lisätä kaksi kurssia samalla primäärisen avaimen aihe 2: lla, mikä on ensisijaisen avaimen rajoituksen vastaista.

Komennojen pitäisi toimia hyvin, eikä sinun pitäisi saada virheitä. Seuraavasti:

Vaihe 3) Valitse kaikki aiheet taulukosta seuraavasti:

SELECT * FROM Aiheet;

Tämä antaa sinulle luettelon aiheista:

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

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

  • Kaksi ensimmäistä lisäyslausetta toimivat hyvin ilman ongelmia. Kaksi aihetta Algebra ja Database Course lisätään tunnuksilla 1, 2.
  • Kun SQLite yrittää suorittaa kolmannen lisäyslausekkeen SubjectId 2 ja SubjectName " Data Structures " -tekniikalla , se huomaa, että jo on olemassa aihe, jonka SubjectId = 2. Mikä on SubjectId -sarakkeessa määritetyn ensisijaisen avaimen rajoituksen vastainen.
  • SQLite valitsee REPLACE-ratkaisun tälle ristiriidalle. Se korvaa aihetaulukossa jo olevan arvon uudella arvolla insert-käskystä. Joten " Database Course " SubjectName korvataan " Data Structures " SubjectName.

Yhteenveto:

INSERT-, UPDATE- ja DELETE-lausekkeita käytetään SQLite-tietokannan tietojen muokkaamiseen. CONFLICT-lauseke on tehokas lauseke kaikkien tietojen ja muokattavien tietojen välisten ristiriitojen ratkaisemiseksi.