SQLite | |
---|---|
Sorts | serverlöst relationsdatabashanteringssystem [d] |
Utvecklaren | Richard Hipp [d] |
Skrivet i | C [2] |
Operativ system | plattformsoberoende |
Första upplagan | augusti 2000 |
senaste versionen |
|
Läsbara filformat | SQLite databas filformat [d] , SQLite 3.x databas [d] och SQLite rollbak journal [d] |
Genererade filformat | SQLite databas filformat [d] , SQLite 3.x databas [d] , SQLite Zipvfs komprimerade databas [d] och SQLite rollbak journal [d] |
Licens | 🅮 [d] [3] |
Hemsida | sqlite.org _ |
Mediafiler på Wikimedia Commons |
SQLite ( / ˌ ɛ s ˌ k juː ˌ ɛ l ˈ aɪ t / , [4] [5] / ˈ s iː k w ə ˌ la aɪ t / [6] ) är en kompakt inbäddad DBMS . Källkoden för biblioteket har släppts till allmän egendom . 2005 fick projektet Google-O'Reilly Open Source Awards [7] .
Ordet "embedded" ( eng. embedded ) betyder att SQLite inte använder klient-server- paradigmet , det vill säga att SQLite -motorn inte är en separat arbetsprocess som programmet interagerar med, utan är ett bibliotek som programmet är länkat till. , och motorn blir en integrerad del program. Sålunda används funktionsanrop ( API ) i SQLite-biblioteket som utbytesprotokoll. Detta tillvägagångssätt minskar overhead, svarstid och förenklar programmet. SQLite lagrar hela databasen (inklusive definitioner, tabeller, index och data) i en enda standardfil på maskinen där programmet körs. Enkel implementering uppnås på grund av det faktum att innan exekveringen av skrivtransaktionen påbörjas blockeras hela filen som lagrar databasen; ACID- funktioner uppnås bland annat genom att skapa en loggfil.
Flera processer eller trådar kan samtidigt läsa data från samma databas utan problem. Att skriva till databasen kan endast göras om inga andra förfrågningar för närvarande betjänas; annars misslyckas skrivförsöket och en felkod returneras till programmet. Ett annat alternativ för utveckling av händelser är automatisk upprepning av inspelningsförsök inom ett angivet tidsintervall.
Paketet innehåller också en funktionell klientdel i form av en körbar sqlite3 -fil , som demonstrerar implementeringen av huvudbibliotekets funktioner. Klientdelen är ett kommandoradsverktyg för flera plattformar .
SQLite kan användas både på inbyggda system och på dedikerade maskiner med gigabyte datamatriser.
SQLite stöder dynamisk datainmatning. Möjliga värdetyper är INTEGER, REAL, TEXToch BLOB. Det speciella värdet stöds också NULL. [åtta]
Storleken på TEXT- och BLOB-värdena begränsas inte av någonting, förutom en konstant SQLITE_MAX_LENGTHi SQLite-källorna lika med en miljard (10 9 ) [9] .
Varje värde i vilket fält som helst i en post kan vara av vilken som helst av dessa typer, oavsett vilken typ som anges när tabellens fält deklareras. Typen som anges när ett fält deklareras lagras för referens i dess ursprungliga stavning och används som grund för att välja inställningar (så kallad "typaffinitet": detta är ett tillvägagångssätt som sällan finns i andra DBMS) när man utför implicita typkonverteringar baserat på likheten mellan detta typnamn och allt som är bekant med SQLite. Denna algoritm har en omfattande lista över varianter av datatypsnamn som praktiseras i andra DBMS. Om ett skrivvärde inte säkert kan konverteras till sin föredragna typ, skriver SQLite värdet i sin ursprungliga form. För att få värden från databasen finns det ett antal funktioner för var och en av typerna, och om typen av det lagrade värdet inte stämmer överens med det begärda, konverteras det också om möjligt. [tio]
Gamla versioner av SQLite designades utan några begränsningar, det enda villkoret var att databasen fick plats i minnet, där alla beräkningar utfördes med 32-bitars heltal. Detta skapade vissa problem. Eftersom övre gränser inte har definierats och korrekt testats, har buggar ofta hittats när man använder SQLite under ganska extrema förhållanden. Därför introducerade nyare versioner av SQLite gränser som nu kontrolleras tillsammans med den allmänna testsviten.
Under kompileringen av SQLite-biblioteket ställs följande gränser in, som kan ökas vid behov:
Beskrivning | Menande | Konstant i källkoden |
---|---|---|
Maximal längd på en sträng eller BLOB- fält | 1 000 000 000 | SQLITE_MAX_LENGTH |
Maximalt antal kolumner | 2000 | SQLITE_MAX_COLUMN |
Maximal längd på en SQL- sats | 1 000 000 000 | SQLITE_MAX_SQL_LENGTH |
Maximalt antal tabeller i uttryck med JOIN | 64 | |
Expressionsträd Maximalt djup | 1000 | SQLITE_MAX_EXPR_DEPTH |
Maximalt antal funktionsargument | 127 | SQLITE_MAX_FUNCTION_ARG |
Maximalt antal termer i ett kombinerat uttryck med SELECT | 500 | SQLITE_MAX_COMPOUND_SELECT |
Den maximala längden på ett mönster som ett argument till LIKE- eller GLOB-operatorerna | 50 000 | SQLITE_MAX_LIKE_PATTERN_LENGTH |
Maximalt antal platshållartecken i en SQL-sats | 999 | SQLITE_MAX_VARIABLE_NUMBER |
Maximalt triggerrekursionsdjup | 1000 | SQLITE_MAX_TRIGGER_DEPTH |
Maximalt antal anslutna baser | tio | SQLITE_MAX_ATTACHED |
Maximal databassidastorlek | 65 536 | SQLITE_MAX_PAGE_SIZE |
Maximalt antal sidor i en databasfil | 1 073 741 823 | SQLITE_MAX_PAGE_COUNT |
Från och med version 3.37.0 kan SQLITE_MAX_PAGE_SIZE-värdet inte vara större än standardvärdet, vilket uttryckligen anges i källkoden. Det maximala antalet sidor i databasen är 4294967294. Den maximala storleken på databasen är alltså 1,4e+14 byte (281 decimal terabyte eller 256 TiB ). [elva]
Vissa gränser kan ändras nedåt under körning genom att ange en kategori och motsvarande värde för funktionen sqlite3_limit() :
int sqlite3_limit ( sqlite3 * , int id , int newVal )Kategori | Beskrivning |
---|---|
SQLITE_LIMIT_LENGTH | Den maximala längden på en sträng eller BLOB-fält eller rad |
SQLITE_LIMIT_SQL_LENGTH | Maximal SQL-satslängd |
SQLITE_LIMIT_COLUMN | Maximalt antal kolumner i en tabelldefinition eller välj resultat eller index eller uttryck med ORDER BY eller GROUP BY-satser |
SQLITE_LIMIT_EXPR_DEPTH | Det maximala djupet för det analyserade trädet för ett uttryck |
SQLITE_LIMIT_COMPOUND_SELECT | Maximalt antal termer i ett kombinerat uttryck med SELECT |
SQLITE_LIMIT_VDBE_OP | Maximalt antal instruktioner för virtuella maskinprogram för en körbar SQL-sats |
SQLITE_LIMIT_FUNCTION_ARG | Maximalt antal funktionsargument |
SQLITE_LIMIT_ATTACHED | Maximalt antal anslutna baser |
SQLITE_LIMIT_LIKE_PATTERN_LENGTH | Den maximala längden på ett mönster som ett argument till LIKE- eller GLOB-operatorerna |
SQLITE_LIMIT_VARIABLE_NUMBER | Det maximala antalet variabler i en SQL-sats som kan bindas |
SQLITE_LIMIT_TRIGGER_DEPTH | Maximalt triggerrekursionsdjup |
Detta kan vara användbart om SQLite används i webbapplikationer , eftersom reducerade gränser kan förhindra DoS-attacker från opålitliga externa klienter.
Själva SQLite-biblioteket är skrivet i C ; det finns många bindningar till andra programmeringsspråk, inklusive Apple Swift, Delphi , C++ , Java , C# , VB.NET , Python , Perl , Node.js , PHP , PureBasic [12] , Tcl (Verktyg för att arbeta med Tcl ingår med SQLite), Ruby , Haskell , Scheme , Smalltalk , Lua och Parser och många fler. En komplett lista över befintliga verktyg finns på projektsidan [13] .
Lättheten och bekvämligheten med att bädda in SQLite har lett till att biblioteket används i webbläsare , musikspelare och många andra program.
I synnerhet används SQLite i:
Många program stöder SQLite som datalagringsformat (särskilt på Mac OS och iOS , Android ), inklusive:
Databashanteringssystem (DBMS) | |
---|---|
Klient-server | |
Motorer | |
Fil server |
Databas | |
---|---|
Begrepp |
|
Objekt |
|
Nycklar | |
SQL |
|
Komponenter |