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

  1. Otvorite Moje raฤunalo i doฤ‘ite do sljedeฤ‡eg direktorija "C:\sqlite"I
  2. Zatim otvorite "sqlite3.exe"

SQLite Upit - INSERT, UPDATE, DELETE

Korak 2) Otvori bazu podataka โ€œTutorialsSampleDB.dbโ€ sljedeฤ‡om naredbom:

.open TutorialsSampleDB.db

SQLite Upit - INSERT, UPDATE, DELETE

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:

SQLite INSERT

  • 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:

SQLite umetak

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 umetak

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:

SQLite Nadopune

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:

SQLite Nadopune

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 Nadopune

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:

SQLite Izbrisati

  • 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:

SQLite Izbrisati

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 Izbrisati

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:

  1. 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.
  2. 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.
  3. 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.
  1. 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.
  1. 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:

SQLite Klauzula o sukobu

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:

O ZANEMARIVANJU SUKOBA Primjer

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:

O ZANEMARIVANJU SUKOBA Primjer

Korak 3) Odaberite sve predmete iz tablice na sljedeฤ‡i naฤin:

SELECT * FROM Subjects;

Ovo ฤ‡e vam dati popis predmeta:

O ZANEMARIVANJU SUKOBA Primjer

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:

O SUKOBU ZAMIJENI Primjer

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:

O SUKOBU ZAMIJENI Primjer

Korak 3) Odaberite sve predmete iz tablice na sljedeฤ‡i naฤin:

SELECT * FROM Subjects;

Ovo ฤ‡e vam dati popis predmeta:

O SUKOBU ZAMIJENI Primjer

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.

Saลพmite ovu objavu uz: