SQLite INSERT, UPDATE, DELETE Lekérdezés példával

Tartalomjegyzék:

Anonim

Az SQLite adatmódosítási záradékai az INSERT, az UPDATE és a DELETE utasítások. Új sorok beszúrására, a meglévő értékek frissítésére vagy sorok törlésére szolgál az adatbázisból.

Ebben az oktatóanyagban megtanulja-

  • INSERT
  • Frissítés
  • Töröl
  • Konfliktuszáradék

Vegye figyelembe, hogy a következő példák mindegyikéhez futtatnia kell az sqlite3.exe fájlt, és áramlásként meg kell nyitnia a kapcsolatot a minta adatbázissal:

1. lépés) Ebben a lépésben

  1. Nyissa meg a Sajátgép elemet, és keresse meg a következő könyvtárat: " C: \ sqlite " és
  2. Ezután nyissa meg az " sqlite3.exe " fájlt :

2. lépés: Nyissa meg a " TutorialsSampleDB.db " adatbázist a következő paranccsal:

.open TutorialsSampleDB.db

Most már készen áll bármilyen típusú lekérdezés futtatására az adatbázisban.

SQLite INSERT

Az SQLite INSERT rekordok beszúrására szolgál az adatbázis meghatározott táblájába. az 'INSERT' záradékot kell használnia. Az INSERT záradék szintaxisa a következő:

  • Az INSERT záradék után meg kell adnia, melyik táblába kell beillesztenie az értékeket.
  • A táblázat neve után írja be az oszlopok listáját, és be akarja illeszteni az értékeket.
  • Hagyhatja figyelmen kívül az oszlopok nevét, és nem írhat nekik.
  • Ha nem írja be az oszlopok nevét, akkor az értékek a táblázat összes oszlopába azonos sorrendben kerülnek beillesztésre, az oszlopokat a táblázat határozza meg.
  • Az VALUES záradék után fel kell sorolnia a beillesztendő értékeket.
  • Minden INSERT záradék csak egy sort szúr be. Ha több sort akar beilleszteni, akkor több INSERT záradékot kell írni, mindegyikhez egyet.

SQLite beszúrási példa

A következő példában 2 sort illesztünk be a diákok táblázatába, egyet-egyet minden hallgatóhoz:

INSERT INTO hallgatók (StudentId, StudentName, DepartmentId, DateOfBirth)ÉRTÉKEK (11, 'Ahmad', 4, '1997-10-12');Beszúrás a diákok értékei közé (12, „Aly”, 4, „1996-10-12”);

Ennek sikeresen kell futnia, és erre nincs kimenet:

Ez két hallgatót illeszt be:

  • Az első hallgató, amelynek StudentId = 11, StudentName = Ahmad, DepartmentId = 4 és DateOfBirth = 1997-10-12.
  • A második hallgató, amelynek StudentId = 12, StudentName = Aly, DepartmentId = 4 és DateOfBirth = 1996-10-12 '.

Az első utasításban felsoroltuk a " StudentId, StudentName, DepartmentId, DateOfBirth " oszlopokat . A második utasításban azonban nem.

A négy érték: " 12, 'Aly", 4,' 1996-10-12 ' "a Diákok táblázat mind a négy oszlopába kerül beillesztésre, az oszlopok megadásának sorrendjében.

Most a következő lekérdezés futtatásával ellenőrizzük, hogy a két tanuló beillesztésre került-e a diákok táblába:

SELECT * FROM hallgatók;

Ezután látnia kell, hogy a két hallgató visszatért ebből a lekérdezésből:

SQLite frissítés

Az SQLite UPDATE Query a tábla meglévő rekordjainak módosítására szolgál. A WHERE záradék UPDATE lekérdezéssel használható a kijelölt sorok frissítésére. Az UPDATE záradék frissít egy táblázatot egy adott oszlop értékének megváltoztatásával. A következő az UPDATE záradék szintaxisa:

Mint a következő:

  • A "frissítési záradék" után meg kell írni a frissítendő táblázat nevét.
  • Írnod kell a "SET záradékot", amely a frissítendő oszlop nevének és a frissítendő értéknek az írására szolgál.
  • Több oszlopot is frissíthet. Az egyes sorok között vesszőt használhat.
  • Csak néhány sor megadásához megadhat egy WHERE záradékot. Csak azok a sorok frissülnek, amelyeket a kifejezés igaznak értékel. Ha nem adott meg WHERE záradékot, akkor az összes sor frissül.

SQLite frissítési példa

A következő UPDATE utasításban a StudentId = 6 tanuló DepartmentId-jét 3-ra frissítjük:

UPDATE diákokSET osztályazonosító = 3WHERE StudentId = 6;

Ennek sikeresen kell futnia, és nem szabad kimenetet kapnia:

Az UPDATE záradékban megadtuk, hogy frissíteni akarjuk a Student táblázatot.

  • A WHERE záradékban az összes hallgatót kiszűrtük, hogy csak a StudentId = 6 sort válasszuk ki.
  • A SET záradék frissíti a tanszék azonosítójának értékét a kiválasztott hallgatók számára 3-ra.

Most ellenőrizzük, hogy a 6. azonosítójú tanuló frissítve van-e a következő parancs futtatásával:

KIVÁLASZT * A hallgatók közül, ahol StudentId = 6;

Most látnia kell, hogy az osztályazonosító értéke 3 a következő:

SQLite Törlés

Az SQLite DELETE lekérdezés a meglévő rekordok eltávolítására szolgál egy megadott táblából. Használhatja a WHERE záradékot DELETE lekérdezésekkel a kijelölt sorok törléséhez.

A DELETE záradék a következő szintaxissal rendelkezik:

  • A DELETE FROM záradék után be kell írnia egy tábla nevét, amelyből törölni kívánja a rekordokat. ( Megjegyzés: a DELETE záradék arra szolgál, hogy néhány rekordot töröljön egy táblából, vagy törölje az összes rekordot, és magát a táblázatot sem törli. A DROP záradék azonban a teljes tábla törlésére szolgál, benne az összes rekorddal. )
  • Ha a DELETE záradékot így írja be: "DELETE FROM guru", akkor ez törli az összes rekordot a "guru" táblából.
  • Megadhat egy WHERE feltételt egy kifejezéssel, ha törölni akar bizonyos sorokat. Csak azokat a sorokat töröljük, amelyeknél a kifejezés igaznak értékeli. Például: "DELETE FROM guru WHERE id> 5" - ez csak azokat a rekordokat törli, amelyek azonosítója nagyobb, mint 5.

Példa

Az alábbi állításban két diákot törölünk, amelyek StudentId 11 és 12:

TÖRLÉS A hallgatóktól, ahol StudentId = 11 VAGY StudentId = 12;

A " StudentId = 11 VAGY StudentId = 12 " kifejezés csak a 11. és 12. azonosítójú hallgatókra lesz igaz. Tehát a DELETE záradék mindkettőre vonatkozik, és csak azokat törli.

Ennek a parancsnak sikeresen kell futnia, és nem szabad kimenetet kapnia az alábbiak szerint:

Ellenőrizheti, hogy a két tanuló törlődött-e, ha az összes rekordot kiválasztja a Diákok táblából az alábbiak szerint:

SELECT * FROM hallgatók;

Nem szabad a következőképpen látnia a 11. és 12. azonosítójú két diákot:

SQLite ütközési záradék

Tegyük fel, hogy van olyan oszlopa, amely a következő oszlopkorlátozások egyikével rendelkezik: EGYEDI, NEM NULL, ELLENŐRZŐ vagy ELSŐDLEGES KULCS. És akkor megpróbált beilleszteni vagy frissíteni egy értéket az oszlopba egy olyan értékkel, amely ütközik ezzel a megszorítással.

Például, ha egy oszlopnak UNIQUE korlátozása van, és megpróbált beilleszteni egy már létező értéket (duplicate value), amely ütközik az UNIQUE korlátozással. Ezután a CONFLICT záradék lehetővé teszi, hogy kiválassza, mit kell tennie ilyen esetekben a konfliktus megoldásához.

Mielőtt tovább elmagyaráznánk, hogy a CONFLICT záradék hogyan oldja meg a konfliktust. Meg kell értenie, mi az adatbázis tranzakció.

Adatbázis-tranzakció:

Az adatbázis tranzakció kifejezés az SQLite műveletek listája (beillesztés, frissítés vagy törlés). Az adatbázis tranzakciót egy egységként kell végrehajtani, vagy az összes műveletet sikeresen végrehajtva, vagy egyáltalán nem. Ha az egyik műveletet nem sikerült végrehajtani, az összes művelet törlődik.

Példa adatbázis-tranzakcióra:

Az egyik bankszámláról a másikra történő pénzátutalás tranzakciója pár tevékenységet fog magában foglalni. Ez a tranzakciós művelet magában foglalja az első számláról történő pénzfelvételt és egy másik számlára történő befizetést. Ennek a tranzakciónak teljesen teljesnek vagy teljesen le kell mondania, és félúton sem kell kudarcot vallania.

Itt található a CONFLICT záradékban választható öt felbontás listája:

  1. ROLLBACK - ez visszagörgeti azt a tranzakciót, amelyben az ütközést szenvedő aktuális SQLite utasítás (törli az egész tranzakciót). Például, ha 10 sort próbál frissíteni, és az ötödik sornak van egy értéke, amely ütközik egy megszorítással, akkor egyetlen sor sem frissül, a 10 sor ugyanaz marad. Hiba lesz.
  2. ABORT - ez csak az aktuális SQLite utasítást fogja megszakítani (törli), amelynek ütközése van, és a tranzakció nem lesz törölve. Például, ha 10 sort próbál frissíteni, és az ötödik sornak van egy értéke, amely ütközik egy megszorítással, akkor csak az ötödik érték nem frissül, de a többi 9 sor frissül. Hiba lesz.
  3. FAIL - megszakítja az ütközést okozó aktuális SQLite utasítást. A tranzakció azonban nem folytatódik, de az ütközés előtti sort megelőző sorok korábbi módosításai végrehajtásra kerülnek. Például, ha 10 sort próbál frissíteni, és az ötödik sor értéke megegyezik egy korlátozással, akkor csak a 4 sor frissül, a másik pedig nem. Hiba lesz.
  1. IGNORE - ez kihagyja a korlátozás megsértését tartalmazó sort, és folytatja az SQLite utasítás további következő sorainak feldolgozását. Például, ha 10 sort próbál frissíteni, és az ötödik sor értéke megegyezik egy korlátozással, akkor csak a 4 sor frissül, a másik pedig nem. Nem folytatja a többi sor frissítését, és nem áll meg azon a soron, amelynek konfliktusértéke van. Nem fog hibát dobni.
  1. KICSERÉLÉS - a megsértést megkötő kényszer típusától függ:
  • Ha az UNIQUE vagy a PRIMARY KEY kényszer megszegése van. A KICSERÉLÉS a sértést okozó sort az új beillesztett vagy frissített sorra cseréli.
  • Ha a NULL korlátozás megsértése történik, a REPLACE záradék a NULL értéket az oszlop alapértelmezett értékével helyettesíti. Ha az oszlopnak nincs alapértelmezett értéke, akkor az SQLite megszakítja az utasítást (az utasítás törlődik)
  • HA megtörténik az ELLENŐRZÉSI korlát megszegése, a záradék megszakad.

Megjegyzés: A fenti 5 felbontás lehetőséget kínál az ütközés megoldására. Nem feltétlenül az, ami egy konfliktus megoldására alkalmazható, más konfliktusok megoldására is alkalmazható.

A CONFLICT záradék deklarálása

Akkor deklarálhatja az ON CONFLICT záradékot, amikor a CREATE TABLE záradékban megad egy korlátozást egy oszlopdefinícióhoz. A következő szintaxist használva:

Választhat egyet az öt felbontás közül a konfliktus megoldására az előzőekben leírtak szerint.

PÉLDA A KONFLIKTUSOK IGNORE-ról

1. lépés: Hozzon létre egy új táblázatot az alábbiak szerint:

TÁBLÁZAT LÉTREHOZÁSA [Tárgyak] ([SubjectId] INTEGRÁLJON NEM NULL ELSŐDLEGES KULCS A KONFLIKTUSOK IGNORE-I,[SubjectName] Az NVARCHAR NULL); 

Figyelje meg, hogy meghatároztunk egy PRIMARY KEY korlátozást a SubjectId oszlopban. Az elsődleges kulcs korlátozása nem teszi lehetővé két duplikált érték beszúrását a SubjectId oszlopba, így az oszlop összes értéke egyedinek kell lennie. Figyelje meg azt is, hogy a konfliktus megoldását " IGNORE " -nak választjuk .

A parancsnak sikeresen kell futnia, és nem szabad hibákat észlelnie:

2. lépés) Most illesszünk be néhány értéket az új tábla tantárgyakba, de olyan értékkel, amely sérti az elsődleges kulcs megszorítását:

INSERT INTO TÁRGYAK ÉRTÉKEI (1, 'Algebra');INSERT INTO TÁRGYAK ÉRTÉKEI (2, 'Adatbázis tanfolyam');INSERT INTO TÁRGYAK ÉRTÉKEI (2, 'Adatszerkezetek');INSERT INTO TÁRGYAK ÉRTÉKEI (4, 'Algoritmusok');

Ebben az INSERT utasításban két tanfolyamot próbáltunk beilleszteni ugyanazzal az elsődleges kulcs tantárgy azonosítóval (ID ID 2), ami sérti az elsődleges kulcs kényszerét.

A parancsoknak jól kell futniuk, és nem szabad hibákat észlelniük. Mint a következő:

3. lépés: Válassza ki az összes témát a táblázatból az alábbiak szerint:

SELECT * FROM Tárgyak;

Ez megadja a tantárgyak listáját:

Figyelje meg, hogy 4 sor helyett csak három tantárgy került beillesztésre: " Algebra, Adatbázis tanfolyam és Algoritmusok ".

Azt a sort, amelynek értéke megsérti az elsődleges kulcs megkötését, azaz "Adatszerkezetek", figyelmen kívül hagyták, és nem illesztették be. Az SQLite azonban folytatja a többi utasítás végrehajtását a sor után.

4. lépés: Törölje a táblázat alanyait, hogy újból létrehozza egy másik ON CONFLICT záradékkal a következő példához a következő parancs futtatásával:

DROP TABLE Tárgyak; 

A drop parancs az egész táblát törli. A táblázat alanyai már nem léteznek.

PÉLDA KONFLIKTIKUS CSERÉL

1. lépés: Hozzon létre egy új táblázatot az alábbiak szerint:

TÁBLÁZAT LÉTREHOZÁSA [Tárgyak] ([SubjectId] INTEGRÁLJ NEM NULL ELSŐDLEGES KULCS A KONFLIKTIKUS CSERÉJEL,[SubjectName] Az NVARCHAR NULL); 

Figyelje meg, hogy meghatároztunk egy PRIMARY KEY korlátozást a SubjectId oszlopban. Az elsődleges kulcs korlátozása nem teszi lehetővé két duplikált érték beszúrását a SubjectId oszlopba, így az oszlop összes értéke egyedinek kell lennie.

Ezenkívül vegye figyelembe, hogy egy konfliktusmegoldási opciót választunk a " KICSERÉLÉS " lehetőségre. A parancsnak sikeresen kell futnia, és nem szabad hibákat észlelnie:

2. lépés) Most illesszünk be néhány értéket az új Tárgyak táblába, de olyan értékkel, amely sérti az elsődleges kulcs megszorítását:

INSERT INTO TÁRGYAK ÉRTÉKEI (1, 'Algebra');INSERT INTO TÁRGYAK ÉRTÉKEI (2, 'Adatbázis tanfolyam');INSERT INTO TÁRGYAK ÉRTÉKEI (2, 'Adatszerkezetek');INSERT INTO TÁRGYAK ÉRTÉKEI (4, 'Algoritmusok');

Ebben az INSERT utasításban két tanfolyamot próbáltunk beilleszteni ugyanazzal az elsődleges kulcs tantárgy azonosítóval (ID ID 2), ami sérti az elsődleges kulcs kényszerét.

A parancsoknak jól kell futniuk, és nem szabad hibákat észlelniük. Mint a következő:

3. lépés: Válassza ki az összes témát a táblázatból az alábbiak szerint:

SELECT * FROM Tárgyak;

Ez megadja a tantárgyak listáját:

Figyelje meg, hogy csak három alany került beillesztésre: " Algebra, adatszerkezetek és algoritmusok ", miközben megpróbáltunk 4 sort beilleszteni.

Az a sor, amelynek értéke megsérti az elsődleges kulcs megkötését, vagyis az " Adatszerkezetek ", az alábbiak szerint váltotta fel az " Adatbázis tanfolyam " értéket :

  • Az első két beszúró utasítás problémamentesen fut. Két tantárgy Algebra és Adatbázis tanfolyam kerül beillesztésre az 1, 2 azonosítókkal.
  • Amikor az SQLite megpróbálja futtatni a harmadik beszúrási utasítást a SubjectId 2 és a SubjectName " Data Structures " néven, akkor kiderül, hogy már létezik egy SubjectId = 2 tantárgy, ami sérti a SubjectId oszlopban definiált elsődleges kulcs korlátozást.
  • Az SQLite választja a REPLACE felbontást ehhez az ütközéshez. A tantárgyak táblázatában már meglévő értéket az insert utasítás új értékével helyettesíti. Tehát az " Adatbázis tanfolyam " SubjectName helyébe az " Data Structures " SubjectName lép.

Összegzés:

Az INSERT, UPDATE és DELETE záradékok az SQLite adatbázis adatainak módosítására szolgálnak. A CONFLICT záradék hatékony záradék az adatok és a módosítandó adatok közötti esetleges ütközések feloldására.