SQLite INSERT, UPDATE, DELETE Interogare cu exemplu

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

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 ca flux:

Pas 1) În această etapă,

  1. Deschideți My Computer și navigați la următorul director „C:\sqlite" și
  2. Apoi deschideți „sqlite3.exe„:

SQLite Interogare - INSERT, UPDATE, DELETE

Pas 2) Deschide baza de date „TutorialeSampleDB.db” prin următoarea comandă:

.open TutorialsSampleDB.db

SQLite Interogare - INSERT, UPDATE, DELETE

Acum sunteți gata să rulați orice tip de interogare în baza de date.

SQLite INSERT

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

SQLite INSERT

  • După clauza INSERT, ar trebui să precizați în ce tabel trebuie să introduceți valorile.
  • După numele tabelului scrieți lista de coloane, doriți să introduceți valorile în care.
  • 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 în aceeași ordine, coloanele sunt definite în tabel.
  • După clauza VALUES, ar trebui să enumerați valorile care trebuie inserate.
  • Fiecare clauză INSERT inserează doar un rând. Dacă doriți să inserați mai multe rânduri, ar trebui să scrieți mai multe clauze INSERT, câte una pentru fiecare rând.

SQLite Exemplu de inserare

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

INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth)
              VALUES(11, 'Ahmad', 4, '1997-10-12');

INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');

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

SQLite Insera

Aceasta va introduce doi elevi:

  • Primul elev 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„.Totuși, în a doua declarație, nu am făcut-o.

Cele patru valori”12, „Aly”, 4, „1996-10-12”” va fi inserat în toate cele patru coloane ale tabelului Studenți în aceeași ordine în care sunt definite coloanele.

Acum, să verificăm dacă cei doi studenți au fost inserați în tabelul Studenți, rulând următoarele întrebare:

SELECT * FROM Students;

Apoi ar trebui să vedeți cei doi studenți reveniți de la acea interogare după cum urmează:

SQLite Insera

SQLite Actualizează

SQLite UPDATE Query este folosită pentru a modifica înregistrările existente într-un tabel. Puteți utiliza clauza WHERE cu interogarea UPDATE pentru a actualiza rândurile selectate. Clauza UPDATE actualizează un tabel prin modificarea unei valori pentru o anumită coloană. Următoarea este sintaxa clauzei UPDATE:

SQLite Actualizează

După cum urmează:

  • După „clauza de actualizare”, ar trebui să scrieți numele tabelului de actualizat.
  • Trebuie să scrieți „clauza SET” care este folosită pentru a scrie numele coloanei de actualizat și valoarea de actualizat.
  • Puteți actualiza mai multe coloane. Puteți folosi o virgulă între fiecare rând.
  • Puteți specifica o clauză WHERE pentru a specifica doar unele rânduri. Sunt actualizate doar rândurile pe care expresia le evaluează drept adevărat. Dacă nu ați specificat o clauză WHERE, toate rândurile vor fi actualizate.

SQLite Exemplu de actualizare

În următoarea instrucțiune UPDATE, vom actualiza DepartmentId pentru Studentul cu StudentId = 6 pentru a fi 3:

UPDATE Students
SET DepartmentId = 3 
WHERE StudentId = 6;

Aceasta ar trebui să ruleze cu succes și nu ar trebui să obțineți niciun rezultat:

SQLite Actualizează

Î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, rulând următoarea comandă:

SELECT * FROM Students WHERE StudentId = 6;

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

SQLite Actualizează

SQLite Șterge

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

Clauza DELETE are următoarea sintaxă:

SQLite Șterge

  • Trebuie să scrieți un nume de tabel după clauza DELETE FROM, din care doriți să ștergeți înregistrările. (Notă: faptul că clauza DELETE este folosit pentru a șterge unele înregistrări dintr-un tabel sau pentru a șterge toate înregistrările și nu va șterge tabelul în sine. Însă clauza DROP este folosit pentru a șterge întregul tabel cu toate înregistrările de pe el.)
  • 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. Doar rândurile pentru care expresia este evaluată ca adevărată vor fi șterse. De exemplu, „DELETE FROM guru WHERE id > 5” – aceasta va șterge numai înregistrările care au id-ul mai mare de 5.

Exemplu

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

DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;

Expresia "StudentId = 11 SAU StudentId = 12” va fi valabilă 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 niciun rezultat după cum urmează:

SQLite Șterge

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

SELECT * FROM Students;

Nu ar trebui să vedeți cei doi studenți cu ID-urile 11 și 12 după cum urmează:

SQLite Șterge

SQLite Clauza de conflict

Să presupunem că aveți o coloană care are una dintre următoarele constrângeri de coloană: UNIQUE, NOT NULL, CHECK sau PRIMARY KEY. Ș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 continua explicarea modului în care clauza CONFLICT rezolvă conflictul. Ar trebui să înțelegeți ce este o tranzacție de bază de date.

Tranzacție cu baze de date

Termenul tranzacție baza de date este o listă de SQLite operațiuni (inserare sau actualizare sau ștergere). Tranzacția bazei de date trebuie să fie 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 de bază de date

Tranzacția de transfer de bani dintr-un cont bancar în altul va implica câteva activități. Această operațiune de tranzacție include retragerea banilor din primul cont și depunerea acestora în alt cont. Această tranzacție trebuie să fie finalizată sau anulată complet și să nu eșueze la jumătate.

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

  1. REALIZARE – aceasta va derula înapoi tranzacția în care este curentă SQLite declarație 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 aceleași. O eroare va fi aruncată.
  2. AVORT – aceasta va anula (anula) curentul SQLite numai declarație care are conflict ș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 numai a cincea valoare nu va fi actualizată, dar celelalte 9 rânduri vor fi actualizate. O eroare va fi aruncată.
  3. ESCĂ - întrerupe curentul SQLite declarație 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 numai cele 4 rânduri vor fi actualizate, iar celălalt nu. O eroare va fi aruncată.
  1. IGNORA – aceasta va sări peste rândul care conține încălcarea constrângerii și va continua procesarea celorlalte rânduri următoare ale SQLite afirmaț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 numai cele 4 rânduri vor fi actualizate, iar celălalt nu. Nu va continua să actualizeze alte rânduri și să se oprească la rândul care are valoarea conflictului. Nicio eroare nu va fi aruncată.
  1. A INLOCUI – depinde de tipul de constrângere care are încălcarea:
  • Când există o încălcare a constrângerii pentru constrângerea UNIQUE sau PRIMARY KEY. 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 (declarația va fi anulată)
  • DACĂ are loc î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 a rezolva un conflict este aplicabil pentru a rezolva alte tipuri de conflicte.

Cum se declară clauza CONFLICT

Puteți declara clauza ON CONFLICT atunci când definiți o constrângere pentru definiția unei coloane în cadrul clauzei CREATE TABLE. Folosind următoarea sintaxă:

SQLite Clauza de conflict

Puteți alege una dintre cele cinci rezoluții pentru a rezolva conflictul, așa cum a fost explicat mai sus.

ON CONFLICT IGNORE Exemplu

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

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE,
    [SubjectName] NVARCHAR NOT NULL
);

Observați că am definit o constrângere PRIMARY KEY pe 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 care să fie „IGNORA".

Comanda ar trebui să ruleze cu succes și nu ar trebui să primești erori:

ON CONFLICT IGNORE Exemplu

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

INSERT INTO Subjects VALUES(1, 'Algebra');
INSERT INTO Subjects VALUES(2, 'Database Course');
INSERT INTO Subjects VALUES(2, 'Data Structures');
INSERT INTO Subjects VALUES(4, 'Algorithms');

În aceste instrucțiuni INSERT, am încercat să inserăm două cursuri cu același ID de subiect al cheii primare 2, ceea ce reprezintă o încălcare a constrângerii cheii primare.

Comenzile ar trebui să ruleze bine și nu ar trebui să primești erori. După cum urmează:

ON CONFLICT IGNORE Exemplu

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

SELECT * FROM Subjects;

Aceasta vă va oferi lista de subiecte:

ON CONFLICT IGNORE Exemplu

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

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

Pas 4) ȘTERGEȚI subiectele tabelului pentru a le crea din nou cu o clauză ON CONFLICT diferită pentru următorul exemplu, rulând următoarea comandă:

DROP TABLE Subjects;

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

ON CONFLICT REPLACE Exemplu

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

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE,
    [SubjectName] NVARCHAR NOT NULL
);

Observați că am definit o constrângere PRIMARY KEY pe 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 opțiune de rezolvare a conflictelor să fie „A INLOCUI„. Comanda ar trebui să ruleze cu succes și nu ar trebui să primești erori:

ON CONFLICT REPLACE Exemplu

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

INSERT INTO Subjects VALUES(1, 'Algebra');
INSERT INTO Subjects VALUES(2, 'Database Course');
INSERT INTO Subjects VALUES(2, 'Data Structures');
INSERT INTO Subjects VALUES(4, 'Algorithms');

În aceste instrucțiuni INSERT, am încercat să inserăm două cursuri cu același ID de subiect al cheii primare 2, ceea ce reprezintă o încălcare a constrângerii cheii primare.

Comenzile ar trebui să ruleze bine și nu ar trebui să primești erori. După cum urmează:

ON CONFLICT REPLACE Exemplu

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

SELECT * FROM Subjects;

Aceasta vă va oferi lista de subiecte:

ON CONFLICT REPLACE Exemplu

Observați că au fost introduse doar trei subiecte „Algebră, structuri de date și Algorithms” î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 de baze de date” după cum urmează:

  • Primele două instrucțiuni de inserare funcționează bine, fără probleme. Două materii Algebră și Curs de baze de date vor fi inserate cu id-urile 1, 2.
  • Cand SQLite încearcă să ruleze a treia instrucțiune de inserare cu SubjectId 2 și SubjectName „Structuri de date„, află că există deja un subiect cu SubjectId = 2. Ceea ce 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 de subiecte cu noua valoare din instrucțiunea insert. Asa ca "Curs de baze de date” SubjectName va fi înlocuit cu “Structuri de date” SubiectNume.

Rezumat

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