SQLite INSERT, UPDATE, DELETE Upit s primjerom
Klauzule o izmjeni podataka u SQLite su naredbe INSERT, UPDATE i DELETE. Koristi se za umetanje novih redaka, aลพuriranje postojeฤih vrijednosti ili brisanje redaka iz baze podataka.
Imajte na umu da za sve sljedeฤe primjere morate pokrenuti sqlite3.exe i otvoriti vezu s oglednom bazom podataka kao protoฤnu:
Korak 1) U ovom koraku
- Otvorite Moje raฤunalo i doฤite do sljedeฤeg direktorija "C:\sqlite"I
- Zatim otvorite "sqlite3.exe"
Korak 2) Otvori bazu podataka โTutorialsSampleDB.dbโ sljedeฤom naredbom:
.open TutorialsSampleDB.db
Sada ste spremni pokrenuti bilo koju vrstu upita u bazi podataka.
SQLite INSERT
SQLite INSERT se koristi za umetanje zapisa u odreฤenu tablicu baze podataka. morate koristiti klauzulu 'INSERT'. Sintaksa klauzule INSERT je sljedeฤa:
- Nakon klauzule INSERT, trebate navesti u koju tablicu trebate unijeti vrijednosti.
- Nakon naziva tablice upisujete popis stupaca u koje ลพelite umetnuti vrijednosti.
- Moลพete zanemariti nazive stupaca i ne pisati u njih.
- Ako ne napiลกete naziv stupaca, vrijednosti ฤe biti umetnute u sve stupce koji se nalaze u tablici istim redoslijedom, stupci su definirani u tablici.
- Nakon klauzule VALUES, trebate navesti vrijednosti koje treba umetnuti.
- Svaka INSERT klauzula umeฤe samo jedan red. Ako ลพelite umetnuti viลกe redaka, trebali biste napisati viลกe klauzula INSERT, po jednu za svaki red.
SQLite Primjer umetanja
U sljedeฤem primjeru umetnut ฤemo 2 reda u tablicu uฤenika, po jedan za svakog uฤenika:
INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth)
VALUES(11, 'Ahmad', 4, '1997-10-12');
INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');
Ovo bi se trebalo uspjeลกno izvoditi i za ovo nema izlaza:
Ovo ฤe umetnuti dva uฤenika:
- Prvi student s 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 izjavi naveli smo nazive stupaca "StudentId, StudentName, DepartmentId, DateOfBirthโ.Meฤutim, u drugoj izjavi nismo.
ฤetiri vrijednosti"12, 'Aly', 4, '1996-10-12'โ bit ฤe umetnuta u sva ฤetiri stupca tablice Studenti istim redoslijedom kojim su stupci definirani.
Sada provjerimo jesu li dva uฤenika umetnuta u tablicu Studenti izvoฤenjem sljedeฤeg pitanje:
SELECT * FROM Students;
Tada biste trebali vidjeti dva uฤenika vraฤena iz tog upita na sljedeฤi naฤin:
SQLite Nadopune
SQLite UPDATE Query se koristi za izmjenu postojeฤih zapisa u tablici. Moลพete koristiti WHERE klauzulu s upitom UPDATE za aลพuriranje odabranih redaka. Klauzula UPDATE aลพurira tablicu promjenom vrijednosti za odreฤeni stupac. Sljedeฤa je sintaksa klauzule UPDATE:
Kao ลกto 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 koja se aลพurira.
- Moลพete aลพurirati viลกe od jednog stupca. Moลพete koristiti zarez izmeฤu svakog retka.
- Moลพete navesti WHERE klauzulu da navedete samo neke retke. Aลพuriraju se samo oni redovi za koje izraz procijeni da su istiniti. Ako niste naveli klauzulu WHERE, svi retci ฤe se aลพurirati.
SQLite Primjer aลพuriranja
U sljedeฤoj izjavi UPDATE aลพurirat ฤemo DepartmentId za studenta s StudentId = 6 na 3:
UPDATE Students SET DepartmentId = 3 WHERE StudentId = 6;
Ovo bi se trebalo uspjeลกno izvoditi i ne biste trebali dobiti nikakav izlaz:
U klauzuli UPDATE naveli smo da ลพelimo aลพurirati tablicu Studenti.
- U klauzuli WHERE filtrirali smo sve studente kako bismo odabrali samo redak za StudentId = 6.
- Klauzula SET aลพurirat ฤe vrijednost ID-a odjela za odabrane studente na 3.
Provjerimo sada je li uฤenik s ID-om 6 aลพuriran izvoฤenjem sljedeฤe naredbe:
SELECT * FROM Students WHERE StudentId = 6;
Sada biste trebali vidjeti da je vrijednost Id odjela sada 3 kako slijedi:
SQLite Izbrisati
SQLite Upit DELETE 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:
- Nakon klauzule DELETE FROM morate napisati naziv tablice iz koje ลพelite izbrisati zapise. (Biljeลกka: da je DELETE klauzula koristi se za brisanje nekih zapisa iz tablice ili brisanje svih zapisa, a neฤe izbrisati samu tablicu. Meฤutim DROP klauzula koristi se za brisanje cijele tablice sa svim zapisima u njoj.)
- Ako klauzulu DELETE napiลกete ovako "DELETE FROM guru", to ฤe izbrisati sve zapise iz tablice "guru".
- Moลพete navesti WHERE uvjet s izrazom ako ลพelite izbrisati neke odreฤene retke. Izbrisat ฤe se samo oni redovi za koje je vrijednost izraza istinita. Na primjer, โDELETE FROM guru WHERE id > 5โ โ ovo ฤe izbrisati samo zapise koji imaju id veฤi od 5.
Primjer
U sljedeฤoj izjavi izbrisat ฤemo dva studenta s StudentId 11 i 12:
DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;
Izraz "StudentId = 11 ILI StudentId = 12โ vrijedit ฤe samo za studente s ID-ovima 11 i 12. Dakle, klauzula DELETE ฤe se primijeniti na oba i izbrisat ฤe samo njih.
Ova bi se naredba trebala uspjeลกno izvoditi i ne biste trebali dobiti nikakav izlaz kao ลกto je navedeno:
Moลพete provjeriti jesu li dva uฤenika izbrisana odabirom svih zapisa iz tablice Studenti na sljedeฤi naฤin:
SELECT * FROM Students;
Ne biste trebali vidjeti dva uฤenika s ID-ovima 11 i 12 kako slijedi:
SQLite Klauzula o sukobu
Pretpostavimo da imate stupac koji ima jedno od sljedeฤih ograniฤenja stupca: UNIQUE, NOT NULL, CHECK ili PRIMARY KEY. A onda ste pokuลกali umetnuti ili aลพurirati vrijednost u tom stupcu s vrijednoลกฤu koja je u sukobu s ovim ograniฤenjem.
Na primjer, ako stupac ima UNIQUE ograniฤenje, a vi ste pokuลกali umetnuti vrijednost koja veฤ postoji (duplicirana vrijednost), ลกto je u sukobu s UNIQUE ograniฤenjem. Tada vam klauzula CONFLICT omoguฤuje da odaberete ลกto uฤiniti u takvim sluฤajevima da rijeลกite ovaj sukob.
Prije nego nastavimo objaลกnjavati kako klauzula CONFLICT rjeลกava sukob. Trebali biste razumjeti ลกto je transakcija baze podataka.
Transakcija baze podataka
Izraz transakcija baze podataka je popis SQLite operacije (umetanje, aลพuriranje ili brisanje). Transakcija baze podataka mora se izvrลกiti kao jedna cjelina, bilo da se sve operacije izvrลกe uspjeลกno ili da se uopฤe ne izvrลกe. Sve ฤe operacije biti otkazane ako se jedna od njih ne izvrลกi.
Primjer za transakciju baze podataka
Transakcija prijenosa novca s jednog bankovnog raฤuna na drugi ukljuฤuje nekoliko aktivnosti. Ova transakcijska operacija ukljuฤuje podizanje novca s prvog raฤuna i polaganje na drugi raฤun. Ova transakcija mora biti u potpunosti dovrลกena ili u potpunosti otkazana i ne smije uspjeti na pola puta.
Evo popisa od pet rjeลกenja koja moลพete odabrati u klauzuli CONFLICT:
- VRAฤANJE โ ovo ฤe vratiti transakciju u kojoj je trenutni SQLite izjava koja ima sukob (otkazat ฤe cijelu transakciju). Na primjer, ako pokuลกavate aลพurirati 10 redaka, a peti redak ima vrijednost koja je u sukobu s ograniฤenjem, tada se nijedan redak neฤe aลพurirati, 10 redaka ostat ฤe isti. Prikazat ฤe se pogreลกka.
- PREKID โ ovo ฤe prekinuti (poniลกtiti) struju SQLite samo izjava koja ima sukob i transakcija neฤe biti otkazana. Na primjer, ako pokuลกavate aลพurirati 10 redaka, a peti redak ima vrijednost koja je u sukobu s ograniฤenjem, tada samo peta vrijednost neฤe biti aลพurirana, ali ฤe se aลพurirati ostalih 9 redaka. Prikazat ฤe se pogreลกka.
- IZNEVJERITI - prekida struju SQLite izjava koja ima sukob. Meฤutim, transakcija se neฤe nastaviti, ali ฤe se primijeniti prethodne promjene u redovima prije retka koji ima sukob. Na primjer, ako pokuลกavate aลพurirati 10 redaka, a peti red ima vrijednost koja je u sukobu s ograniฤenjem, tada ฤe se aลพurirati samo 4 reda, a drugi neฤe. Prikazat ฤe se pogreลกka.
- ZANEMARITI โ ovo ฤe preskoฤiti redak koji sadrลพi krลกenje ograniฤenja i nastaviti s obradom ostalih sljedeฤih redaka SQLite izjava. Na primjer, ako pokuลกavate aลพurirati 10 redaka, a peti red ima vrijednost koja je u sukobu s ograniฤenjem, tada ฤe se aลพurirati samo 4 reda, a drugi neฤe. Neฤe nastaviti s aลพuriranjem drugih redaka i zaustaviti se na retku koji ima vrijednost sukoba. Neฤe se pojaviti pogreลกka.
- ZAMJENA โ ovisi o vrsti ograniฤenja koje ima krลกenje:
- Kada postoji krลกenje ograniฤenja za ograniฤenje UNIQUE ili PRIMARY KEY. ZAMJENA ฤe zamijeniti redak koji uzrokuje krลกenje novim umetnutim ili aลพuriranim redom.
- Kada postoji krลกenje NOT NULL ograniฤenja, REPLACE klauzula ฤe zamijeniti NULL vrijednost zadanom vrijednoลกฤu tog stupca. Ako stupac nema zadanu vrijednost, onda SQLite ฤe prekinuti izjavu (izjava ฤe biti otkazana)
- AKO doฤe do krลกenja ograniฤenja CHECK, klauzula ฤe biti prekinuta.
Biljeลกka: Gornjih 5 rjeลกenja su opcije za naฤin na koji ลพelite rijeลกiti sukob. Moลพda nije nuลพno ono ลกto je primjenjivo za rjeลกavanje jednog sukoba primjenjivo i za rjeลกavanje drugih vrsta sukoba.
Kako deklarirati klauzulu CONFLICT
Moลพete deklarirati klauzulu ON CONFLICT kada definirate ograniฤenje za definiciju stupca unutar klauzule CREATE TABLE. Koristeฤi sljedeฤu sintaksu:
Moลพete odabrati jedno od pet rjeลกenja za rjeลกavanje sukoba kao ลกto je prethodno objaลกnjeno.
O ZANEMARIVANJU SUKOBA Primjer
Korak 1) Napravite novi predmet tablice na sljedeฤi naฤin:
CREATE TABLE [Subjects] (
[SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE,
[SubjectName] NVARCHAR NOT NULL
);
Primijetite da smo definirali ograniฤenje PRIMARY KEY na stupcu SubjectId. Ograniฤenje primarnog kljuฤa neฤe dopustiti da se dvije duplicirane vrijednosti umetnu u stupac SubjectId tako da sve vrijednosti u tom stupcu trebaju biti jedinstvene. Takoฤer, primijetite da odabiremo rjeลกenje sukoba kao "ZANEMARITI".
Naredba bi se trebala uspjeลกno izvoditi i ne biste trebali dobiti nikakve pogreลกke:
Korak 2) Umetnimo sada neke vrijednosti u nove subjekte tablice, ali s vrijednoลกฤu koja krลกi ograniฤenje primarnog kljuฤa:
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');
U ovu izjavu INSERT pokuลกali smo umetnuti dva teฤaja s istim ID-om subjekta primarnog kljuฤa 2, ลกto predstavlja krลกenje ograniฤenja primarnog kljuฤa.
Naredbe bi se trebale dobro izvoditi i ne biste trebali dobivati โโnikakve pogreลกke. Kao ลกto slijedi:
Korak 3) Odaberite sve predmete iz tablice na sljedeฤi naฤin:
SELECT * FROM Subjects;
Ovo ฤe vam dati popis predmeta:
Primijetite da su umetnuta samo tri subjekta "Algebra, teฤaj baze podataka i Algorithmsโ umjesto 4 reda.
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ลกavanje drugih naredbi nakon tog reda.
Korak 4) IZBRIล ITE subjekte tablice da biste je ponovno stvorili s drugom klauzulom ON CONFLICT za sljedeฤi primjer izvoฤenjem sljedeฤe naredbe:
DROP TABLE Subjects;
Naredba drop briลกe cijelu tablicu. Tablica Subjects sada ne postoji.
O SUKOBU ZAMIJENI Primjer
Korak 1) Napravite novi predmet tablice na sljedeฤi naฤin:
CREATE TABLE [Subjects] (
[SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE,
[SubjectName] NVARCHAR NOT NULL
);
Primijetite da smo definirali ograniฤenje PRIMARY KEY na stupcu SubjectId. Ograniฤenje primarnog kljuฤa neฤe dopustiti da se dvije duplicirane vrijednosti umetnu u stupac SubjectId tako da sve vrijednosti u tom stupcu trebaju biti jedinstvene.
Takoฤer, primijetite da odabiremo opciju rjeลกavanja sukoba kao "ZAMJENAโ. Naredba bi se trebala uspjeลกno izvoditi i ne biste trebali dobiti nikakve pogreลกke:
Korak 2) Umetnimo sada neke vrijednosti u novu tablicu Predmeti, ali s vrijednoลกฤu koja krลกi ograniฤenje primarnog kljuฤa:
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');
U ovu izjavu INSERT pokuลกali smo umetnuti dva teฤaja s istim ID-om subjekta primarnog kljuฤa 2, ลกto predstavlja krลกenje ograniฤenja primarnog kljuฤa.
Naredbe bi se trebale dobro izvoditi i ne biste trebali dobivati โโnikakve pogreลกke. Kao ลกto slijedi:
Korak 3) Odaberite sve predmete iz tablice na sljedeฤi naฤin:
SELECT * FROM Subjects;
Ovo ฤe vam dati popis predmeta:
Primijetite da su umetnuta samo tri subjekta "Algebra, strukture podataka i Algorithmsโ dok smo mi pokuลกali umetnuti 4 retka.
Redak koji ima vrijednost koja krลกi ograniฤenje primarnog kljuฤa, a to je "Strukture podatakaโ zamijenio vrijednost โTeฤaj baze podatakaโ kako slijedi:
- Prve dvije izjave za umetanje rade dobro bez problema. Dva predmeta Algebra i Teฤaj baze podataka bit ฤe umetnuti s ID-ovima 1, 2.
- Kada SQLite pokuลกava pokrenuti treฤu naredbu umetanja s SubjectId 2 i SubjectName โStrukture podatakaโ, otkriva da veฤ postoji predmet s SubjectId = 2. ล to je krลกenje ograniฤenja primarnog kljuฤa definiranog u stupcu SubjectId.
- SQLite izabrat ฤe ZAMIJENI rjeลกenje za ovaj sukob. Zamjenjuje vrijednost koja veฤ postoji u tablici predmeta s novom vrijednoลกฤu iz izjave za umetanje. Dakle, "Teฤaj baze podatakaโ SubjectName bit ฤe zamijenjen s โStrukture podatakaโ Naziv subjekta.
Rezime
Klauzule INSERT, UPDATE i DELETE koriste se za izmjenu podataka u SQLite baza podataka. Klauzula CONFLICT moฤna je klauzula za rjeลกavanje bilo kakvog sukoba izmeฤu podataka i podataka za izmjenu.


















