Doložky o úprave údajov v SQLite sú príkazy INSERT, UPDATE a DELETE. Používa sa na vkladanie nových riadkov, aktualizáciu existujúcich hodnôt alebo mazanie riadkov z databázy.
V tomto návode sa naučíte
- VLOŽTE
- Aktualizácia
- Odstrániť
- Konfliktná doložka
Všimnite si, že pre všetky nasledujúce príklady musíte spustiť sqlite3.exe a otvoriť plynulé pripojenie k ukážkovej databáze:
Krok 1) V tomto kroku
- Otvorte Môj počítač a prejdite do nasledujúceho adresára " C: \ sqlite " a
- Potom otvorte " sqlite3.exe ":
Krok 2) Otvorte databázu „ TutorialsSampleDB.db “ pomocou nasledujúceho príkazu:
.open TutorialsSampleDB.db
Teraz ste pripravení spustiť akýkoľvek typ dotazu v databáze.
VLOŽIŤ SQLite
Príkaz SQLite INSERT sa používa na vkladanie záznamov do určenej tabuľky databázy. musíte použiť klauzulu 'INSERT'. Syntax klauzuly INSERT je nasledovná:
- Po klauzule INSERT by ste mali uviesť, do ktorej tabuľky musíte hodnoty vložiť.
- Za názov tabuľky, ktorú napíšete zoznam stĺpcov, do ktorých chcete vložiť hodnoty.
- Názov stĺpcov môžete ignorovať a nepísať do nich.
- Ak nenapíšete názov stĺpca, hodnoty sa vložia do všetkých stĺpcov nájdených v tabuľke v rovnakom poradí, stĺpce sú definované v tabuľke.
- Po klauzule VALUES by ste mali uviesť zoznam hodnôt, ktoré sa majú vložiť.
- Každá klauzula INSERT vkladá iba jeden riadok. Ak chcete vložiť viac riadkov, mali by ste napísať viac klauzúl INSERT, jednu pre každý riadok.
Príklad vloženia SQLite
V nasledujúcom príklade vložíme do tabuľky študentov 2 riadky, jeden pre každého študenta:
INSERT INTO Students (StudentId, StudentName, DepartmentId, DateOfBirth)HODNOTY (11, 'Ahmad', 4, '10.10.1997');VLOŽTE DO HODNOTY študentov (12, 'Aly', 4, '10. 10. 1996);
Toto by malo bežať úspešne a pre tento účel neexistuje žiadny výstup:
Týmto sa vložia dvaja študenti:
- Prvý študent so StudentId = 11, StudentName = Ahmad, DepartmentId = 4 a DateOfBirth = 1997-10-12.
- Druhý študent so StudentId = 12, StudentName = Aly, DepartmentId = 4 a DateOfBirth = 1996-10-12 '.
V prvom vyhlásení sme uviedli názvy stĺpcov „ StudentId, StudentName, DepartmentId, DateOfBirth “. V druhom vyhlásení sme to však neurobili.
Štyri hodnoty „ 12,„ Aly “, 4,„ 1996-10-12 “ “ sa vložia do všetkých štyroch stĺpcov tabuľky Studenti v rovnakom poradí, v akom sú stĺpce definované.
Teraz overíme, či boli títo dvaja študenti vložení do tabuľky Studenti, a to spustením nasledujúceho dotazu:
VYBERTE * OD študentov;
Potom by ste mali vidieť týchto dvoch študentov vrátených z tohto dotazu takto:
Aktualizácia SQLite
SQLite UPDATE Query sa používa na úpravu existujúcich záznamov v tabuľke. Na aktualizáciu vybratých riadkov môžete použiť klauzulu WHERE s dotazom UPDATE. Klauzula UPDATE aktualizuje tabuľku zmenou hodnoty pre konkrétny stĺpec. Toto je syntax doložky UPDATE:
Ako nasledujúce:
- Po „doložke o aktualizácii“ by ste mali napísať názov tabuľky, ktorá sa má aktualizovať.
- Musíte napísať „klauzulu SET“, ktorá sa používa na zápis názvu stĺpca, ktorý sa má aktualizovať, a hodnoty, ktorá sa má aktualizovať.
- Môžete aktualizovať viac ako jeden stĺpec. Medzi každým riadkom môžete použiť čiarku.
- Môžete určiť klauzulu WHERE, aby ste určili iba niektoré riadky. Aktualizujú sa iba riadky, ktoré výraz vyhodnotí ako pravdivé. Ak ste nezadali klauzulu WHERE, aktualizujú sa všetky riadky.
Príklad aktualizácie SQLite
V nasledujúcom vyhlásení UPDATE aktualizujeme DepartmentId pre študenta so StudentId = 6 na 3:
AKTUALIZÁCIA ŠtudentiSET DepartmentId = 3KDE StudentId = 6;
To by malo bežať úspešne a nemali by ste dostať žiadny výstup:
V klauzule UPDATE sme určili, že chceme aktualizovať tabuľku Students.
- V klauzule WHERE sme filtrovali všetkých študentov, aby sme vybrali iba riadok pre StudentId = 6.
- Klauzula SET aktualizuje hodnotu ID oddelenia pre vybraných študentov na hodnotu 3.
Teraz overíme, či je študent s ID 6 aktualizovaný, a to spustením nasledujúceho príkazu:
VYBERTE * OD študentov, KDE StudentId = 6;
Teraz by ste mali vidieť, že hodnota ID oddelenia je teraz 3 nasledovne:
Odstrániť SQLite
Dotaz SQLite DELETE sa používa na odstránenie existujúcich záznamov zo zadanej tabuľky. Na odstránenie vybratých riadkov môžete použiť klauzulu WHERE s dotazmi DELETE.
Klauzula DELETE má nasledujúcu syntax:
- Za klauzulou DELETE FROM musíte napísať názov tabuľky, z ktorej chcete vymazať záznamy. ( Poznámka: že DELETE klauzula . Používa sa odstrániť niektoré záznamy z tabuľky alebo zmazať všetky záznamy, a ak nebude tabuľku odstrániť samotný však DROP slúži na odstránenie celú tabuľku so všetkými záznamy o tom. )
- Ak napíšete klauzulu DELETE takto: „DELETE FROM guru“, vymažú sa tým všetky záznamy z tabuľky „guru“.
- Podmienku WHERE môžete určiť výrazom, ak chcete odstrániť niektoré konkrétne riadky. Vymazané budú iba riadky, pre ktoré je výraz vyhodnotený ako pravdivý. Napríklad „DELETE FROM guru WHERE id> 5“ - vymaže sa iba záznamy, ktoré majú id väčšie ako 5.
Príklad
V nasledujúcom vyhlásení odstránime dvoch študentov so StudentId 11 a 12:
ODSTRÁNIŤ OD študentov, KDE StudentId = 11 ALEBO StudentId = 12;
Výraz „ StudentId = 11 ALEBO StudentId = 12 “ bude platiť iba pre študentov s Ids 11 a 12. Klauzula DELETE bude teda použitá na oboch a vymaže ich iba.
Tento príkaz by sa mal úspešne spustiť a nemali by ste dostať žiadny nasledujúci výstup:
Vymazanie týchto dvoch študentov môžete overiť výberom všetkých záznamov z tabuľky Študenti nasledujúcim spôsobom:
VYBERTE * OD študentov;
Dvoch študentov s ID 11 a 12 by ste nemali vidieť nasledovne:
Klauzula o konflikte SQLite
Predpokladajme, že máte stĺpec, ktorý má jedno z nasledujúcich obmedzení stĺpca: UNIQUE, NOT NULL, CHECK alebo PRIMARY KEY. A potom ste sa pokúsili vložiť alebo aktualizovať hodnotu do tohto stĺpca s hodnotou, ktorá je v rozpore s týmto obmedzením.
Napríklad ak má stĺpec JEDINEČNÉ obmedzenie a pokúsili ste sa vložiť už existujúcu hodnotu (duplicitnú hodnotu), ktorá je v rozpore s JEDINEČNÝM obmedzením. Potom vám klauzula KONFLIKT umožní zvoliť si, čo budete v takýchto prípadoch robiť, aby ste vyriešili tento konflikt.
Predtým, ako budeme pokračovať v vysvetľovaní, ako konflikt vyrieši doložka CONFLICT. Mali by ste pochopiť, čo je databázová transakcia.
Transakcia s databázou:
Pojem databázová transakcia je zoznam operácií SQLite (vloženie alebo aktualizácia alebo odstránenie). Databázová transakcia musí byť vykonaná ako jedna jednotka, buď všetky operácie vykonané úspešne, alebo vôbec. Ak sa jedna z nich nepodarí vykonať, všetky operácie sa zrušia.
Príklad pre databázovú transakciu:
Transakcia zameraná na prevod peňazí z jedného bankového účtu na druhý bude zahŕňať niekoľko aktivít. Táto transakčná operácia zahŕňa výber peňazí z prvého účtu a ich vloženie na iný účet. Táto transakcia musí byť úplne dokončená alebo úplne zrušená, aby zlyhala v polovici cesty.
Tu je zoznam piatich uznesení, ktoré si môžete zvoliť v klauzule CONFLICT:
- ROLLBACK - toto vráti transakciu, v ktorej je aktuálny príkaz SQLite, ktorý má konflikt, späť (zruší celú transakciu). Napríklad, ak sa pokúšate aktualizovať 10 riadkov a piaty riadok má hodnotu, ktorá je v rozpore s obmedzením, nebudú sa aktualizovať žiadne riadky, 10 riadkov zostane rovnakých. Bude vyhodená chyba.
- ABORT - preruší (zruší) aktuálny príkaz SQLite, ktorý má konflikt a transakcia nebude zrušená. Napríklad, ak sa pokúšate aktualizovať 10 riadkov a piaty riadok má hodnotu, ktorá je v rozpore s obmedzením, nebude aktualizovaná iba piata hodnota, ale ďalších 9 riadkov bude aktualizovaných. Bude vyhodená chyba.
- FAIL - zruší aktuálny príkaz SQLite, ktorý obsahuje konflikt. Transakcia však nebude pokračovať, ale budú vykonané predchádzajúce zmeny vykonané v riadkoch pred riadkom, ktorý je v konflikte. Napríklad, ak sa pokúšate aktualizovať 10 riadkov a piaty riadok má hodnotu, ktorá je v rozpore s obmedzením, aktualizujú sa iba 4 riadky a druhý nie. Bude vyhodená chyba.
- IGNORE - toto preskočí riadok, ktorý obsahuje porušenie obmedzení, a bude pokračovať v spracovávaní ďalších nasledujúcich riadkov príkazu SQLite. Napríklad, ak sa pokúšate aktualizovať 10 riadkov a piaty riadok má hodnotu, ktorá je v rozpore s obmedzením, aktualizujú sa iba 4 riadky a druhý nie. Ďalej nebude pokračovať v aktualizácii ďalších riadkov a zastaví sa na riadku, ktorý má hodnotu konfliktu. Nebude vyhodená žiadna chyba.
- REPLACE - záleží to na type obmedzenia, ktoré má porušenie:
- Ak dôjde k porušeniu obmedzenia pre JEDINEČNÉ alebo PRIMÁRNE KLÍČOVÉ obmedzenie. REPLACE nahradí riadok, ktorý spôsobí porušenie, novým vloženým alebo aktualizovaným riadkom.
- Ak dôjde k porušeniu obmedzenia NOT NULL, klauzula REPLACE nahradí hodnotu NULL predvolenou hodnotou daného stĺpca. Ak stĺpec nemá predvolenú hodnotu, potom SQLite príkaz zruší (príkaz bude zrušený)
- AK dôjde k porušeniu obmedzenia CHECK, klauzula sa zruší.
Poznámka: Vyššie uvedených 5 uznesení predstavuje možnosti, ako chcete vyriešiť konflikt. Nemusí byť nevyhnutne to, čo je použiteľné na vyriešenie jedného konfliktu, použiteľné na vyriešenie iných typov konfliktov.
Ako vyhlásiť klauzulu CONFLICT
Klauzulu ON CONFLICT môžete vyhlásiť, keď v klauzule CREATE TABLE definujete obmedzenie pre definíciu stĺpca. Pomocou nasledujúcej syntaxe:
Ako bolo vysvetlené vyššie, môžete si zvoliť jedno z piatich riešení na vyriešenie konfliktu.
ON CONFLICT IGNORE Príklad
Krok 1) Vytvorte nový predmet tabuľky takto:
VYTVORIŤ TABUĽKU [Predmety] ([SubjectId] INTEGER NIE JE NULL PRIMÁRNY KLÍČ PRE KONFLIKT IGNORE,[SubjectName] NVARCHAR NIE JE NULL);
Všimnite si, že sme v stĺpci SubjectId definovali obmedzenie PRIMARY KEY. Obmedzenie primárneho kľúča neumožňuje vloženie dvoch duplikovaných hodnôt do stĺpca SubjectId, takže všetky hodnoty v tomto stĺpci by mali byť jedinečné. Všimnite si tiež, že sme zvolili riešenie konfliktov ako „ Ignorovať “.
Príkaz by sa mal úspešne spustiť a nemali by sa vyskytnúť žiadne chyby:
Krok 2) Teraz vložíme niektoré hodnoty do nových predmetov tabuľky, ale s hodnotou, ktorá porušuje obmedzenie primárneho kľúča:
VLOŽTE DO PREDMETOV HODNOTY (1, 'Algebra');VLOŽTE DO HODNOTY predmetov (2, 'Kurz databázy');INSERT INTO Subjects VALUES (2, 'Data Structures');INSERT INTO Subjects VALUES (4, 'Algorithms');
V tomto príkaze INSERT sme sa pokúsili vložiť dva kurzy s rovnakým predmetom ID primárneho kľúča 2, čo predstavuje porušenie obmedzenia primárneho kľúča.
Príkazy by mali bežať dobre a nemali by sa vyskytnúť žiadne chyby. Ako nasledujúce:
Krok 3) Vyberte všetky predmety z tabuľky takto:
VYBERTE * Z PREDMETOV;
Dostanete zoznam predmetov:
Všimnite si, že namiesto troch riadkov boli vložené iba tri predmety „ Algebra, kurz databázy a algoritmy “.
Riadok s hodnotou, ktorá porušuje obmedzenie primárneho kľúča, ktorým je „Dátové štruktúry“, bol ignorovaný a nebol vložený. Po tomto riadku však SQLite pokračuje vo vykonávaní ďalších príkazov.
Krok 4) ODSTRÁNTE predmety tabuľky a vytvorte ju znova pomocou inej klauzuly ON CONFLICT pre nasledujúci príklad spustením nasledujúceho príkazu:
DROP TABLE predmety;
Príkaz drop vymaže celú tabuľku. Predmety tabuľky teraz neexistujú.
NA VÝMENE KONFLIKTOV Príklad
Krok 1) Vytvorte nový predmet tabuľky takto:
VYTVORIŤ TABUĽKU [Predmety] ([SubjectId] INTEGER NIE JE NULL PRIMÁRNY KLÍČ NA VÝMENU KONFLIKTU,[SubjectName] NVARCHAR NIE JE NULL);
Všimnite si, že sme v stĺpci SubjectId definovali obmedzenie PRIMARY KEY. Obmedzenie primárneho kľúča neumožňuje vloženie dvoch duplikovaných hodnôt do stĺpca SubjectId, takže všetky hodnoty v tomto stĺpci by mali byť jedinečné.
Všimnite si tiež, že sme zvolili možnosť riešenia konfliktov ako „ VYMENIŤ “. Príkaz by sa mal úspešne spustiť a nemali by sa vyskytnúť žiadne chyby:
Krok 2) Teraz vložíme niektoré hodnoty do novej tabuľky Predmety, ale s hodnotou, ktorá porušuje obmedzenie primárneho kľúča:
VLOŽTE DO PREDMETOV HODNOTY (1, 'Algebra');VLOŽTE DO HODNOTY predmetov (2, 'Kurz databázy');INSERT INTO Subjects VALUES (2, 'Data Structures');INSERT INTO Subjects VALUES (4, 'Algorithms');
V tomto príkaze INSERT sme sa pokúsili vložiť dva kurzy s rovnakým predmetom ID primárneho kľúča 2, čo predstavuje porušenie obmedzenia primárneho kľúča.
Príkazy by mali bežať dobre a nemali by sa vyskytnúť žiadne chyby. Ako nasledujúce:
Krok 3) Vyberte všetky predmety z tabuľky takto:
VYBERTE * Z PREDMETOV;
Dostanete zoznam predmetov:
Všimnite si, že boli vložené iba tri predmety „ Algebra, dátové štruktúry a algoritmy “, zatiaľ čo sme sa pokúsili vložiť 4 riadky.
Riadok s hodnotou, ktorá porušuje obmedzenie primárneho kľúča, ktorým je „ Dátové štruktúry “, nahradil hodnotu „ Kurz databázy “ nasledovne:
- Prvé dva príkazy vloženia fungujú bez problémov. Budú vložené dva predmety Algebra a databázový kurz s ID 1, 2.
- Keď sa SQLite pokúsi spustiť tretí príkaz insert s SubjectId 2 a SubjectName " Data Structures ", zistí, že už existuje predmet s SubjectId = 2. Čo je porušenie obmedzenia primárneho kľúča definovaného v stĺpci SubjectId.
- SQLite pre tento konflikt zvolí ROZHRANIE. Nahradí hodnotu, ktorá už existuje v tabuľke predmetov, novou hodnotou z príkazu insert. Takže, " Database Kurz bude" SubjectName byť nahradený s " dátovými štruktúrami " SubjectName.
Zhrnutie:
Klauzuly INSERT, UPDATE a DELETE sa používajú na úpravu údajov v databáze SQLite. Doložka CONFLICT je účinná doložka na vyriešenie konfliktu medzi údajmi a údajmi, ktoré je potrebné upraviť.