SQLite INSERT, UPDATE, DELETE Upit s primjerom

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

U ovom vodiču ćete naučiti-

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 idite do sljedećeg direktorija ' C: sqlite 'i
  2. Zatim otvorite ' sqlite3.exe ':

Korak 2) Otvori bazu podataka ' TutorialiSampleDB.db 'sljedećom naredbom: | _+_ |

Sada ste spremni za pokretanje bilo koje vrste upita u bazi podataka.

SQLite INSERT

SQLite INSERT koristi se 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 umetnuti vrijednosti.
  • Nakon naziva tablice koji pišete popis stupaca, želite umetnuti vrijednosti u.
  • Možete zanemariti naziv stupaca i ne pisati im.
  • Ako ne upišete naziv stupca, 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 klauzula INSERT umeće samo jedan redak. Ako želite umetnuti više redaka, trebali biste napisati više INSERT klauzula, po jednu za svaki redak.

Primjer umetanja SQLite -a

U sljedećem primjeru umetnut ćemo 2 retka u tablicu učenika, po jednu za svakog učenika: | _+_ |

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

Ovo će uključiti 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 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 umetnuti u sva četiri stupca tablice učenika istim redoslijedom kako su stupci definirani.

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

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

Ažuriranje SQLite -a

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

Kako slijedi:

  • Nakon 'klauzule o ažuriranju', trebali biste napisati naziv tablice za ažuriranje.
  • Morate napisati 'SET klauzulu' koja se koristi za upisivanje naziva stupca za ažuriranje i vrijednosti za ažuriranje.
  • Možete ažurirati više stupaca. Između svakog retka možete koristiti zarez.
  • Možete navesti klauzulu WHERE da biste naveli samo neke retke. Ažuriraju se samo retci koje izraz ocjenjuje kao true. Ako niste naveli klauzulu WHERE, svi će se retci ažurirati.

Primjer ažuriranja SQLite -a

U sljedećoj UPDATE izjavi ažurirat ćemo DepartmentId za učenika s StudentId = 6 na 3: | _+_ |

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

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

  • U klauzuli WHERE filtrirali smo sve učenike kako bismo odabrali samo redak za StudentId = 6.
  • Klauzula SET ažurirat će vrijednost ID -a odjela za odabrane studente na 3.

Sada provjerimo je li učenik s ID -om 6 ažuriran, pokretanjem sljedeće naredbe: | _+_ |

Sada biste trebali vidjeti da je vrijednost ID -a odjela 3 sljedeća:

Izbrišite SQLite

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

Odredba 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 i neće izbrisati samu tablicu. Međutim DROP klauzula koristi se za brisanje cijele tablice sa svim zapisima.)
  • Ako napišete klauzulu DELETE ovako 'DELETE FROM guru', ovo će izbrisati sve zapise iz tablice 'guru'.
  • Možete navesti uvjet WHERE s izrazom ako želite izbrisati neke određene retke. Izbrisat će se samo retci za koje izraz ima vrijednost true. Na primjer, 'DELETE FROM guru WHERE id> 5' - ovo će izbrisati samo zapise čiji je id veći od 5.

Primjer

U sljedećoj izjavi izbrisat ćemo dva učenika sa StudentId 11 i 12: | _+_ |

Izraz ' StudentId = 11 ILI StudentId = 12 'bit će istinito samo za studente s ID -ovima 11 i 12. Tako će se klauzula DELETE primijeniti na oba i izbrisat će ih samo.

Ova naredba bi se trebala uspješno pokrenuti i ne biste trebali dobiti bilo koji izlaz na sljedeći način:

Možete provjeriti jesu li dva učenika izbrisana odabirom svih zapisa iz tablice Učenici na sljedeći način: | _+_ |

Dva učenika s ID -ovima 11 i 12 ne biste trebali vidjeti na sljedeći način:

Klauzula sukoba SQLite

Pretpostavimo da imate stupac koji ima jedno od sljedećih ograničenja stupaca: UNIQUE, NOT NULL, CHECK ili PRIMARY KEY. Zatim 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 ograničenje UNIQUE i pokušali ste umetnuti vrijednost koja već postoji (dvostruka vrijednost), što je u sukobu s ograničenjem UNIQUE. Zatim vam klauzula CONFLICT omogućuje da odaberete što ćete učiniti u takvim slučajevima kako biste riješili ovaj sukob.

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

Transakcija baze podataka:

Pojam transakcija baze podataka popis je SQLite operacija (umetanje ili ažuriranje ili brisanje). Transakcija baze podataka mora se izvršiti kao jedna jedinica, bilo da su sve operacije uspješno izvedene ili uopće ne. Sve operacije bit će poništene ako se jedna od njih ne izvrši.

Primjer transakcije baze podataka:

Transakcija za prijenos novca s jednog bankovnog računa na drugi uključivat će nekoliko aktivnosti. Ova transakcija uključuje podizanje novca s prvog računa i njegovo polaganje na drugi račun. Ova transakcija mora biti potpuno 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 izraz SQLite u sukobu (poništit će cijelu transakciju). Na primjer, ako pokušavate ažurirati 10 redaka, a peti red ima vrijednost koja je u sukobu s ograničenjem, tada se neće ažurirati nijedan redak, 10 redaka će ostati isto. Doći će do pogreške.
  2. ABORTUS - ovo će prekinuti (otkazati) trenutni SQLite izraz samo u sukobu i transakcija se neće otkazati. Na primjer, ako pokušavate ažurirati 10 redaka, a peti red ima vrijednost koja je u sukobu s ograničenjem, tada se neće ažurirati samo peta vrijednost, već će se ažurirati ostalih 9 redaka. Doći će do pogreške.
  3. IZNEVJERITI - prekida trenutni izraz SQLite koji ima sukob. Međutim, transakcija se neće nastaviti, ali će se izvršiti prethodne izmjene 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 retka, a drugi neće. Doći će do pogreške.
  1. ZANEMARITI - ovo će preskočiti redak koji sadrži kršenje ograničenja i nastaviti s obradom ostalih sljedećih redaka SQLite izraza. 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 retka, 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. ZAMIJENITI - ovisi o vrsti ograničenja koja ima povredu:
  • Kad postoji ograničenje ograničenja za JEDINSTVENO ili PRIMARNO KLJUČNO ograničenje. ZAMJENA će zamijeniti redak koji uzrokuje kršenje novim umetnutim ili ažuriranim retkom.
  • Kad postoji kršenje ograničenja NOT NULL, klauzula REPLACE zamijenit će vrijednost NULL zadanu vrijednost tog stupca. Ako stupac nema zadanu vrijednost, SQLite će poništiti izraz (izraz će se poništiti)
  • AKO dođe do kršenja ograničenja CHECK, klauzula će biti prekinuta.

Bilješka: Gore navedenih 5 rezolucija su opcije 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 proglasiti klauzulu CONFLICT

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

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

O SUKOBU IGNORE Primjer

Korak 1) Izradite novi predmet tablice na sljedeći način: | _+_ |

Uočite da smo definirali ograničenje PRIMARY KEY u 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, imajte na umu da smo za rješavanje sukoba odabrali ' ZANEMARITI '.

Naredba bi se trebala uspješno pokrenuti i ne biste trebali dobiti nikakve greške:

Korak 2) Umetnimo sada neke vrijednosti u nove subjekte tablice, ali s vrijednošću koja krši ograničenje primarnog ključa: | _+_ |

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 trebale dobro funkcionirati i ne biste trebali dobiti nikakve greške. Kako slijedi:

Korak 3) Odaberite sve predmete iz tablice na sljedeći način: | _+_ |

Ovo će vam dati popis predmeta:

Primijetite da su umetnuta samo tri predmeta ' Algebra, tečaj baze podataka i algoritmi '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šavati druge izraze nakon tog retka.

Korak 4) IZBRIŠITE subjekte tablice da biste je ponovo stvorili s drugom klauzulom ON CONFLICT za sljedeći primjer pokretanjem sljedeće naredbe: | _+_ |

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

O ZAMJENI SUKOBA Primjer

Korak 1) Izradite novi predmet tablice na sljedeći način: | _+_ |

Uočite da smo definirali ograničenje PRIMARY KEY u 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 imajte na umu da odabiremo opciju rješavanja sukoba kao ZAMIJENITI '. Naredba bi se trebala uspješno pokrenuti i ne biste trebali dobiti nikakve greške:

Korak 2) Umetnimo sada neke vrijednosti u nove subjekte tablice, ali s vrijednošću koja krši ograničenje primarnog ključa: | _+_ |

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 trebale dobro funkcionirati i ne biste trebali dobiti nikakve greške. Kako slijedi:

Korak 3) Odaberite sve predmete iz tablice na sljedeći način: | _+_ |

Ovo ć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 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.
  • Kada SQLite pokuša pokrenuti treći izraz za umetanje s SubjectId 2 i SubjectName ' Strukture podataka ', doznaje da već postoji subjekt s SubjectId = 2. Što predstavlja kršenje ograničenja primarnog ključa definiranog u stupcu SubjectId.
  • SQLite će izabrati REPLACE rješenje za ovaj sukob. Zamjenjuje vrijednost koja već postoji u tablici predmeta novom vrijednošću iz izraza insert. Dakle, ' Tečaj baze podataka 'SubjectName bit će zamijenjen s' Strukture podataka 'SubjectName.

Sažetak:

Odredbe INSERT, UPDATE i DELETE koriste se za izmjenu podataka u bazi podataka SQLite. Klauzula CONFLICT moćna je klauzula za rješavanje sukoba između podataka i podataka za izmjenu.