Datu modifikācijas klauzulas SQLite ir INSERT, UPDATE un DELETE priekšraksti. To izmanto jaunu rindu ievietošanai, esošo vērtību atjaunināšanai vai rindu dzēšanai no datu bāzes.
Šajā apmācībā jūs uzzināsiet
- IELIKT
- Atjaunināt
- Dzēst
- Konflikta klauzula
Ņemiet vērā, ka visiem šiem piemēriem ir jāpalaiž sqlite3.exe un jāatver savienojums ar datu bāzes paraugu kā plūstošu:
1. solis) Šajā solī
- Atveriet Mans dators un dodieties uz šādu direktoriju " C: \ sqlite " un
- Pēc tam atveriet " sqlite3.exe ":
2. solis) Atveriet datubāzi " TutorialsSampleDB.db " ar šādu komandu:
.atvērtas apmācības paraugsDB.db
Tagad esat gatavs datu bāzē palaist jebkura veida vaicājumus.
SQLite IEVADĪT
SQLite INSERT tiek izmantots ierakstu ievietošanai noteiktā datu bāzes tabulā. jums jāizmanto klauzula “INSERT”. Klauzulas INSERT sintakse ir šāda:
- Pēc klauzulas INSERT jums jānorāda, kurā tabulā vērtības jāievieto.
- Pēc tabulas nosaukuma ierakstāt kolonnu sarakstu, kurā vēlaties ievietot vērtības.
- Jūs varat ignorēt kolonnu nosaukumu un nerakstīt tām.
- Ja nerakstīsit kolonnu nosaukumu, vērtības tiks ievietotas visās tabulā atrodamajās kolonnās ar tādu pašu secību, kolonnas ir definētas tabulā.
- Pēc klauzulas VALUES jums jāuzskaita ievietojamās vērtības.
- Katrā klauzulā INSERT tiek ievietota tikai viena rinda. Ja vēlaties ievietot vairākas rindas, jums vajadzētu uzrakstīt vairākas INSERT klauzulas, pa vienai katrai rindai.
SQLite ievietošanas piemērs
Šajā piemērā mēs ievietosim 2 rindas studentu tabulā, pa vienam katram studentam:
INSERT INTO Students (StudentId, StudentName, DepartmentId, DateOfBirth)VĒRTĪBAS (11, 'Ahmad', 4, '1997-10-12');IEVADĪT studentu vērtībās (12, 'Aly', 4, '1996-10-12');
Tam vajadzētu darboties veiksmīgi, un tam nav izejas:
Tas ievietos divus studentus:
- Pirmais students ar StudentId = 11, StudentName = Ahmad, DepartmentId = 4 un DateOfBirth = 1997-10-12.
- Otrais students ar StudentId = 12, StudentName = Aly, DepartmentId = 4 un DateOfBirth = 1996-10-12 '.
Pirmajā paziņojumā mēs uzskaitījām kolonnu nosaukumus " StudentId, StudentName, DepartmentId, DateOfBirth ". Tomēr otrajā paziņojumā mēs to nedarījām.
Četras vērtības " 12, 'Aly", 4,' 1996-10-12 "tiks ievietotas visās četrās Studentu tabulas kolonnās tādā pašā secībā, kādā kolonnas ir definētas.
Tagad pārbaudīsim, vai abi studenti tika ievietoti tabulā Studenti, izpildot šādu vaicājumu:
ATLASIET * NO studentiem;
Tad jums vajadzētu redzēt, kā abi studenti atgriezās no šī vaicājuma šādi:
SQLite atjauninājums
SQLite UPDATE Query tiek izmantots tabulas esošo ierakstu modificēšanai. Lai atjauninātu atlasītās rindas, varat izmantot klauzulu WHERE ar UPDATE vaicājumu. Klauzula UPDATE atjaunina tabulu, mainot noteiktas kolonnas vērtību. Šī ir klauzulas UPDATE sintakse:
Kā sekojošais:
- Pēc atjaunināšanas klauzulas jums jāuzraksta atjaunināmās tabulas nosaukums.
- Jums ir jāuzraksta "klauzula", ko izmanto, lai ierakstītu atjaunināmās kolonnas nosaukumu un atjaunināmo vērtību.
- Varat atjaunināt vairākas kolonnas. Starp katru rindiņu varat izmantot komatu.
- Lai norādītu tikai dažas rindas, varat norādīt klauzulu WHERE. Tiek atjauninātas tikai tās rindas, kuras izteiksme novērtē kā patiesu. Ja jūs nenorādījāt klauzulu WHERE, visas rindas tiks atjauninātas.
SQLite atjaunināšanas piemērs
Šajā UPDATE paziņojumā mēs atjaunināsim DepartmentId studentam ar StudentId = 6 uz 3:
ATJAUNINĀT studentusSET nodaļas ID = 3WHERE StudentId = 6;
Tam vajadzētu darboties veiksmīgi, un jums nevajadzētu iegūt nevienu rezultātu:
Klauzulā UPDATE mēs norādījām, ka mēs vēlamies atjaunināt tabulu Students.
- Klauzulā mēs filtrējām visus studentus, lai atlasītu tikai rindu StudentId = 6.
- SET klauzula atjauninās katedras ID vērtību atlasītajiem studentiem uz 3.
Tagad pārbaudīsim, vai students ar ID 6 ir atjaunināts, izpildot šādu komandu:
ATLASIET * no studentiem, kur StudentId = 6;
Tagad jums vajadzētu redzēt, ka nodaļas Id vērtība tagad ir 3:
SQLite Dzēst
SQLite DELETE vaicājums tiek izmantots esošo ierakstu noņemšanai no norādītās tabulas. Lai dzēstu atlasītās rindas, varat izmantot klauzulu WHERE ar DELETE vaicājumiem.
Klauzulai DELETE ir šāda sintakse:
- Pēc klauzulas DELETE FROM jums ir jāraksta tabulas nosaukums, no kura vēlaties izdzēst ierakstus. ( Piezīme: ka DELETE klauzula . Tiek izmantots, lai dzēstu dažus ierakstus no tabulas vai izdzēst visus ierakstus, un tas nevar izdzēst pašu tabulu Tomēr DROP klauzula tiek izmantots, lai dzēstu visu tabulu ar visiem ierakstiem par to. )
- Ja jūs rakstāt klauzulu DELETE tāpat kā "DELETE FROM guru", tas izdzēsīs visus ierakstus no tabulas "guru".
- Jūs varat norādīt nosacījumu WHERE ar izteiksmi, ja vēlaties izdzēst dažas konkrētas rindas. Tiks dzēstas tikai tās rindas, kurām izteiksme novērtē patiesu. Piemēram, "Dzēst no guru WHERE id> 5" - tas izdzēsīs tikai tos ierakstus, kuru ID ir lielāks par 5.
Piemērs
Šajā paziņojumā mēs izdzēsīsim divus studentus ar StudentId 11 un 12:
Dzēst no studentiem, kur StudentId = 11 VAI StudentId = 12;
Izteiciens " StudentId = 11 VAI StudentId = 12 " attieksies tikai uz studentiem, kuru ID ir 11 un 12. Tātad klauzula DELETE tiks piemērota abiem un tikai tos izdzēsīs.
Šai komandai vajadzētu darboties veiksmīgi, un jums nevajadzētu iegūt izvadi šādi:
Jūs varat pārbaudīt, vai abi studenti ir izdzēsti, tabulā Studenti atlasot visus ierakstus šādi:
ATLASIET * NO studentiem;
Jums nevajadzētu redzēt divus studentus, kuru ID ir 11 un 12, šādi:
SQLite konflikta klauzula
Pieņemsim, ka jums ir kolonna, kurai ir viens no šiem kolonnu ierobežojumiem: UNIKĀLA, NE NULL, PĀRBAUDE vai PAMATLĪDZEKLIS. Un tad jūs mēģinājāt šajā kolonnā ievietot vai atjaunināt vērtību ar vērtību, kas ir pretrunā ar šo ierobežojumu.
Piemēram, ja kolonnai ir UNIQUE ierobežojums un jūs mēģinājāt ievietot vērtību, kas jau pastāv (vērtības dublikāts), kas ir pretrunā ar UNIQUE ierobežojumu. Pēc tam klauzula KONFLIKTS ļauj jums izvēlēties, kā rīkoties šādos gadījumos, lai atrisinātu šo konfliktu.
Pirms mēs turpinām skaidrot, kā klauzula CONFLICT atrisina konfliktu. Jums vajadzētu saprast, kas ir datubāzes darījums.
Datu bāzes darījums:
Termins datu bāzes transakcija ir SQLite darbību saraksts (ievietot vai atjaunināt vai dzēst). Datu bāzes transakcija ir jāizpilda kā viena vienība, vai nu visas veiksmīgi veiktās operācijas, vai arī tās nav jāveic vispār. Ja kādu no tām neizdevās izpildīt, visas darbības tiks atceltas.
Datu bāzes darījuma piemērs:
Darījums par naudas pārskaitīšanu no viena bankas konta uz citu ietvers pāris darbības. Šī darījuma operācija ietver naudas izņemšanu no pirmā konta un ieskaitīšanu citā kontā. Šis darījums ir pilnībā jāpabeidz vai pilnībā jāatceļ, un tas nedrīkst neizdoties līdz pusei.
Šeit ir saraksts ar piecām izšķirtspējām, kuras varat izvēlēties klauzulā KONFLIKTS:
- ROLLBACK - tas atcels darījumu, kurā pašreizējais SQLite priekšraksts, kuram ir konflikts (tas atcels visu darījumu). Piemēram, ja jūs mēģināt atjaunināt 10 rindas un piektajai rindai ir vērtība, kas ir pretrunā ar ierobežojumu, neviena rinda netiks atjaunināta, 10 rindas paliks nemainīgas. Tiks izmesta kļūda.
- ABORT - tas pārtrauks (atcels) tikai pašreizējo SQLite priekšrakstu, kuram ir konflikts, un darījums netiks atcelts. Piemēram, ja jūs mēģināt atjaunināt 10 rindas un piektajai rindai ir vērtība, kas ir pretrunā ar ierobežojumu, tad tikai piektā vērtība netiks atjaunināta, bet pārējās 9 rindas tiks atjauninātas. Tiks izmesta kļūda.
- FAIL - pārtrauc pašreizējo SQLite priekšrakstu, kuram ir konflikts. Tomēr darījums neturpināsies, bet tiks veiktas iepriekšējās izmaiņas, kas veiktas rindās pirms tās rindas, kurai ir konflikts. Piemēram, ja jūs mēģināt atjaunināt 10 rindas, un piektajai rindai ir vērtība, kas ir pretrunā ar ierobežojumu, tad tikai 4 rindas tiks atjauninātas, bet otra - ne. Tiks izmesta kļūda.
- IGNORE - tas izlaidīs rindu, kurā ir ierobežojuma pārkāpums, un turpinās apstrādāt pārējās SQLite priekšraksta nākamās rindas. Piemēram, ja jūs mēģināt atjaunināt 10 rindas, un piektajai rindai ir vērtība, kas ir pretrunā ar ierobežojumu, tad tikai 4 rindas tiks atjauninātas, bet otra - ne. Tas netiks turpināts, lai atjauninātu citas rindas un apstātos pie tās rindas, kurai ir konflikta vērtība. Kļūda netiks izmesta.
- REPLACE - tas ir atkarīgs no pārkāpuma veida:
- Ja pastāv ierobežojuma pārkāpums UNIKĀLĀ vai PAMATKLAVA ierobežojumam. REPLACE aizstās rindu, kas izraisa pārkāpumu, ar jaunu ievietoto vai atjaunināto rindu.
- Ja ir NULL ierobežojuma pārkāpums, klauzula REPLACE aizstās NULL vērtību ar šīs kolonnas noklusējuma vērtību. Ja kolonnai nav noklusējuma vērtības, SQLite pārtrauks priekšrakstu (paziņojums tiks atcelts)
- JA notiks CHECK ierobežojuma pārkāpums, klauzula tiks atcelta.
Piezīme. Iepriekš minētās 5 izšķirtspējas ir iespējas, kā atrisināt konfliktu. Tas var nebūt obligāti tas, kas ir piemērojams viena konflikta atrisināšanai, ir piemērots, lai atrisinātu cita veida konfliktus.
Kā pasludināt klauzulu CONFLICT
Klaušu ON CONFLICT var paziņot, kad klauzulā CREATE TABLE definējat kolonnas definīcijas ierobežojumu. Izmantojot šādu sintaksi:
Jūs varat izvēlēties vienu no piecām izšķirtspējām, lai atrisinātu konfliktu, kā paskaidrots iepriekš.
PAR KONFLIKTU IGNORE Piemērs
1. darbība. Izveidojiet jaunu tabulas priekšmetu šādi:
IZVEIDOT TABULU [Priekšmeti] ([SubjectId] INTEGRE NOT NULL PAMATLĪDZEKLIS KONFLIKTU IGNORE,[SubjectName] NVARCHAR NOT NULL);
Ievērojiet, ka kolonnā SubjectId esam definējuši PRIMARY KEY ierobežojumu. Primārā atslēgas ierobežojums neļaus kolonnā SubjectId ievietot divas dublētas vērtības, tāpēc visām kolonnas vērtībām jābūt unikālām. Ievērojiet arī to, ka konflikta risinājumu izvēlamies “ IGNORE ”.
Komandai vajadzētu darboties veiksmīgi, un jums nevajadzētu saņemt kļūdas:
2. solis. Tagad ievietosim dažas vērtības jaunajos tabulas priekšmetos, bet ar vērtību, kas pārkāpj primārā atslēgas ierobežojumu:
INSERT INTO Subjects VALUES (1, 'Algebra');INSERT INTO Subjects VALUES (2, 'Datu bāzes kurss');INSERT INTO Subjects VALUES (2, “Datu struktūras”);INSERT INTO Subjects VALUES (4, 'Algoritmi');
Šajā INSERT paziņojumā mēs mēģinājām ievietot divus kursus ar to pašu primārās atslēgas priekšmeta ID 2, kas ir primārās atslēgas ierobežojuma pārkāpums.
Komandām vajadzētu darboties labi, un jums nevajadzētu saņemt kļūdas. Kā sekojošais:
3. solis. Tabulā atlasiet visus priekšmetus šādi:
SELECT * FROM Subjects;
Tas jums dos priekšmetu sarakstu:
Ievērojiet, ka 4 rindu vietā tika ievietoti tikai trīs priekšmeti " Algebra, datu bāzes kurss un algoritmi ".
Rinda, kuras vērtība ir galvenā atslēgas ierobežojuma pārkāpums, ti, "Datu struktūras", tika ignorēta un netika ievietota. Tomēr SQLite pēc šīs rindas turpina izpildīt citus priekšrakstus.
4. solis. Dzēsiet tabulas priekšmetus, lai izveidotu to vēlreiz ar citu klauzulu ON CONFLICT šim piemēram, izpildot šādu komandu:
PILNU TABULA Priekšmeti;
Komanda Drop izdzēš visu tabulu. Tabulas priekšmeti tagad nepastāv.
PAR KONFLIKTU NOMAIŅU Piemērs
1. darbība. Izveidojiet jaunu tabulas priekšmetu šādi:
IZVEIDOT TABULU [Priekšmeti] ([SubjectId] KONFLIKTU NOMAIŅAS INTEGRĒT NAV NULL PAMATLĪDZEKĻA,[SubjectName] NVARCHAR NOT NULL);
Ievērojiet, ka kolonnā SubjectId mēs definējām PRIMARY KEY ierobežojumu. Primārā atslēgas ierobežojums neļaus kolonnā SubjectId ievietot divas dublētas vērtības, tāpēc visām kolonnas vērtībām jābūt unikālām.
Ievērojiet arī to, ka konflikta risināšanas opciju izvēlamies “ REPLACE ”. Komandai vajadzētu darboties veiksmīgi, un jums nevajadzētu saņemt kļūdas:
2. solis. Tagad ievietosim dažas vērtības jaunajā tabulā Subjects, bet ar vērtību, kas pārkāpj primārā atslēgas ierobežojumu:
INSERT INTO Subjects VALUES (1, 'Algebra');INSERT INTO Subjects VALUES (2, 'Datu bāzes kurss');INSERT INTO Subjects VALUES (2, “Datu struktūras”);INSERT INTO Subjects VALUES (4, 'Algoritmi');
Šajā INSERT paziņojumā mēs mēģinājām ievietot divus kursus ar to pašu primārās atslēgas priekšmeta ID 2, kas ir primārās atslēgas ierobežojuma pārkāpums.
Komandām vajadzētu darboties labi, un jums nevajadzētu saņemt kļūdas. Kā sekojošais:
3. solis. Tabulā atlasiet visus priekšmetus šādi:
SELECT * FROM Subjects;
Tas jums dos priekšmetu sarakstu:
Ievērojiet, ka tikai trīs priekšmeti tika ievietoti " Algebra, datu struktūras un algoritmi ", bet mēs mēģinājām ievietot 4 rindas.
Rinda, kuras vērtība pārkāpj primārā atslēgas ierobežojumu, ti, “ Datu struktūras ”, vērtību “ Datu bāzes kurss ” aizstāja šādi:
- Pirmie divi ievietošanas paziņojumi darbojas bez problēmām. Tiks ievietoti divi priekšmeti Algebra un Database Course ar ID 1, 2.
- Kad SQLite mēģina palaist trešo ielikuma priekšrakstu ar SubjectId 2 un SubjectName " Datu struktūras ", tā uzzina, ka jau ir tēma ar SubjectId = 2. Kas ir kolonnas SubjectId definētā primārā atslēgas ierobežojuma pārkāpums.
- SQLite šim konfliktam izvēlēsies REPLACE izšķirtspēju. Tā aizstāj vērtību, kas jau pastāv priekšmetu tabulā, ar jauno vērtību no paziņojuma insert. Tātad " Datubāzes kurss " SubjectName tiks aizstāts ar " Data Structures " SubjectName.
Kopsavilkums:
Klauzulas INSERT, UPDATE un DELETE tiek izmantotas, lai modificētu datus SQLite datu bāzē. KONFLIKTA klauzula ir spēcīga klauzula, lai atrisinātu jebkādu konfliktu starp datiem un modificējamiem datiem.