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.
  • Atunci cรขnd 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.

Rezumaศ›i aceastฤƒ postare cu: