SQLite

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 9 mai 2022; verificările necesită 52 de modificări .
SQLite
Tip de sistem de gestionare a bazelor de date relaționale fără server [d]
Dezvoltator Richard Hipp [d]
Scris in C [2]
Sistem de operare multiplatformă
Prima editie august 2000
ultima versiune
Formate de fișiere care pot fi citite Formatul de fișier al bazei de date SQLite [d] , baza de date SQLite 3.x [d] și jurnalul SQLite rollbak [d]
Formate de fișiere generate Formatul de fișier al bazei de date SQLite [d] , baza de date SQLite 3.x [d] , baza de date comprimată SQLite Zipvfs [d] și jurnalul SQLite rollbak [d]
Licență 🅮 [d] [3]
Site-ul web sqlite.org
 Fișiere media la Wikimedia Commons

SQLite ( / ˌ ɛ s ˌ k juː ˌ ɛ l ˈ aɪ t / , [4] [5] / ˈ s k w ə ˌ la t / [6] ) este un SGBD compact încorporat . Codul sursă al bibliotecii a fost eliberat în domeniul public . În 2005, proiectul a primit premiile Google-O'Reilly Open Source [7] .

Dispozitiv

Cuvântul „embedded” ( ing.  embedded ) înseamnă că SQLite nu folosește paradigma client-server , adică motorul SQLite nu este un proces de lucru separat cu care programul interacționează, ci este o bibliotecă cu care programul este legat. , iar motorul devine parte integrantă a programelor. Astfel, apelurile de funcții ( API ) ale bibliotecii SQLite sunt utilizate ca protocol de schimb. Această abordare reduce cheltuielile generale, timpul de răspuns și simplifică programul. SQLite stochează întreaga bază de date (inclusiv definiții, tabele, indecși și date) într-un singur fișier standard pe mașina pe care rulează programul. Ușurința de implementare se realizează datorită faptului că înainte de începerea execuției tranzacției de scriere, întregul fișier care stochează baza de date este blocat; Funcțiile ACID sunt realizate, printre altele, prin crearea unui fișier jurnal.

Mai multe procese sau fire pot citi simultan date din aceeași bază de date fără probleme. Scrierea în baza de date se poate face numai dacă nu există alte solicitări în curs de deservire; în caz contrar, încercarea de scriere eșuează și un cod de eroare este returnat programului. O altă opțiune pentru dezvoltarea evenimentelor este repetarea automată a încercărilor de înregistrare într-un interval de timp specificat.

Pachetul include și o parte funcțională client sub forma unui fișier executabil sqlite3 , care demonstrează implementarea funcțiilor bibliotecii principale. Partea client este un utilitar de linie de comandă multiplatformă .

SQLite poate fi folosit atât pe sisteme încorporate, cât și pe mașini dedicate cu matrice de date gigabyte.

Tipuri de date

SQLite acceptă tastarea dinamică a datelor. Tipurile de valori posibile sunt INTEGER, REALși TEXT. BLOBValoarea specială este de asemenea susținută NULL. [opt]

Dimensiunile valorilor TEXT și BLOB nu sunt limitate de nimic, cu excepția unei constante SQLITE_MAX_LENGTHîn sursele SQLite egală cu un miliard (10 9 ) [9] .

Fiecare valoare din orice câmp din orice înregistrare poate fi de oricare dintre aceste tipuri, indiferent de tipul specificat la declararea câmpurilor tabelului. Tipul specificat atunci când un câmp este declarat este stocat pentru referință în ortografia sa originală și este folosit ca bază pentru alegerea preferințelor (așa-numita „afinitate de tip”: aceasta este o abordare rar întâlnită în alte SGBD) atunci când se efectuează conversii implicite de tip pe baza asemănării acestui nume de tip cu orice familiarizat cu SQLite. Acest algoritm are o listă extinsă de variante ale numelor tipurilor de date practicate în alte SGBD. Dacă o valoare de scriere nu poate fi convertită în siguranță în tipul ei preferat, SQLite scrie valoarea în forma sa originală. Pentru a obține valori din baza de date, există un număr de funcții pentru fiecare dintre tipuri, iar dacă tipul valorii stocate nu se potrivește cu cel solicitat, aceasta este, de asemenea, convertită, dacă este posibil. [zece]

Restricții

Versiunile vechi de SQLite au fost proiectate fără restricții, singura condiție era ca baza de date să se încadreze în memorie, în care toate calculele au fost efectuate folosind numere întregi de 32 de biți. Acest lucru a creat anumite probleme. Deoarece limitele superioare nu au fost definite și testate corespunzător, au fost adesea găsite erori atunci când se folosește SQLite în condiții destul de extreme. Prin urmare, versiunile mai noi de SQLite au introdus limite care sunt acum verificate împreună cu suita generală de teste.

În timpul compilării bibliotecii SQLite, sunt stabilite următoarele limite, care pot fi mărite dacă este necesar:

Descriere Sens Constant în codul sursă
Lungimea maximă a unui șir sau a unui câmp BLOB 1.000.000.000 SQLITE_MAX_LENGTH
Numărul maxim de coloane 2000 SQLITE_MAX_COLUMN
Lungimea maximă a unei instrucțiuni SQL 1.000.000.000 SQLITE_MAX_SQL_LENGTH
Numărul maxim de tabele în expresiile cu JOIN 64
Adâncimea maximă a arborelui de expresie 1000 SQLITE_MAX_EXPR_DEPTH
Numărul maxim de argumente ale funcției 127 SQLITE_MAX_FUNCTION_ARG
Număr maxim de termeni într-o expresie combinată cu SELECT 500 SQLITE_MAX_COMPOUND_SELECT
Lungimea maximă a unui model ca argument pentru operatorii LIKE sau GLOB 50.000 SQLITE_MAX_LIKE_PATTERN_LENGTH
Numărul maxim de caractere substituent într-o instrucțiune SQL 999 SQLITE_MAX_VARIABLE_NUMBER
Adâncimea maximă a recursiunii declanșatorului 1000 SQLITE_MAX_TRIGGER_DEPTH
Numărul maxim de baze atașate zece SQLITE_MAX_ATTACHED
Dimensiunea maximă a paginii bazei de date 65 536 SQLITE_MAX_PAGE_SIZE
Numărul maxim de pagini dintr-un fișier de bază de date 1 073 741 823 SQLITE_MAX_PAGE_COUNT

Începând cu versiunea 3.37.0, valoarea SQLITE_MAX_PAGE_SIZE nu poate fi mai mare decât valoarea implicită, care este specificată în mod explicit în codul sursă. Numărul maxim de pagini din baza de date este 4294967294. Astfel, dimensiunea maximă a bazei de date este de 1,4e+14 octeți (281 terabytes zecimal sau 256 TiB ). [unsprezece]

Unele limite pot fi modificate în jos în timpul execuției prin specificarea unei categorii și a valorii corespunzătoare a funcției sqlite3_limit() :

int sqlite3_limit ( sqlite3 * , int id , int newVal )
Categorie Descriere
SQLITE_LIMIT_LENGTH Lungimea maximă a oricărui șir sau câmp sau rând BLOB
SQLITE_LIMIT_SQL_LENGTH Lungimea maximă a instrucțiunii SQL
SQLITE_LIMIT_COLUMN Numărul maxim de coloane într-o definiție de tabel sau selectați rezultat sau index sau expresii cu clauze ORDER BY sau GROUP BY
SQLITE_LIMIT_EXPR_DEPTH Adâncimea maximă a arborelui analizat al oricărei expresii
SQLITE_LIMIT_COMPOUND_SELECT Număr maxim de termeni într-o expresie combinată cu SELECT
SQLITE_LIMIT_VDBE_OP Numărul maxim de instrucțiuni de program de mașină virtuală ale unei instrucțiuni SQL executabile
SQLITE_LIMIT_FUNCTION_ARG Numărul maxim de argumente ale funcției
SQLITE_LIMIT_ATTACHED Numărul maxim de baze atașate
SQLITE_LIMIT_LIKE_PATTERN_LENGTH Lungimea maximă a unui model ca argument pentru operatorii LIKE sau GLOB
SQLITE_LIMIT_VARIABLE_NUMBER Numărul maxim de variabile dintr-o instrucțiune SQL care pot fi legate
SQLITE_LIMIT_TRIGGER_DEPTH Adâncimea maximă a recursiunii declanșatorului

Acest lucru poate fi util dacă SQLite este utilizat în aplicații web , deoarece limitele reduse pot preveni atacurile DoS de la clienți externi neîncrezători.

Utilizare

Biblioteca SQLite în sine este scrisă în C ; există multe legături la alte limbaje de programare, inclusiv Apple Swift, Delphi , C++ , Java , C# , VB.NET , Python , Perl , Node.js , PHP , PureBasic [12] , Tcl (instrumentele pentru lucrul cu Tcl sunt incluse incluse cu SQLite), Ruby , Haskell , Scheme , Smalltalk , Lua și Parser și multe altele. O listă completă a instrumentelor existente este disponibilă pe pagina proiectului [13] .

Ușurința și comoditatea încorporării SQLite a dus la utilizarea bibliotecii în browsere , playere muzicale și multe alte programe.

În special, SQLite este utilizat în:

Multe programe acceptă SQLite ca format de stocare a datelor (în special pe Mac OS și iOS , Android ), inclusiv:

Vezi și

Note

  1. SQLite Versiunea 3.39.4 Pe 2022-09-29 - 2022.
  2. Proiectul sqlite Open Source pe Open Hub: Pagina de limbi - 2006.
  3. https://www.sqlite.org/copyright.html
  4. De ce SQLite a reușit ca bază de date – Richard Hipp, creatorul SQLite ”. Jurnalul de modificări . Episodul 201. Evenimentul are loc la 00:17:25. Spun SQL-ite, ca un mineral.”
  5. D. Richard Hipp (prezentator). O introducere în SQLite (video). Google Inc. Ora de la începutul sursei: 00:01:14. „[...]ess-kju-elite [...]”
  6. D. Richard Hipp (prezentator). O introducere în SQLite . Google Inc.. Ora de la începutul sursei: 00:48:15. „[...]sechelite [...]”
  7. Premiile Google-O'Reilly Open Source - Hall of Fame - Cod Google . Preluat la 5 martie 2010. Arhivat din original la 11 iulie 2011.
  8. Copie arhivată (link nu este disponibil) . Preluat la 11 martie 2019. Arhivat din original la 13 februarie 2019.    (Engleză)
  9. Limite de implementare pentru SQLite . Preluat la 23 noiembrie 2018. Arhivat din original la 8 ianuarie 2019.
  10. Copie arhivată (link nu este disponibil) . Preluat la 11 martie 2019. Arhivat din original la 10 martie 2019.    (Engleză)
  11. Limitele de implementare pentru SQLite . Preluat la 8 decembrie 2021. Arhivat din original pe 7 noiembrie 2021.
  12. Utilizați funcția SQLiteDatabase() . Consultat la 28 septembrie 2013. Arhivat din original la 2 octombrie 2013.
  13. Lista de legături SQLite pentru alte limbi (link în jos) . Consultat la 4 aprilie 2007. Arhivat din original pe 5 februarie 2009. 
  14. sqlite-manager - Găzduire proiect pe Google Code . Consultat la 5 martie 2010. Arhivat din original pe 9 februarie 2010.
  15. Client Skype folosind SQLite? (link indisponibil) . Consultat la 7 mai 2010. Arhivat din original la 28 septembrie 2014. 
  16. sqlite1c - Găzduire proiect pe Google Code . Consultat la 5 august 2008. Arhivat din original la 12 aprilie 2009.
  17. Cum am îmbunătățit jurnalul de înregistrare . 1C (29 octombrie 2013). Preluat la 1 iulie 2014. Arhivat din original la 27 august 2014.
  18. dbRW Database Driver 1.2 Arhivat la 1 mai 2011.

Link -uri