Vyvinul | D. Richard Hipp |
---|---|
První verze | Srpna 2000 |
Poslední verze | 3.36.0 (18. června 2021) |
Vklad | www.sqlite.org/src |
Napsáno | VS |
Operační systém | Multiplatformní |
Číst formáty | Formát souboru databáze SQLite ( d ) , databáze SQLite 3.x ( d ) a deník SQLite rollbak ( d ) |
Písemné formáty | Formát souboru databáze SQLite ( d ) , databáze SQLite 3.x ( d ) , komprimovaná databáze SQLite Zipvfs ( d ) a deník SQLite rollbak ( d ) |
Typ | Palubní systém pro správu databází ( d ) |
Licence | Veřejná doména |
webová stránka | sqlite.org |
SQLite (čti [ ɛs.ky.ɛl.ajt ]) je knihovna napsaná v jazyce C , který nabízí motor z relační databáze přístupné jazyka SQL . SQLite do značné míry implementuje standard SQL-92 a vlastnosti ACID .
Na rozdíl od tradičních databázových serverů , jako je MySQL nebo PostgreSQL , jeho zvláštností není reprodukovat obvyklé schéma klient-server , ale být přímo integrován do programů . Celá databáze (deklarace, tabulky, rejstřík a data) je uložena v souboru nezávislém na platformě .
D. Richard Hipp , tvůrce SQLite, se rozhodl dát tuto knihovnu a její zdrojový kód do veřejné sféry , což umožňuje její neomezené použití jak v open source, tak v proprietárních projektech . Tvůrce a někteří z hlavních vývojářů SQLite jsou zaměstnáni u americké společnosti Hwaci .
SQLite je nejpoužívanější databázový stroj na světě, a to díky svému použití:
Díky své extrémní lehkosti (méně než 600 KiB ) je také velmi populární na vestavěných systémech , zejména na většině moderních smartphonů a tabletů : mobilní operační systémy iOS , Android a Symbian jej používají jako databázi. Celkově můžeme počítat více než miliardu známých a nahlášených kopií knihovny.
D. Richard Hipp a jeho kolega začali navrhovat SQLite počátkem roku 2000 během práce ve společnosti General Dynamics , poté na základě smlouvy s americkým námořnictvem . SQLite měl být používán v řízených střelách , aby nahradil databáze IBM Informix běžící na strojích HP-UX . Hlavním cílem bylo obejít se bez jakékoli instalace nebo správy: instalace nebo aktualizace databáze mohla trvat celý den.
V srpnu 2000 byla vydána první verze SQLite. K manipulaci se stromy B používala gdbm ( GNU Database Manager) .
SQLite 2.0 odstraňuje závislost na gdbm a přidává podporu transakcí.
SQLite 3.0, vyrobený pomocí AOL , byl vydán v roce 2004 a přidává mimo jiné regionalizaci (s podporou řazení a Unicode ) a deklaraci typu.
Většina systémů pro správu databází je postavena podle paradigmatu klient-server , tj. Klientská softwarová knihovna je integrována a používá se v jedné nebo více aplikacích, když je spuštěn databázový stroj . Ve vlastním prováděcím prostoru nebo dokonce na jiném počítači, jako IT oddělení .
SQLite je naopak přímo integrován do aplikace, která využívá svou softwarovou knihovnu s databázovým strojem. Přístup k databázi pomocí SQLite se provádí otevřením příslušného souboru: každá databáze je uložena v souboru, který je pro ni specifický, s jeho deklaracemi, jeho tabulkami a indexy, ale také s daty.
Díky této vlastnosti je SQLite zajímavý jako alternativa k textovým souborům, který se používá jako prostředek integrovaného úložiště v mnoha aplikacích ( parametry , historie , mezipaměť ...), protože umožňuje rychlejší, bezpečnější, strukturovanější, jednodušší a úplnější přístup k datům nezávisle na platformě , aniž by to mělo vliv na snadné nasazení aplikace, která ji používá.
Odstranění prostředníka mezi aplikací a daty také mírně snižuje latenci přístupu k datům ve srovnání se systémy používajícími paradigma klient-server.
Tato architektura však představuje několik problémů:
Neexistuje žádná specifická rozšíření pro soubory databáze SQLite, ale to je obyčejné rozšíření setkávají jako .sqlite nebo .db , někdy následuje číslo verze knihovny ( .sqlite3 , .db2 , atd). Je možné použít databázi pouze uložené v paměti bez vytváření databázového souboru na disku, a to prostřednictvím zvláštního názvu souboru : memory: .
Obecně je vhodné použít SQLite tam, kde data nejsou centralizovaná a kde není pravděpodobné, že by se rozšíření velikosti databáze stalo kritickým. Pokud je účelem databáze centralizovat velké množství dat a poskytnout je velkému počtu klientů, je lepší použít DBMS založené na paradigmatu klient-server. SQLite má nahradit textové soubory, nikoli tradiční databázové servery.
Když je dotaz SQL předán SQLite prostřednictvím programovacího rozhraní , je před provedením kompilován .
Sekvencer kompilátoru rozdělí zadané příkazy na části, které lze zpracovat samostatně (například dotaz a jeho podotázka), které se předají analyzátoru, který se postará o rozdělení dotazů na různé objekty, které představují různé objednávky. A klauzule jazyka SQL. Tyto objekty jsou předány generátoru kódu, který vytvoří mezilehlý kód nízké úrovně nebo bytecode .
Výsledný kód je sada instrukcí (137 různých instrukcí) s názvem OpCodes . Toto je spuštěno ve virtuálním stroji SQLite, který je považuje za malé programy popisující operace vyhledávání, čtení a úpravy dat.
Když se virtuální stroj interpretuje tyto pokyny, zavolala manažer B-strom na základě vrstev nižší úrovně, která se skrývá na stránky disku a hardware abstraction layer .
SQLite nezahrnuje správu přístupových práv a úpravu dat. Řízení se provádí pomocí systému souborů na operačním systému : v případě, že soubor, který obsahuje databáze není zapisovatelný uživateli, uživatel bude moci také upravit záznamy a základní strukturu dat.
Správa práv s GRANT a REVOKE proto neexistuje, i když jsou součástí specifikace SQL-92 .
Použití databáze SQLite nevyžaduje žádný postup instalace nebo konfigurace.
Knihovna je napsána výhradně v C-ANSI , standardizované verzi programovacího jazyka C , a kromě knihovny standardního jazyka nepoužívá žádné externí knihovny . Díky tomu je SQLite kompilovatelný bez větších úprav na všech počítačových architekturách poskytujících kompilátor C vyhovující standardu ANSI.
Soubory databáze SQLite jsou zcela nezávislé na operačním systému a architektuře, na které se používají. Stejný databázový soubor lze použít na dvou architekturách, které mají radikálně odlišnou činnost, přičemž SQLite poskytuje vývojáři transparentní abstrakční vrstvu . Soubory jsou navzájem kompatibilní pro každou hlavní verzi knihovny od verze 3.0.0 SQLite, takže soubor vytvořený ve verzi 3.0.0 bude použitelný ve verzi 3.6.19 a naopak, soubory vytvořené mezi dvěma různými hlavními verzemi ( Například 2.0.0 a 3.0.0 ) mohou být kompatibilní (zejména v případě zpětné kompatibility), ale není tomu tak vždy.
SQLite používá pro obsah buňky dynamické psaní , na rozdíl od téměř všech DBMS, které používají statické psaní : při vytváření nové tabulky v databázi se jedná o doporučený nebo afinitní typ, nikoli vynucený, dat, která mají být uložena ve vyplněném sloupci a ne typ, který definuje způsob, jakým to bude reprezentováno v paměti, přičemž tento úkol je vyhrazen pro samotnou buňku. Po zadání dat do databáze se SQLite pokusí převést nová data na doporučený typ, ale pokud to není možné, neprovede to.
V SQLite existuje několik typů spřažení, které definují, jak bude SQLite fungovat při zadávání nových dat:
Každý typ afinity tedy může přijímat jakýkoli typ dat, jedinou výjimkou je konkrétní typ INTEGER PRIMARY KEY , když je aplikován na jeden sloupec, protože to není obvyklý typ. Ale z aliasu do interního sloupce na ROWID engine, který odpovídá adrese záznamu, jedinečný v celé tabulce.
Použití dynamického psaní zlepšuje homogenitu mezi daty v databázi a typy jazyka použitého k jejímu dotazování, pokud je tento jazyk také dynamicky psaný jazyk (jako je Python , PHP , Perl nebo Ruby ), aniž by způsoboval skutečné problémy s jazyky pomocí statického psaní (například C / C ++ nebo Java ).
Stanovení typu afinityAby byla zachována kompatibilita s jinými relačními databázemi , SQLite automaticky převede názvy typů deklarovaných na nejvhodnější typ spřažení takto:
Ačkoli SQLite používá dynamické psaní, reprezentace v paměti a zpracování prováděné na datech vyžadují použití různých tříd úložiště. To platí pouze pro verzi 3 a její novější verze, protože data byla v dřívějších verzích uložena jako řetězce.
Všechna data manipulovaná databázovým strojem používají jeden z následujících typů:
Standard nedefinuje přesně, jak má být zacházeno s typem NULL .
Stejně jako u většiny relačních databází jsou všechny záznamy NULL považovány za odlišné podle omezení UNIQUE, ale jsou považovány za totožné operátorem UNION a klíčovým slovem DISTINCT .
Aritmetické operace, které obsahují ve svém výrazu typ NULL, vracejí UNKNOWN (nedefinovaná hodnota). V booleovských operacích může být vrácená hodnota NEZNAMENÁ, pokud dojde k typu NULL a výsledek nelze určit s jistotou: NULL OR 1 dá hodnotu 1 , ale NULL OR 0 dá hodnotu NEZNÁMÝ, protože operaci nelze s jistotou vyřešit .
TermínySQLite nemá typ představující data. K manipulaci s nimi však existuje sada funkcí. Uložení data lze provést v řetězci znaků ve formě ISO 8601 nebo v celočíselném formátu ve formě časového razítka UNIX .
SQLite spravuje omezení na jednom nebo více sloupcích. Omezení NOT NULL , CHECK , DEFAULT a COLLATE jsou deklarována na sloupci, zatímco omezení PRIMARY KEY , UNIQUE , CHECK a FOREIGN KEY lze deklarovat na jednom nebo více sloupcích.
Omezení UNIQUE automaticky vytvoří index ve sloupcích, na které se vztahuje.
PRIMÁRNÍ KLÍČKlíč primární omezení vytvoří UNIQUE omezení na postiženou sloupce (y), nicméně, a na rozdíl od standardu , SQLite primární klíč omezení umožňuje položky, které jsou NULL . Jedná se o nesoulad se standardem a tuto odchylku lze vyřešit v budoucích verzích. Proto je vhodné přidat k deklaraci primárního klíče omezení NOT NULL .
ROWID a AUTOINCREMENTKaždý řádek v tabulce je identifikován 64bitovým celým číslem se znaménkem s názvem ROWID . Pokud je tabulka deklarována pouze s jedním sloupcem INTEGER PRIMARY KEY , stane se tento sloupec aliasem ROWID . Použití aliasu s identifikátorem ROWID zvyšuje rychlost vyhledávání, která může být až dvakrát rychlejší než u běžného primárního klíče přidruženého k jeho indexu jedinečnosti.
Když je tabulka prázdná, algoritmus přiřadí hodnotu 1 identifikátoru, který zvýší pro každý nový záznam, dokud nedosáhne limitu 64bitového celého čísla se znaménkem ( ). Jakmile je tohoto limitu dosaženo, znovu použije mezery uvolněné odstraněnými záznamy. Přidělení identifikátorů proto již není přírůstkové, ale náhodné.
Je možné použít klíčové slovo AUTOINCREMENT . Ten druhý mírně upravuje algoritmus: jakmile je dosaženo limitu celého čísla, již nebude možné vložit nový záznam. Díky tomu je možné zaručit, že stejný identifikátor nikdy nebudou přenášeny dvěma odlišnými záznamy, i když nebudou existovat současně.
CIZÍ KLÍČOd verze 3.6.19 je SQLite schopen spravovat omezení cizího klíče .
Z důvodu zpětné kompatibility není podpora cizího klíče ve výchozím nastavení povolena. Aktivaci provádí cizí_keys pragma .
Libovolný sloupec, na který odkazuje cizí klíč, musí být deklarován jako JEDINEČNÝ ( PRIMÁRNÍ KLÍČ vytvoří jedinečný klíč). SQLite ještě nezohledňuje klauzuli MATCH v definici cizích klíčů.
SQLite spravuje spouštěče poměrně kompletním způsobem. Lze hlásit spouštěče PŘED , PO nebo NAMÍSTO . SQLite podporuje možnost FOR EACH ROW (výchozí operace), ale ne FOR EACH STATEMENT .
SQLite umožňuje vytváření pohledů ke snížení délky dotazů.
Pohledy jsou jen pro čtení, ale je možné použít triggery s vlastností INSTEAD OF k simulaci možnosti jejich úpravy.
Všechny příkazy SQL, jejichž cílem je změnit stav databáze (téměř jakýkoli jiný příkaz než SELECT ), zahrnují vytvoření transakce, která je pro ně vyhrazena, pokud ještě není vytvořena transakce obsahující příkaz. To znamená, že všechny příkazy jsou atomické . Pokud provedení příkazu nezpůsobí chybu, je úprava automaticky potvrzena ( autocommit ), ale pokud tomu tak není, jsou všechny úpravy provedené příkazem zrušeny.
Všechny úpravy databáze jsou serializovány: provádí se pouze jedna úprava najednou a databáze je uzamčena pro čtení během úpravy.
SQLite umožňuje vytváření transakcí i vytváření bodů návratu ( SAVEPOINT ), ale neumožňuje spravovat různé stupně izolace. V transakci se během prvního volání příkazu pro čtení aktivuje sdílený zámek, který autorizuje přístup ke čtení, ale zakazuje jakoukoli úpravu dat jinou transakcí, během prvního volání zápisu se celá databáze čte a zápis se uzamkne pro další transakce .
KYSELINAI když SQLite na první pohled respektuje sadu vlastností ACID , které určují spolehlivost transakčního systému, je stále možné uvést databázi do nekonzistentního stavu, protože typy nejsou vynucené: je možné například vložit znakový řetězec v koloně, jehož afinita typ je definován jako celé číslo . Ve svých přísných interpretacích SQLite nerespektuje sadu vlastností ACID.
SQLite umožňuje vytváření dočasných tabulek, jejichž definice, data a indexy se neukládají do databázového souboru, a proto se při zavření databáze ztratí.
Přímo z knihovny je možné vytvořit vlastní úložiště pro simulaci databázové tabulky. Vytvoření virtuální tabulky se provádí implementací sady funkcí. Přístup k tabulce je zcela transparentní, kromě absence určitých funkcí (nelze vytvářet spouštěče nebo indexy ani upravovat strukturu tabulky).
Tento mechanismus umožňuje přístup pomocí jazyka SQL k jakémukoli zdroji dat, jako jsou soubory CSV nebo XML .
SQLite nabízí prostřednictvím své knihovny programovací rozhraní pro vytváření uživatelských funkcí . Sada funkcí definovaných knihovnou může být přetížena , aby se předefinovala jejich implementace. Někteří operátoři, jako LIKE, používají stejnojmenné funkce jako podvrstvu, kterou lze také nahradit uživatelsky definovanými funkcemi.
SQLite nepodporuje vytváření procedur , ale jejich potřeba je menší díky zabudované architektuře.
SQLite umožňuje vytváření indexů na jednom nebo více sloupcích. Rejstříky mohou být vzestupné ( ASC ) nebo sestupné ( DESC ) a také jedinečné (je to podobné jako při vytváření omezení jedinečnosti). SQLite používá svůj index B-strom .
SQLite zavádí klíčové slovo EXPLAIN, které se používá k popisu kroků potřebných k provedení příkazu a použitých indexů.
Pragmas jsou páry konfigurace a hodnoty SQLite. Jsou interní v databázi a umožňují vám popsat, jak by měl SQLite interpretovat určité operace. Umožňují také aktivovat nebo deaktivovat určité funkce, zejména z důvodu zpětné kompatibility.
Kromě svého oficiálního implementaci v C , vazby na jiné jazyky existují ( C ++ , Perl , Ruby , TCL , jazyky pomocí .NET framework pomocí ADO.NET ovladač ...).
Některé programovací jazyky obsahují SQLite ve své standardní knihovně , například Python (od verze 2.5) a PHP (od verze 5).
SQLite se používá v mnoha svobodných softwarech, jako je Mozilla Firefox , v mnoha distribucích GNU / Linux , v serverových a desktopových operačních systémech, jako je Solaris nebo v mobilních zařízeních, jako je Android nebo Symbian , v některých softwarech od Apple , Google , Adobe a McAfee a také v některých zařízení Philips .
SQLite je také k dispozici s verzí 8.4 softwaru Primavera P6 od společnosti Oracle.
Návrh týkající se ukládání databáze SQL na straně webového prohlížeče publikovaný W3C také uvádí, že software implementující tuto funkci musí být schopen správně interpretovat dialekt SQLite ve své verzi 3.6.19 . Ačkoli W3C nevynucuje SQLite, Google Chrome , Apple Safari a Prohlížeč Opera jej pro tento účel používají.
SQLite existuje ve 2 hlavních verzích: 2.xa 3.x. Verze SQLite 2 a 3 se vyznačují několika evolucemi: