SQLite INSERT, UPDATE, DELETE Interogare cu Exemplu

Cuprins:

Anonim

Clauzele de modificare a datelor din SQLite sunt instrucțiuni INSERT, UPDATE și DELETE. Este folosit pentru inserarea de rânduri noi, actualizarea valorilor existente sau ștergerea rândurilor din baza de date.

În acest tutorial, veți învăța-

  • INTRODUCE
  • Actualizați
  • Șterge
  • Clauza de conflict

Rețineți că, pentru toate exemplele următoare, trebuie să rulați sqlite3.exe și să deschideți o conexiune la baza de date eșantion, în curând:

Pasul 1) În acest pas,

  1. Deschideți Computerul meu și navigați la următorul director „ C: \ sqlite ” și
  2. Apoi deschideți „ sqlite3.exe ”:

Pasul 2) Deschideți baza de date „ TutorialsSampleDB.db ” prin următoarea comandă:

.Open TutorialsSampleDB.db

Acum sunteți gata să executați orice tip de interogare pe baza de date.

SQLite INSERT

SQLite INSERT este utilizat pentru a insera înregistrări într-un tabel specificat al bazei de date. trebuie să utilizați clauza „INSERT”. Sintaxa clauzei INSERT este după cum urmează:

  • După clauza INSERT, ar trebui să specificați în ce tabel trebuie să introduceți valorile.
  • După numele tabelului, scrieți lista coloanelor, doriți să introduceți valorile în.
  • Puteți ignora numele coloanelor și nu le scrieți.
  • Dacă nu scrieți numele coloanelor, valorile vor fi inserate în toate coloanele găsite în tabel cu aceeași ordine, coloanele sunt definite în tabel.
  • După clauza VALUES, ar trebui să enumerați valorile care trebuie inserate.
  • Fiecare clauză INSERT introduce doar un rând. Dacă doriți să inserați mai multe rânduri, ar trebui să scrieți mai multe clauze INSERT, una pentru fiecare rând.

SQLite Insert Exemplu

În exemplul următor, vom insera 2 rânduri în tabelul studenților, unul pentru fiecare student:

INSERT INTO Students (StudentId, StudentName, DepartmentId, DateOfBirth)VALORI (11, „Ahmad”, 4, „1997-10-12”);INSERAȚI ÎN VALORILE Elevilor (12, „Aly”, 4, „1996-10-12”);

Acest lucru ar trebui să ruleze cu succes și nu există nicio ieșire pentru aceasta:

Aceasta va insera doi studenți:

  • Primul student cu StudentId = 11, StudentName = Ahmad, DepartmentId = 4 și DateOfBirth = 1997-10-12.
  • Al doilea student cu StudentId = 12, StudentName = Aly, DepartmentId = 4 și DateOfBirth = 1996-10-12 '.

În prima declarație, am enumerat numele coloanelor „ StudentId, StudentName, DepartmentId, DateOfBirth ”. Cu toate acestea, în a doua declarație, nu am făcut-o.

Cele patru valori " 12, 'Aly', 4, '1996-10-12' " vor fi inserate în toate cele patru coloane din tabelul Studenți în aceeași ordine în care sunt definite coloanele.

Acum, să verificăm dacă cei doi studenți au fost introduși în tabelul Studenți executând următoarea interogare:

SELECTAȚI * DIN STUDENȚI;

Apoi, ar trebui să îi vedeți pe cei doi studenți care s-au întors din acea interogare după cum urmează:

Actualizare SQLite

SQLite UPDATE Query este utilizat pentru modificarea înregistrărilor existente într-un tabel. Puteți utiliza clauza WHERE cu interogarea UPDATE pentru a actualiza rândurile selectate. Clauza UPDATE actualizează un tabel modificând o valoare pentru o anumită coloană. Următoarea este sintaxa clauzei UPDATE:

Ca următorul:

  • După „clauza de actualizare”, ar trebui să scrieți numele tabelului pentru actualizare.
  • Trebuie să scrieți „clauza SET” care este utilizată pentru a scrie numele coloanei de actualizat și valoarea care trebuie actualizată.
  • Puteți actualiza mai multe coloane. Puteți utiliza o virgulă între fiecare linie.
  • Puteți specifica o clauză WHERE pentru a specifica numai câteva rânduri. Doar rândurile pe care expresia le evaluează drept adevărate sunt actualizate. Dacă nu ați specificat o clauză WHERE, toate rândurile vor fi actualizate.

Exemplu de actualizare SQLite

În următoarea declarație UPDATE, vom actualiza DepartmentId pentru Student cu StudentId = 6 să fie 3:

ACTUALIZARE StudențiSET DepartmentId = 3UNDE StudentId = 6;

Aceasta ar trebui să ruleze cu succes și nu ar trebui să obțineți nicio ieșire:

În clauza UPDATE, am specificat că dorim să actualizăm tabelul Studenți.

  • În clauza WHERE, am filtrat toți studenții pentru a selecta doar rândul pentru StudentId = 6.
  • Clauza SET va actualiza valoarea ID-ului departamentului pentru studenții selectați să fie 3.

Acum, să verificăm dacă studentul cu ID 6 este actualizat, executând următoarea comandă:

SELECTAȚI * DIN STUDENȚI UNDE StudentId = 6;

Acum ar trebui să vedeți că valoarea ID-ului departamentului este acum 3 după cum urmează:

Ștergere SQLite

Interogarea SQLite DELETE este utilizată pentru a elimina înregistrările existente dintr-un tabel specificat. Puteți utiliza clauza WHERE cu interogări DELETE pentru a șterge rândurile selectate.

Clauza DELETE are următoarea sintaxă:

  • Trebuie să scrieți un nume de tabel după clauza DELETE FROM, din care doriți să ștergeți înregistrările. ( Notă:clauza DELETE . Este folosit pentru a șterge unele înregistrări dintr - un tabel sau șterge toate înregistrările și nu va șterge tabelul de sine Cu toate acestea, clauza DROP este utilizată pentru a șterge întregul tabel cu toate înregistrările pe ea. )
  • Dacă scrieți clauza DELETE astfel „DELETE FROM guru”, aceasta va șterge toate înregistrările din tabelul „guru”.
  • Puteți specifica o condiție WHERE cu o expresie dacă doriți să ștergeți anumite rânduri. Vor fi șterse numai rândurile pentru care expresia se evaluează drept adevărat. De exemplu, „DELETE FROM guru WHERE id> 5” - aceasta va șterge numai înregistrările care au id mai mare de 5.

Exemplu

În următoarea declarație, vom șterge doi studenți cu StudentId 11 și 12:

ȘTERGEȚI DIN Studenți UNDE StudentId = 11 SAU StudentId = 12;

Expresia „ StudentId = 11 SAU StudentId = 12 ” va fi adevărată numai pentru studenții cu ID-urile 11 și 12. Deci clauza DELETE va fi aplicată pe ambele și le va șterge numai.

Această comandă ar trebui să ruleze cu succes și nu ar trebui să obțineți nicio ieșire după cum urmează:

Puteți verifica dacă cei doi studenți au fost șterse, selectând toate înregistrările din tabelul Studenți după cum urmează:

SELECTAȚI * DIN STUDENȚI;

Nu ar trebui să îi vedeți pe cei doi studenți cu codurile 11 și 12 după cum urmează:

Clauza de conflict SQLite

Să presupunem că aveți o coloană care are una dintre următoarele constrângeri de coloană: UNIC, NU NUL, VERIFICĂ sau CHEIE PRIMARĂ. Și apoi ați încercat să inserați sau să actualizați o valoare pe acea coloană cu o valoare care intră în conflict cu această constrângere.

De exemplu, dacă o coloană are o constrângere UNIQUE și ați încercat să inserați o valoare care există deja (o valoare duplicată), care intră în conflict cu constrângerea UNIQUE. Apoi, clauza CONFLICT vă permite să alegeți ce să faceți în astfel de cazuri pentru a rezolva acest conflict.

Înainte de a explica în continuare modul în care clauza CONFLICT rezolvă conflictul. Ar trebui să înțelegeți ce este o tranzacție în baza de date.

Tranzacția bazei de date:

Termenul tranzacție bază de date este o listă de operațiuni SQLite (inserare sau actualizare sau ștergere). Tranzacția bazei de date trebuie executată ca o singură unitate, fie toate operațiunile executate cu succes, fie deloc. Toate operațiunile vor fi anulate dacă una dintre ele nu a reușit să se execute.

Exemplu pentru o tranzacție în baza de date:

Tranzacția pentru transferul de bani dintr-un cont bancar în altul va implica câteva activități. Această operațiune de tranzacție include retragerea de bani din primul cont și depunerea lor într-un alt cont. Această tranzacție trebuie completată sau complet anulată și să nu eșueze la jumătatea drumului.

Iată lista celor cinci rezoluții pe care le puteți alege în clauza CONFLICT:

  1. ROLLBACK - aceasta va retrage tranzacția în care se află instrucțiunea SQLite curentă care are conflictul (va anula întreaga tranzacție). De exemplu, dacă încercați să actualizați 10 rânduri, iar al cincilea rând are o valoare care intră în conflict cu o constrângere, atunci niciun rând nu va fi actualizat, cele 10 rânduri vor rămâne la fel. O eroare va fi aruncată.
  2. ABORT - aceasta va anula (anula) instrucțiunea SQLite curentă numai care are conflictul și tranzacția nu va fi anulată. De exemplu, dacă încercați să actualizați 10 rânduri, iar al cincilea rând are o valoare care intră în conflict cu o constrângere, atunci doar a cincea valoare nu va fi actualizată, dar celelalte 9 rânduri vor fi actualizate. O eroare va fi aruncată.
  3. FAIL - anulează declarația SQLite curentă care are conflictul. Cu toate acestea, tranzacția nu va continua, dar modificările anterioare aduse rândurilor înainte de rândul care are conflictul vor fi comise. De exemplu, dacă încercați să actualizați 10 rânduri, iar al cincilea rând are o valoare care intră în conflict cu o constrângere, atunci doar cele 4 rânduri vor fi actualizate, iar celălalt nu. O eroare va fi aruncată.
  1. IGNORE - aceasta va sări peste rândul care conține încălcarea constrângerii și va continua procesarea celorlalte rânduri următoare ale instrucțiunii SQLite. De exemplu, dacă încercați să actualizați 10 rânduri, iar al cincilea rând are o valoare care intră în conflict cu o constrângere, atunci doar cele 4 rânduri vor fi actualizate, iar celălalt nu. Nu va continua mai departe actualizarea altor rânduri și oprirea la rândul care are valoarea conflictului. Nu va fi aruncată nicio eroare.
  1. REPLACE - depinde de tipul de constrângere care are încălcarea:
  • Atunci când există o încălcare a constrângerii pentru constrângerea CHEIE UNICĂ sau PRIMARĂ. REPLACE va înlocui rândul care provoacă încălcarea cu noul rând inserat sau actualizat.
  • Când există o încălcare a constrângerii NOT NULL, clauza REPLACE va înlocui valoarea NULL cu valoarea implicită a acelei coloane. Dacă coloana nu are o valoare implicită, atunci SQLite va anula declarația (instrucțiunea va fi anulată)
  • DACĂ se produce încălcarea constrângerii CHECK, clauza va fi anulată.

Notă: Cele 5 rezoluții de mai sus sunt opțiuni pentru cum doriți să rezolvați conflictul. Este posibil să nu fie neapărat ceea ce este aplicabil pentru rezolvarea unui conflict, este aplicabil pentru rezolvarea altor tipuri de conflicte.

Cum să declarați clauza CONFLICT

Puteți declara clauza ON CONFLICT atunci când definiți o constrângere pentru o definiție a coloanei în clauza CREATE TABLE. Folosind următoarea sintaxă:

Puteți alege una dintre cele cinci rezoluții pentru a rezolva conflictul, așa cum s-a explicat anterior.

ON CONFLICT IGNORE Exemplu

Pasul 1) Creați un subiect de tabel nou după cum urmează:

CREARE TABEL [Subiecte] ([SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE,[SubjectName] NVARCHAR NOT NULL); 

Observați că am definit o constrângere PRIMARY KEY în coloana SubjectId. Constrângerea cheii primare nu va permite inserarea a două valori duplicate în coloana SubjectId, astfel încât toate valorile din acea coloană să fie unice. De asemenea, observați că alegem o soluție de conflict pentru a fi „ IGNORE ”.

Comanda ar trebui să ruleze cu succes și nu ar trebui să primiți erori:

Pasul 2) Acum, să inserăm câteva valori în noile subiecte ale tabelului, dar cu o valoare care încalcă constrângerea cheii principale:

INSERT INTO Subjects VALUES (1, 'Algebra');INSERAȚI ÎN VALORI subiecte (2, „Cursul bazei de date”);INSERAȚI ÎN VALORI subiecte (2, „Structuri de date”);INSERAȚI ÎN VALORI subiecte (4, „Algoritmi”);

În această instrucțiune INSERT, am încercat să inserăm două cursuri cu același subiect cheie primară id 2, ceea ce reprezintă o încălcare a constrângerii cheii primare.

Comenzile ar trebui să ruleze bine și nu ar trebui să primiți nicio eroare. Ca următorul:

Pasul 3) Selectați toate subiectele din tabel după cum urmează:

SELECT * DIN Subiecte;

Aceasta vă va oferi lista subiectelor:

Observați că doar trei subiecte au fost inserate „ Algebră, Curs de baze de date și algoritmi ” în loc de 4 rânduri.

Rândul care are valoarea care încalcă constrângerea cheii principale, care este „Structuri de date” a fost ignorat și nu a fost inserat. Cu toate acestea, SQLite continuă să execute alte instrucțiuni după acel rând.

Pasul 4) ȘTERGE subiectele tabelului pentru a-l crea din nou cu o clauză diferită ON CONFLICT pentru următorul exemplu executând următoarea comandă:

TABEL DE DROP Subiecte; 

Comanda drop șterge întregul tabel. Subiectele din tabel acum nu există.

PENTRU ÎNLOCUIREA CONFLICTELOR Exemplu

Pasul 1) Creați un subiect de tabel nou după cum urmează:

CREARE TABEL [Subiecte] ([SubjectId] INTEGER NU CHEIE PRIMARĂ NULĂ PENTRU ÎNLOCUIREA CONFLICTELOR,[SubjectName] NVARCHAR NOT NULL); 

Observați că am definit o constrângere PRIMARY KEY pe coloana SubjectId. Constrângerea cheii principale nu va permite inserarea a două valori duplicate în coloana SubjectId, astfel încât toate valorile din acea coloană să fie unice.

De asemenea, observați că alegem o opțiune de soluționare a conflictelor pentru a fi „ ÎNLOCUIRE ”. Comanda ar trebui să ruleze cu succes și nu ar trebui să primiți erori:

Pasul 2) Acum, să inserăm câteva valori în noul tabel Subiecte, dar cu o valoare care încalcă constrângerea cheii principale:

INSERT INTO Subjects VALUES (1, 'Algebra');INSERAȚI ÎN VALORI subiecte (2, „Cursul bazei de date”);INSERAȚI ÎN VALORI subiecte (2, „Structuri de date”);INSERAȚI ÎN VALORI subiecte (4, „Algoritmi”);

În această instrucțiune INSERT, am încercat să inserăm două cursuri cu același subiect cheie primară id 2, ceea ce reprezintă o încălcare a constrângerii cheii primare.

Comenzile ar trebui să ruleze bine și nu ar trebui să primiți nicio eroare. Ca următorul:

Pasul 3) Selectați toate subiectele din tabel după cum urmează:

SELECT * DIN Subiecte;

Aceasta vă va oferi lista subiectelor:

Observați că doar trei subiecte au fost inserate „ Algebră, structuri de date și algoritmi ”, în timp ce am încercat să introducem 4 rânduri.

Rândul care are valoarea care încalcă constrângerea cheii primare, care este „ Structuri de date ” a înlocuit valoarea „ Curs bază de date ” după cum urmează:

  • Primele două instrucțiuni de inserare rulează fără probleme. Două subiecte Algebră și Cursul bazei de date vor fi inserate cu ID-urile 1, 2.
  • Când SQLite încearcă să ruleze a treia instrucțiune insert cu SubjectId 2 și SubjectName " Structuri de date ", află că există deja un subiect cu SubjectId = 2. Care este o încălcare pentru constrângerea cheii primare definită în coloana SubjectId.
  • SQLite va alege o rezoluție REPLACE pentru acest conflict. Înlocuiește valoarea care există deja în tabelul subiecților cu noua valoare din instrucțiunea insert. Deci, " Cursul bazei de date " SubjectName va fi înlocuit cu " Structuri de date " SubjectName.

Rezumat:

Clauzele INSERT, UPDATE și DELETE sunt utilizate pentru a modifica datele din baza de date SQLite. Clauza CONFLICT este o clauză puternică pentru a rezolva orice conflict între date și datele de modificat.