Klauzule o úpravě dat v SQLite jsou příkazy INSERT, UPDATE a DELETE. Používá se pro vkládání nových řádků, aktualizaci stávajících hodnot nebo mazání řádků z databáze.
V tomto výukovém programu se naučíte
- VLOŽIT
- Aktualizace
- Vymazat
- Konfliktní doložka
Všimněte si, že u všech následujících příkladů musíte spustit soubor sqlite3.exe a otevřít připojení k ukázkové databázi průběžně:
Krok 1) V tomto kroku
- Otevřete Tento počítač a přejděte do následujícího adresáře " C: \ sqlite " a
- Poté otevřete soubor „ sqlite3.exe “:
Krok 2) Otevřete databázi „ TutorialsSampleDB.db “ pomocí následujícího příkazu:
.open TutorialsSampleDB.db
Nyní jste připraveni spustit jakýkoli typ dotazu v databázi.
VLOŽIT SQLite
SQLite INSERT se používá k vložení záznamů do zadané tabulky databáze. musíte použít klauzuli „VLOŽIT“. Syntaxe klauzule INSERT je následující:
- Po klauzuli INSERT byste měli uvést, do které tabulky musíte hodnoty vložit.
- Za název tabulky, kterou napíšete do seznamu sloupců, do kterých chcete hodnoty vložit.
- Název sloupců můžete ignorovat a nepisovat jim.
- Pokud nenapsáte název sloupce, hodnoty se vloží do všech sloupců nalezených v tabulce ve stejném pořadí, sloupce jsou definovány v tabulce.
- Po klauzuli VALUES byste měli uvést hodnoty, které se mají vložit.
- Každá klauzule INSERT vloží pouze jeden řádek. Pokud chcete vložit více řádků, měli byste napsat několik klauzulí INSERT, jednu pro každý řádek.
Příklad vložení SQLite
V následujícím příkladu vložíme do tabulky studentů 2 řádky, jeden pro každého studenta:
INSERT INTO Students (StudentId, StudentName, DepartmentId, DateOfBirth)HODNOTY (11, 'Ahmad', 4, '10.10.1997');INSERT INTO Students VALUES (12, 'Aly', 4, '10.10.1996);
To by mělo běžet úspěšně a pro to není žádný výstup:
Tím se vloží dva studenti:
- První student se StudentId = 11, StudentName = Ahmad, DepartmentId = 4 a DateOfBirth = 12.10.1997.
- Druhý student se StudentId = 12, StudentName = Aly, DepartmentId = 4 a DateOfBirth = 1996-10-12 '.
V prvním prohlášení jsme uvedli názvy sloupců „ StudentId, StudentName, DepartmentId, DateOfBirth “. Ve druhém prohlášení jsme to však neudělali.
Čtyři hodnoty " 12, 'Aly', 4, '1996-10-12' " budou vloženy do všech čtyř sloupců tabulky Studenti ve stejném pořadí, v jakém jsou sloupce definovány.
Nyní ověříme, že byli dva studenti vloženi do tabulky Studenti spuštěním následujícího dotazu:
VYBERTE * OD ŽÁKŮ;
Pak byste měli vidět dva studenty vrácené z tohoto dotazu takto:
Aktualizace SQLite
SQLite UPDATE Query se používá k úpravě existujících záznamů v tabulce. K aktualizaci vybraných řádků můžete použít klauzuli WHERE s dotazem UPDATE. Klauzule UPDATE aktualizuje tabulku změnou hodnoty pro konkrétní sloupec. Následuje syntaxe klauzule UPDATE:
Následovně:
- Po „klauzuli aktualizace“ byste měli napsat název tabulky, kterou chcete aktualizovat.
- Musíte napsat "klauzuli SET", která se používá k zápisu názvu sloupce k aktualizaci a hodnoty, která se má aktualizovat.
- Můžete aktualizovat více než jeden sloupec. Mezi každým řádkem můžete použít čárku.
- Můžete určit klauzuli WHERE a zadat pouze některé řádky. Aktualizovány jsou pouze řádky, které výraz vyhodnotí jako true. Pokud jste nezadali klauzuli WHERE, budou aktualizovány všechny řádky.
Příklad aktualizace SQLite
V následujícím prohlášení UPDATE aktualizujeme DepartmentId pro studenta se StudentId = 6 na 3:
UPDATE studentiSET DepartmentId = 3KDE StudentId = 6;
To by mělo běžet úspěšně a neměli byste dostat žádný výstup:
V klauzuli UPDATE jsme určili, že chceme aktualizovat tabulku Students.
- V klauzuli WHERE jsme filtrovali všechny studenty, abychom vybrali pouze řádek pro StudentId = 6.
- Klauzule SET aktualizuje hodnotu ID oddělení pro vybrané studenty na 3.
Nyní ověříme, že je student s ID 6 aktualizován, spuštěním následujícího příkazu:
SELECT * FROM Students WHERE StudentId = 6;
Nyní byste měli vidět, že hodnota ID oddělení je nyní 3 takto:
Odstranit SQLite
Dotaz SQLite DELETE se používá k odstranění existujících záznamů ze zadané tabulky. K odstranění vybraných řádků můžete použít klauzuli WHERE s dotazy DELETE.
Klauzule DELETE má následující syntaxi:
- Za klauzulí DELETE FROM, ze které chcete mazat záznamy, musíte napsat název tabulky. ( Poznámka: že DELETE klauzule . Používá se odstranit některé záznamy z tabulky nebo smazat všechny záznamy, a nebude-li tabulku odstranit samotný však klauzule DROP slouží k odstranění celou tabulku se všemi záznamy o tom. )
- Pokud napíšete klauzuli DELETE jako je tato „DELETE FROM guru“, budou odstraněny všechny záznamy z tabulky „guru“.
- Pokud chcete odstranit některé konkrétní řádky, můžete určit podmínku WHERE s výrazem. Budou odstraněny pouze řádky, pro které je výraz vyhodnocen jako true. Například „DELETE FROM guru WHERE id> 5“ - smaže pouze záznamy, které mají id větší než 5.
Příklad
V následujícím prohlášení odstraníme dva studenty se StudentId 11 a 12:
ODSTRANIT OD STUDENTŮ KDE StudentId = 11 NEBO StudentId = 12;
Výraz „ StudentId = 11 NEBO StudentId = 12 “ bude platit pouze pro studenty s Ids 11 a 12. Klauzule DELETE bude tedy použita na oba a odstraní je pouze.
Tento příkaz by měl běžet úspěšně a neměli byste dostat žádný výstup následujícím způsobem:
Můžete ověřit, že byli dva studenti odstraněni, výběrem všech záznamů z tabulky Studenti následujícím způsobem:
VYBERTE * OD ŽÁKŮ;
Následující dva studenty s ID 11 a 12 byste neměli vidět:
Klauzule o konfliktu SQLite
Předpokládejme, že máte sloupec, který má jedno z následujících omezení sloupců: UNIQUE, NOT NULL, CHECK nebo PRIMARY KEY. A pak jste se pokusili vložit nebo aktualizovat hodnotu v tomto sloupci s hodnotou, která je v konfliktu s tímto omezením.
Například pokud má sloupec UNIQUE omezení a pokusili jste se vložit hodnotu, která již existuje (duplicitní hodnota), což je v konfliktu s omezením UNIQUE. Potom vám klauzule CONFLICT umožní zvolit, co v takových případech udělat, abyste tento konflikt vyřešili.
Než budeme dále vysvětlovat, jak konflikt vyřeší klauzule CONFLICT. Měli byste pochopit, co je transakce databáze.
Transakce databáze:
Termín transakce databáze je seznam operací SQLite (vložení nebo aktualizace nebo odstranění). Transakce databáze musí být provedena jako jedna jednotka, ať už jsou všechny operace provedeny úspěšně, nebo vůbec. Pokud se některému z nich nepodaří provést, všechny operace budou zrušeny.
Příklad databázové transakce:
Transakce pro převod peněz z jednoho bankovního účtu na druhý bude zahrnovat několik činností. Tato transakční operace zahrnuje výběr peněz z prvního účtu a jejich uložení na jiný účet. Tato transakce musí být plně dokončena nebo úplně zrušena a nesmí selhat v polovině cesty.
Zde je seznam pěti rozlišení, která můžete zvolit v klauzuli CONFLICT:
- ROLLBACK - toto vrátí transakci, ve které je aktuální příkaz SQLite, který má konflikt (zruší celou transakci). Například pokud se pokoušíte aktualizovat 10 řádků a pátý řádek má hodnotu, která je v konfliktu s omezením, nebudou aktualizovány žádné řádky, 10 řádků zůstane stejných. Bude vyvolána chyba.
- ABORT - přeruší (zruší) aktuální příkaz SQLite, který má konflikt a transakce nebude zrušena. Například pokud se pokoušíte aktualizovat 10 řádků a pátý řádek má hodnotu, která je v konfliktu s omezením, nebude aktualizována pouze pátá hodnota, ale bude aktualizováno dalších 9 řádků. Bude vyvolána chyba.
- FAIL - zruší aktuální příkaz SQLite, který má konflikt. Transakce však nebude pokračovat, ale budou provedeny předchozí změny provedené v řádcích před řádkem, který má konflikt. Například pokud se pokoušíte aktualizovat 10 řádků a pátý řádek má hodnotu, která je v konfliktu s omezením, budou aktualizovány pouze 4 řádky a druhý nikoli. Bude vyvolána chyba.
- IGNORE - toto přeskočí řádek, který obsahuje narušení omezení, a bude pokračovat ve zpracování dalších následujících řádků příkazu SQLite. Například pokud se pokoušíte aktualizovat 10 řádků a pátý řádek má hodnotu, která je v konfliktu s omezením, budou aktualizovány pouze 4 řádky a druhý nikoli. Nepokračuje se v aktualizaci dalších řádků a zastavení v řádku, který má hodnotu konfliktu. Nebude vyvolána žádná chyba.
- VYMĚNIT - záleží na typu omezení, které má porušení:
- Pokud dojde k narušení omezení pro omezení JEDINEČNÝ nebo PRIMÁRNÍ KLÍČ. REPLACE nahradí řádek, který způsobí narušení, novým vloženým nebo aktualizovaným řádkem.
- Pokud dojde k narušení omezení NOT NULL, klauzule REPLACE nahradí hodnotu NULL výchozí hodnotou daného sloupce. Pokud sloupec nemá výchozí hodnotu, SQLite příkaz zruší (příkaz bude zrušen)
- Pokud dojde k narušení omezení CHECK, klauzule bude zrušena.
Poznámka: Výše uvedených 5 rozlišení představuje možnosti, jak chcete konflikt vyřešit. To nemusí být nutně to, co je použitelné k vyřešení jednoho konfliktu, je použitelné k vyřešení jiných typů konfliktů.
Jak deklarovat klauzuli CONFLICT
Klauzuli ON CONFLICT můžete deklarovat, když definujete omezení pro definici sloupce v klauzuli CREATE TABLE. Pomocí následující syntaxe:
Můžete si vybrat jedno z pěti řešení k vyřešení konfliktu, jak bylo vysvětleno výše.
ON CONFLICT IGNORE Příklad
Krok 1) Vytvořte nový předmět tabulky následujícím způsobem:
VYTVOŘIT TABULKU [Předměty] ([SubjectId] INTEGER NENÍ NULL PRIMÁRNÍ KLÍČ PRO KONFLIKT IGNORE,[SubjectName] NVARCHAR NENÍ NULL);
Všimněte si, že jsme ve sloupci SubjectId definovali omezení PRIMARY KEY. Omezení primárního klíče neumožňuje vložit do sloupce SubjectId dvě duplikované hodnoty, takže všechny hodnoty v tomto sloupci by měly být jedinečné. Všimněte si také, že jsme zvolili řešení konfliktů jako „ IGNORE “.
Příkaz by se měl úspěšně spustit a neměly by se zobrazit žádné chyby:
Krok 2) Nyní vložíme některé hodnoty do nových předmětů tabulky, ale s hodnotou, která porušuje omezení primárního klíče:
INSERT INTO Subjects VALUES (1, 'Algebra');VLOŽTE DO HODNOT předmětů (2, 'Kurz databáze');INSERT INTO Subjects VALUES (2, 'Data Structures');INSERT INTO Subjects VALUES (4, 'Algorithms');
V tomto příkazu INSERT jsme se pokusili vložit dva kurzy se stejným ID primárního klíče ID 2, což je porušení omezení primárního klíče.
Příkazy by měly běžet dobře a neměly by se zobrazovat žádné chyby. Následovně:
Krok 3) Vyberte všechny předměty z tabulky následujícím způsobem:
VYBERTE * Z OBORŮ;
Získáte tak seznam předmětů:
Všimněte si, že místo tří řádků byly vloženy pouze tři předměty „ Algebra, databázový kurz a algoritmy “.
Řádek, který má hodnotu, která porušuje omezení primárního klíče, což je „Datové struktury“, byl ignorován a nebyl vložen. Po tomto řádku však SQLite pokračuje v provádění dalších příkazů.
Krok 4) ODSTRANTE předměty tabulky a vytvořte je znovu pomocí jiné klauzule ON CONFLICT pro následující příklad spuštěním následujícího příkazu:
DROP TABLE Subjekty;
Příkaz drop odstraní celou tabulku. Předměty tabulky nyní neexistují.
ON CONFLICT REPLACE Příklad
Krok 1) Vytvořte nový předmět tabulky následujícím způsobem:
VYTVOŘIT TABULKU [Předměty] ([SubjectId] INTEGER NENÍ NULL PRIMÁRNÍ KLÍČ NA VÝMĚNU KONFLIKTU,[SubjectName] NVARCHAR NENÍ NULL);
Všimněte si, že jsme ve sloupci SubjectId definovali omezení PRIMARY KEY. Omezení primárního klíče neumožňuje vložit do sloupce SubjectId dvě duplikované hodnoty, takže všechny hodnoty v tomto sloupci by měly být jedinečné.
Všimněte si také, že jsme zvolili možnost řešení konfliktů jako „ VYMĚNIT “. Příkaz by se měl úspěšně spustit a neměly by se zobrazit žádné chyby:
Krok 2) Nyní vložíme některé hodnoty do nové tabulky Subjekty, ale s hodnotou, která porušuje omezení primárního klíče:
INSERT INTO Subjects VALUES (1, 'Algebra');VLOŽTE DO HODNOT předmětů (2, 'Kurz databáze');INSERT INTO Subjects VALUES (2, 'Data Structures');INSERT INTO Subjects VALUES (4, 'Algorithms');
V tomto příkazu INSERT jsme se pokusili vložit dva kurzy se stejným ID primárního klíče ID 2, což je porušení omezení primárního klíče.
Příkazy by měly běžet dobře a neměly by se zobrazovat žádné chyby. Následovně:
Krok 3) Vyberte všechny předměty z tabulky následujícím způsobem:
VYBERTE * Z OBORŮ;
Získáte tak seznam předmětů:
Všimněte si, že byly vloženy pouze tři předměty „ Algebra, datové struktury a algoritmy “, zatímco jsme se pokusili vložit 4 řádky.
Řádek, který má hodnotu, která porušuje omezení primárního klíče, což je „ Datové struktury “, nahradil hodnotu „ Kurz databáze “ následujícím způsobem:
- První dva příkazy vložení fungují bez problémů. Budou vloženy dva předměty Algebra a databázový kurz s ID 1, 2.
- Když se SQLite pokusí spustit třetí příkaz insert s SubjectId 2 a SubjectName " Data Structures ", zjistí, že již existuje předmět s SubjectId = 2. Což je porušení omezení primárního klíče definovaného ve sloupci SubjectId.
- SQLite zvolí pro tento konflikt rozlišení REPLACE. Nahradí hodnotu, která již v tabulce předmětů existuje, novou hodnotou z příkazu insert. Název databáze „ Course Course “ SubjectName bude tedy nahrazen názvem „ Data Structures “ SubjectName.
Souhrn:
Klauzule INSERT, UPDATE a DELETE se používají k úpravě dat v databázi SQLite. Klauzule CONFLICT je mocná klauzule k vyřešení jakéhokoli konfliktu mezi daty a daty, která je třeba upravit.