SQLite INSERT, UPDATE, DELETE upit s primjerom

Sadržaj:

Anonim

Klauzule o izmjeni podataka u SQLiteu su izrazi INSERT, UPDATE i DELETE. Koristi se za umetanje novih redaka, ažuriranje postojećih vrijednosti ili brisanje redaka iz baze podataka.

U ovom vodiču naučit ćete-

  • UMETNUTI
  • Ažuriraj
  • Izbrisati
  • Klauzula o sukobu

Imajte na umu da za sve sljedeće primjere morate pokrenuti sqlite3.exe i otvoriti vezu s uzorkom baze podataka kao tekuću:

Korak 1) U ovom koraku,

  1. Otvorite Moje računalo i prijeđite na sljedeći direktorij " C: \ sqlite " i
  2. Zatim otvorite " sqlite3.exe ":

Korak 2) Sljedećom naredbom otvorite bazu podataka " TutorialsSampleDB.db ":

.otvori TutorialsSampleDB.db

Sada ste spremni pokrenuti bilo koju vrstu upita u bazi podataka.

SQLite INSERT

SQLite INSERT koristi se za umetanje zapisa u navedenu tablicu baze podataka. morate koristiti klauzulu 'INSERT'. Sintaksa klauzule INSERT je kako slijedi:

  • Nakon klauzule INSERT, trebali biste navesti u koju tablicu trebate umetnuti vrijednosti.
  • Nakon imena tablice u koju napišete popis stupaca, želite umetnuti vrijednosti u.
  • Možete zanemariti naziv stupaca i ne pisati im.
  • Ako ne napišete naziv stupca, vrijednosti će se umetnuti u sve stupce koji se nalaze u tablici istim redoslijedom, stupci su definirani u tablici.
  • Nakon klauzule VALUES, trebali biste navesti vrijednosti koje treba umetnuti.
  • Svaka klauzula INSERT ubacuje samo jedan redak. Ako želite umetnuti više redaka, trebali biste napisati više klauzula INSERT, po jednu za svaki redak.

Primjer umetanja SQLitea

U sljedećem ćemo primjeru u tablicu učenika umetnuti 2 retka, po jedan za svakog učenika:

INSERT INTO Students (StudentId, StudentName, DepartmentId, DateOfBirth)VRIJEDNOSTI (11, 'Ahmad', 4, '1997-10-12');UMETNI U VRIJEDNOSTI učenika (12, 'Aly', 4, '1996-10-12');

Ovo bi se trebalo uspješno pokrenuti i za to nema rezultata:

Ovo će umetnuti dva učenika:

  • Prvi student sa StudentId = 11, StudentName = Ahmad, DepartmentId = 4 i DateOfBirth = 1997-10-12.
  • Drugi student s StudentId = 12, StudentName = Aly, DepartmentId = 4 i DateOfBirth = 1996-10-12 '.

U prvoj smo izjavi naveli imena stupaca " StudentId, StudentName, DepartmentId, DateOfBirth ". Međutim, u drugoj izjavi nismo.

Četiri vrijednosti " 12, 'Aly', 4, '1996-10-12' " bit će umetnute u sva četiri stupca tablice Studenti istim redoslijedom kako su definirani stupci.

Sada, provjerimo jesu li dva učenika umetnuta u tablicu Studenti pokretanjem sljedećeg upita:

ODABERITE * IZ učenika;

Tada biste trebali vidjeti dva učenika koja su se vratila iz tog upita na sljedeći način:

Ažuriranje SQLitea

SQLite UPDATE Upit koristi se za izmjenu postojećih zapisa u tablici. Možete koristiti klauzulu WHERE s UPDATE upitom za ažuriranje odabranih redaka. Klauzula UPDATE ažurira tablicu mijenjanjem vrijednosti za određeni stupac. Slijedi sintaksa klauzule UPDATE:

Kako slijedi:

  • Nakon "klauzule ažuriranja", trebali biste napisati naziv tablice za ažuriranje.
  • Morate napisati "klauzulu SET" koja se koristi za pisanje naziva stupca za ažuriranje i vrijednosti koju treba ažurirati.
  • Možete ažurirati više stupaca. Između svakog retka možete koristiti zarez.
  • Možete odrediti klauzulu WHERE da biste naveli samo neke retke. Ažuriraju se samo retci koje izraz ocjenjuje istinitima. Ako niste naveli klauzulu WHERE, svi će se retci ažurirati.

Primjer ažuriranja SQLitea

U sljedećoj izjavi UPDATE ažurirat ćemo ID odjela za studenta s StudentId = 6 na 3:

AŽURIRANJE StudentiSET Odjel ID = 3GDJE StudentId = 6;

Ovo bi se trebalo uspješno pokrenuti i ne biste trebali dobivati ​​izlaz:

U klauzuli UPDATE naveli smo da želimo ažurirati tablicu Studenti.

  • U klauzuli WHERE filtrirali smo sve studente da bi odabrali samo redak za StudentId = 6.
  • Klauzula SET ažurirat će vrijednost Id Odjela za odabrane studente na 3.

Sada, provjerimo je li student s ID-om 6 ažuriran, izvođenjem sljedeće naredbe:

ODABERITE * IZ učenika GDJE StudentId = 6;

Sada biste trebali vidjeti da je vrijednost Id-a odjela sada 3 kako slijedi:

SQLite Delete

SQLite DELETE upit koristi se za uklanjanje postojećih zapisa iz navedene tablice. Možete koristiti klauzulu WHERE s upitima DELETE za brisanje odabranih redaka.

Klauzula DELETE ima sljedeću sintaksu:

  • Morate napisati ime tablice nakon klauzule DELETE FROM, iz koje želite izbrisati zapise. ( Napomena: da DELETE klauzula . Koristi se za brisanje neke zapise iz tablice ili brisanje svih zapisa i neće izbrisati samu tablicu Međutim, KAP klauzula služi za brisanje cijelog stola sa svim zapisima na njemu. )
  • Ako klauzulu DELETE napišete ovako "DELETE FROM guru", to će izbrisati sve zapise iz tablice "guru".
  • Možete izrazom WHERE odrediti izraz ako želite izbrisati neke određene retke. Izbrisat će se samo retci za koje izraz procjenjuje na true. Na primjer, "IZbriši iz gurua GDJE id> 5" - ovim će se izbrisati samo zapisi koji imaju id veći od 5.

Primjer

U sljedećoj ćemo izjavi izbrisati dva učenika s StudentId 11 i 12:

IZBRIŠI OD učenika GDJE StudentId = 11 ILI StudentId = 12;

Izraz " StudentId = 11 ILI StudentId = 12 " bit će istinit samo za studente s ID-ovima 11 i 12. Dakle, klauzula DELETE primijenit će se na oboje i samo će ih izbrisati.

Ova bi se naredba trebala uspješno izvoditi i ne biste trebali dobivati ​​izlaz kao što slijedi:

Možete provjeriti jesu li dva učenika izbrisana odabirom svih zapisa iz tablice Studenti na sljedeći način:

ODABERITE * IZ učenika;

Ne biste trebali vidjeti dvoje učenika s ID-ovima 11 i 12 kako slijedi:

Klauzula o SQLite sukobu

Pretpostavimo da imate stupac koji ima jedno od sljedećih ograničenja stupaca: UNIQUE, NOT NULL, CHECK ili PRIMARY KEY. A zatim ste pokušali umetnuti ili ažurirati vrijednost u taj stupac s vrijednošću koja je u sukobu s ovim ograničenjem.

Na primjer, ako stupac ima UNIQUE ograničenje i pokušali ste umetnuti vrijednost koja već postoji (duplikata vrijednosti), što je u sukobu s UNIQUE ograničenjem. Tada vam klauzula CONFLICT omogućuje odabir što ćete učiniti u takvim slučajevima za rješavanje ovog sukoba.

Prije nego što nastavimo objašnjavati kako klauzula CONFLICT rješava sukob. Trebali biste razumjeti što je transakcija baze podataka.

Transakcija baze podataka:

Pojam transakcija baze podataka je popis SQLite operacija (umetanje, ažuriranje ili brisanje). Transakcija baze podataka mora se izvršiti kao jedna cjelina, ili sve operacije uspješno izvedene ili uopće ne. Sve će se operacije otkazati ako se jedna od njih nije uspjela izvršiti.

Primjer za transakciju baze podataka:

Transakcija za prijenos novca s jednog bankovnog računa na drugi uključivat će nekoliko aktivnosti. Ova transakcijska operacija uključuje povlačenje novca s prvog računa i njegovo polaganje na drugi račun. Ova transakcija mora biti u potpunosti dovršena ili potpuno otkazana i ne smije propasti na pola puta.

Evo popisa pet rezolucija koje možete odabrati u klauzuli CONFLICT:

  1. ROLLBACK - ovo će poništiti transakciju u kojoj je trenutni SQLite izraz koji ima sukob (poništit će cijelu transakciju). Na primjer, ako pokušavate ažurirati 10 redaka, a peti redak ima vrijednost koja se sukobljava s ograničenjem, tada se neće ažurirati nijedan redak, 10 redaka ostat će isti. Izbacit će se pogreška.
  2. PREKINI - ovo će poništiti (otkazati) samo trenutni SQLite izraz koji ima sukob i transakcija neće biti otkazana. Na primjer, ako pokušavate ažurirati 10 redaka, a peti redak ima vrijednost koja se sukobljava s ograničenjem, tada se neće ažurirati samo peta vrijednost, već će se ažurirati ostalih 9 redaka. Izbacit će se pogreška.
  3. FAIL - prekida trenutni SQLite izraz koji ima sukob. Međutim, transakcija se neće nastaviti, ali počinit će se prethodne promjene u retke prije retka u kojem je sukob. Na primjer, ako pokušavate ažurirati 10 redaka, a peti redak ima vrijednost koja se sukobljava s ograničenjem, tada će se ažurirati samo 4, a drugi neće. Izbacit će se pogreška.
  1. IGNORE - ovo će preskočiti redak koji sadrži kršenje ograničenja i nastaviti obrađivati ​​ostale sljedeće redove SQLite izraza. Na primjer, ako pokušavate ažurirati 10 redaka, a peti redak ima vrijednost koja se sukobljava s ograničenjem, tada će se ažurirati samo 4, a drugi neće. Neće se nastaviti s ažuriranjem ostalih redaka i zaustaviti se na retku koji ima vrijednost sukoba. Neće se pojaviti pogreška.
  1. ZAMJENA - ovisi o vrsti ograničenja koje ima kršenje:
  • Kada postoji kršenje ograničenja za UNIKATNO ili PRIMARNO KLJUČNO ograničenje. ZAMJENA zamijenit će redak koji uzrokuje kršenje novim umetnutim ili ažuriranim retkom.
  • Kada postoji povreda ograničenja NOT NULL, klauzula REPLACE zamijenit će vrijednost NULL zadanom vrijednošću tog stupca. Ako stupac nema zadanu vrijednost, tada će SQLite prekinuti izraz (izraz će biti otkazan)
  • AKO SE dogodi povreda ograničenja CHECK, klauzula će se poništiti.

Napomena: Gornjih 5 rezolucija opcije su kako želite riješiti sukob. Možda nije nužno ono što je primjenjivo za rješavanje jednog sukoba primjenjivo za rješavanje drugih vrsta sukoba.

Kako se deklarira klauzula CONFLICT

Klauzulu ON CONFLICT možete proglasiti kada definirate ograničenje za definiciju stupca unutar klauzule CREATE TABLE. Koristeći sljedeću sintaksu:

Možete odabrati jednu od pet rezolucija za rješavanje sukoba kako je prethodno objašnjeno.

O SUKOBU IGNORE Primjer

Korak 1) Stvorite novu temu tablice kako slijedi:

STVORI TABELU [Predmeti] ([SubjectId] CIJELI NIJE PORUČNI PRIMARNI KLJUČ KONFLIKTNE IGNORE,[SubjectName] NVARCHAR NIJE NULL); 

Primijetite da smo definirali ograničenje PRIMARNOG KLJUČA na stupcu SubjectId. Ograničenje primarnog ključa ne dopušta umetanje dvije duplicirane vrijednosti u stupac SubjectId tako da bi sve vrijednosti u tom stupcu morale biti jedinstvene. Također, imajte na umu da smo za rješavanje sukoba odabrali " IGNORE ".

Naredba bi se trebala uspješno pokrenuti i ne biste trebali dobivati ​​pogreške:

Korak 2) Ubacimo neke vrijednosti u nove predmete tablice, ali s vrijednošću koja krši ograničenje primarnog ključa:

INSERT INTO Subjects VRIJEDNOSTI (1, 'Algebra');INSERT INTO Subjects VALUES (2, 'Tečaj baze podataka');INSERT INTO Subjects VRIJEDNOSTI (2, 'Strukture podataka');INSERT INTO Subjects VRIJEDNOSTI (4, 'Algoritmi');

U ovu izjavu INSERT pokušali smo umetnuti dva tečaja s istim ID-om predmeta primarnog ključa 2, što predstavlja kršenje ograničenja primarnog ključa.

Naredbe bi trebale dobro funkcionirati i ne biste smjeli dobivati ​​pogreške. Kako slijedi:

Korak 3) Odaberite sve predmete iz tablice kako slijedi:

ODABERI * IZ predmeta;

To će vam dati popis predmeta:

Primijetite da su umjesto tri retka umetnuta samo tri predmeta " Algebra, tečaj baze podataka i algoritmi ".

Redak koji ima vrijednost koja krši ograničenje primarnog ključa, a to je "Strukture podataka", zanemaren je i nije umetnut. Međutim, SQLite nastavlja izvršavati druge izraze nakon tog retka.

Korak 4) IZBRIŠITE predmete tablice da biste ih ponovno stvorili s drugom klauzulom ON CONFLICT za sljedeći primjer pokretanjem sljedeće naredbe:

TABLA ZA KAPANJE Predmeti; 

Naredba drop briše cijelu tablicu. Predmeti tablice sada ne postoje.

O ZAMJENI KONFLIKTA Primjer

Korak 1) Stvorite novu temu tablice kako slijedi:

STVORI TABELU [Predmeti] ([SubjectId] CIJELI NIJE PORUČNI PRIMARNI KLJUČ ZAMJENE KONFLIKTA,[SubjectName] NVARCHAR NIJE NULL); 

Primijetite da smo definirali ograničenje PRIMARNOG KLJUČA na stupcu SubjectId. Ograničenje primarnog ključa ne dopušta umetanje dvije duplicirane vrijednosti u stupac SubjectId tako da bi sve vrijednosti u tom stupcu morale biti jedinstvene.

Također, primijetite da odabiremo mogućnost rješavanja sukoba kao " ZAMJENA ". Naredba bi se trebala uspješno pokrenuti i ne biste trebali dobivati ​​pogreške:

Korak 2) Ubacimo neke vrijednosti u novu Subjekti tablice, ali s vrijednošću koja krši ograničenje primarnog ključa:

INSERT INTO Subjects VRIJEDNOSTI (1, 'Algebra');INSERT INTO Subjects VALUES (2, 'Tečaj baze podataka');INSERT INTO Subjects VRIJEDNOSTI (2, 'Strukture podataka');INSERT INTO Subjects VRIJEDNOSTI (4, 'Algoritmi');

U ovu izjavu INSERT pokušali smo umetnuti dva tečaja s istim ID-om predmeta primarnog ključa 2, što predstavlja kršenje ograničenja primarnog ključa.

Naredbe bi trebale dobro funkcionirati i ne biste smjeli dobivati ​​pogreške. Kako slijedi:

Korak 3) Odaberite sve predmete iz tablice kako slijedi:

ODABERI * IZ predmeta;

To će vam dati popis predmeta:

Primijetite da su umetnuta samo tri predmeta " Algebra, strukture podataka i algoritmi ", dok smo pokušali umetnuti 4 retka.

Redak koji ima vrijednost koja krši ograničenje primarnog ključa, a to je " Strukture podataka ", zamijenio je vrijednost " Tečaj baze podataka " kako slijedi:

  • Prve dvije izjave za umetanje rade bez problema. Dva predmeta Algebra i tečaj baze podataka bit će umetnuti s ID-ovima 1, 2.
  • Kad SQLite pokuša pokrenuti treću izjavu za umetanje s SubjectId 2 i SubjectName " Strukture podataka ", otkriva da već postoji subjekt sa SubjectId = 2. Što predstavlja kršenje ograničenja primarnog ključa definiranog u stupcu SubjectId.
  • SQLite će odabrati ZAMJENITI rješenje za ovaj sukob. Zamjenjuje vrijednost koja već postoji u tablici predmeta novom vrijednošću iz naredbe insert. Dakle, naziv predmeta " Tečaj baze podataka " bit će zamijenjen nazivom " Strukture podataka ".

Sažetak:

Klauzule INSERT, UPDATE i DELETE koriste se za izmjenu podataka u bazi podataka SQLite. Klauzula CONFLICT snažna je klauzula za rješavanje bilo kakvog sukoba između podataka i podataka koje treba izmijeniti.