Kehittäjä | Richard Hipp |
---|---|
Ensimmäinen versio | Elokuu 2000 |
Viimeinen versio | 3.36,0 (18. kesäkuuta 2021) |
Tallettaa | www.sqlite.org/src |
Kirjoitettu | VS |
Käyttöjärjestelmä | Monialustainen |
Lue muodot | SQLite-tietokantatiedostomuoto ( d ) , SQLite 3.x -tietokanta ( d ) ja SQLite rollbak -päiväkirja ( d ) |
Kirjalliset muodot | SQLite-tietokantatiedostomuoto ( d ) , SQLite 3.x -tietokanta ( d ) , SQLite Zipvfs -pakattu tietokanta ( d ) ja SQLite rollbak -päiväkirja ( d ) |
Tyyppi | Ajoneuvon tietokannan hallintajärjestelmä ( d ) |
Lisenssi | Julkinen verkkotunnus |
Verkkosivusto | sqlite.org |
SQLite (lausutaan [ ɛs.ky.ɛl.ajt ]) on kirjasto kirjoitettu kielellä C , joka tarjoaa moottori on relaatiotietokantojen ymmärrettävällä kielellä SQL . SQLite toteuttaa suurelta osin SQL-92- standardinja ACID-ominaisuudet .
Toisin perinteinen tietokanta palvelimet , kuten MySQL tai PostgreSQL , sen erityispiirre ei ole toistaa tavallista asiakas-palvelin järjestelmä vaan tuoda suoraan ohjelmiin . Koko tietokanta (ilmoitukset, taulukot, hakemisto ja tiedot) tallennetaan alustasta riippumattomaan tiedostoon .
D. Richard Hipp , luoja SQLite, on päättänyt laittaa tämän kirjaston ja sen lähdekoodi on julkisesti , mikä mahdollistaa sen rajoittamattoman käytön sekä avoimen lähdekoodin ja omaan projekteja . SQLiten luoja ja eräät pääkehittäjistä ovat amerikkalaisen Hwaci- yrityksen palveluksessa .
SQLite on käytetyin tietokantamoottori maailmassa:
Koska se on äärimmäisen keveys (alle 600 KiB ), se on myös hyvin suosittu sulautettujen järjestelmien , erityisesti kaikkein modernit älypuhelimet ja tabletit : iOS , Android ja Symbian mobiili käyttöjärjestelmiä käyttää sitä tietokantaan. Upotettu. Yhteensä voimme laskea yli miljardi tunnettua ja raportoitua kirjastokopiota.
Richard Richard Hipp ja hänen kollegansa alkoivat suunnitella SQLite-palvelua vuoden 2000 alussa työskennellessään sitten General Dynamicsilla , sitten Yhdysvaltain laivaston kanssa tehdyllä sopimuksella . SQLite-ohjelmaa oli tarkoitus käyttää ohjattuissa ohjuksissa korvaamaan IBM Informix -tietokannat, jotka toimivat HP-UX- koneilla . Päätavoitteena oli pystyä toimeen ilman asennusta tai hallintaa: tietokannan asentaminen tai päivittäminen voi viedä koko päivän.
Elokuussa 2000 julkaistiin ensimmäinen SQLite-versio. Hän käytti gdbm: ää ( GNU Database Manager) manipuloida B-puita .
SQLite 2.0 poistaa riippuvuuden gdbm: stä ja lisää transaktiotukea.
AOL: n avulla tuotettu SQLite 3.0 julkaistiin vuonna 2004, ja se lisää muun muassa alueellistamista ( lajittelulla ja Unicode-tuella ) ja tyyppideklarointia.
Suurin tietokannan hallintajärjestelmä on rakennettu mukaan asiakas-palvelin paradigma , eli asiakkaan ohjelmisto kirjasto on integroitu ja sitä käytetään yhden tai useamman sovelluksen, kun tietokanta moottori on käynnissä. Omassa suorittamisen tilan, tai jopa eri koneessa, kuin IT-osasto .
SQLite päinvastoin on integroitu suoraan sovellukseen, joka käyttää ohjelmistokirjastoa tietokantamoottorilla. Pääsy SQLite- tietokantaan tapahtuu avaamalla sitä vastaava tiedosto: kukin tietokanta tallennetaan sille ominaiseen tiedostoon, jossa on sen ilmoitukset, taulukot ja hakemistot, mutta myös tiedot.
Tämän ominaisuuden ansiosta SQLite on mielenkiintoinen vaihtoehto tekstitiedostoille, jota käytetään integroidun tallennustilan välineenä monissa sovelluksissa ( parametrit , historia , välimuisti ...), koska se tekee pääsyn tietoihin nopeammaksi, turvallisemmaksi, jäsennellymmäksi, helpommaksi ja täydellisemmäksi alustasta riippumatta , mutta ei vaikuta sitä käyttävän sovelluksen käyttöönoton helppouteen.
Välimiehen poistaminen sovelluksen ja datan välillä vähentää myös tiedonsiirron viivettä hieman verrattuna asiakas-palvelin-paradigmaa käyttäviin järjestelmiin.
Tämä arkkitehtuuri aiheuttaa kuitenkin useita ongelmia:
SQLite-tietokantatiedostoille ei ole erityistä laajennusta , mutta on tavallista kohdata laajennuksia, kuten .sqlite tai .db , joita seuraa joskus kirjaston versionumero ( .sqlite3 , .db2 jne.). On mahdollista käyttää tietokantaa vain tallennetaan RAM luomatta tietokannan tiedoston sisältöä kautta erityinen tiedoston nimi : muisti: .
Yleensä on suositeltavaa käyttää SQLite-sovellusta silloin, kun tietoja ei ole keskitetty ja jos tietokannan koon laajentaminen ei todennäköisesti tule kriittiseksi. Jos tietokannan tarkoituksena on keskittää suuri joukko tietoja ja toimittaa se suurelle määrälle asiakkaita, on parempi käyttää DBMS: itä asiakas-palvelin-paradigman perusteella. SQLite on tarkoitettu korvaamaan tekstitiedostot, ei perinteisiä tietokantapalvelimia.
Kun SQL-kysely välitetään SQLite- ohjelmointirajapinnan kautta , se kootaan ennen suoritusta.
Kääntäjän sekvensseri jakaa annetut komennot osiksi, jotka voidaan käsitellä erikseen (esimerkiksi kysely ja sen alakysely), jotka välitetään jäsentäjälle, joka huolehtii kyselyjen jakamisesta eri kohteiksi, jotka edustavat erilaisia järjestyksiä. SQL-kielen lausekkeet. Nämä objektit välitetään koodigeneraattorille, joka luo matalan tason välikoodin tai tavukoodin .
Tuloksena oleva koodi on joukko käskyjä (137 erilaista ohjetta), joita kutsutaan OpCodeiksi . Tämä käynnistetään SQLiten virtuaalikoneessa, joka näkee ne pieninä ohjelmina, jotka kuvaavat tiedonhaku-, luku- ja muokkaustoimintoja.
Kun virtuaalisen koneen tulkitsee nämä ohjeet, hän kutsui johtaja B-puu , joka perustuu kerrokset alentaa tasolle, joka piilottaa sivut levy ja laitteisto abstraktio kerros .
SQLite ei integroi käyttöoikeuksien hallintaa ja tietojen muokkaamista. Johto on tekemä tiedostojärjestelmä on käyttöjärjestelmä : jos sisältävä tiedosto tietokantaan ei voi kirjoittaa käyttäjälle, käyttäjä voi myös muokata kirjaa ja perusrakenne tietoja.
GRANT- ja REVOKE- käyttöoikeuksien hallintaa ei siis ole, vaikka ne ovatkin osa SQL-92- spesifikaatiota .
SQLite-tietokannan käyttäminen ei vaadi asennusta tai määritysmenettelyä.
Kirjasto on kirjoitettu kokonaan C-ANSI: lla , C- ohjelmointikielen standardoidulla versiolla , eikä siinä käytetä muita ulkoisia kirjastoja kuin tavallinen kielikirjasto . Tämä tekee SQLite- sovelluksesta käännettävän ilman suuria muutoksia kaikissa tietokonearkkitehtuureissa, jolloin C-kääntäjä on ANSI-standardin mukainen.
SQLite-tietokantatiedostot ovat täysin riippumattomia käyttöjärjestelmästä ja arkkitehtuurista, jolla niitä käytetään. Samaa tietokantatiedostoa voidaan käyttää kahdessa arkkitehtuurissa, joilla on täysin erilainen toiminta, SQLite tarjoaa avoimen abstraktikerroksen kehittäjälle. Tiedostot ovat keskenään yhteensopivia kirjaston jokaisen pääversion kanssa SQLiten versiosta 3.0.0 lähtien, joten versiolla 3.0.0 luotua tiedostoa voidaan käyttää versiolla 3.6.19 ja päinvastoin, kahden eri pääversion välillä luotu tiedosto ( Esimerkiksi 2.0.0 ja 3.0.0 ) voivat olla yhteensopivia (etenkin taaksepäin yhteensopivuuden suhteen), mutta näin ei ole aina.
SQLite käyttää dynaamista kirjoittamista solusisältöön , toisin kuin melkein kaikki staattista kirjoittamista käyttävät DBMS : t: Kun luot uuden taulukon tietokantaan, se on suositeltava tai affiniteettityyppi, ei pakollinen, tallennettavista tiedoista täytettyyn sarakkeeseen. eikä tyyppi, joka määrittelee tavan, jolla tämä esitetään muistissa, tämä tehtävä varataan itse solulle. Kun tietoja syötetään tietokantaan, SQLite yrittää muuntaa uudet tiedot suositelluksi tyypiksi, mutta ei tee niin, jos se ei ole mahdollista.
SQLite-sivustossa on useita affiniteettityyppejä, jotka määrittelevät SQLite-ohjelman toiminnan, kun syötetään uusia tietoja:
Täten jokainen affiniteettityyppi voi hyväksyä minkä tahansa tyyppisen datan, ainoa poikkeus on tietty tyyppi INTEGER PRIMARY KEY , kun sitä käytetään yhdessä sarakkeessa, koska se ei ole tavallinen tyyppi, vaan aliaksesta sisäiseen sarakkeeseen ROWID- moottori, joka vastaa tietueen osoitetta, ainutlaatuinen taulukon toisella puolella.
Dynaamisen kirjoittamisen käyttö parantaa tietokannan tietojen ja kyselyyn käytettyjen kielityyppien välistä homogeenisuutta, jos kieli on myös dynaamisesti kirjoitettu kieli (kuten Python , PHP , Perl tai Ruby ) aiheuttamatta todellisia ongelmia staattista kirjoittamista käyttävät kielet (kuten C / C ++ tai Java ).
Affiniteetin tyypin määrittäminenYhteensopivuuden ylläpitämiseksi muiden relaatiotietokantojen kanssa SQLite muuntaa ilmoitettujen tyyppien nimet automaattisesti parhaiten vastaavaksi affiniteettityypiksi seuraavasti:
Vaikka SQLite käyttää dynaamista kirjoittamista, muistissa oleva esitys ja tiedoille suoritettu käsittely edellyttävät erilaisten tallennusluokkien käyttöä. Tämä pätee vain versioon 3 ja sen myöhempiin versioihin, koska tiedot tallennettiin merkkijonoina aiemmissa versioissa.
Kaikissa tietokantamoottorin käsittelemissä tiedoissa käytetään yhtä seuraavista tyypeistä:
Standardi ei määritä tarkalleen, miten NULL- tyyppiä tulisi käsitellä .
Kuten useimmissa relaatiotietokannoissa, kaikki NULL- tietueet katsotaan erillisiksi UNIQUE- rajoituksen perusteella, mutta UNION- operaattori ja DISTINCT-avainsana pitävät niitä identtisinä .
Aritmeettiset operaatiot, jotka sisältävät lausekkeeseen NULL- tyypin , palauttavat TUNNETTU (määrittelemätön arvo). Vuonna Boolean operaatioiden , paluu arvo voisi olla UNKNOWN jos NULL tyyppiä esiintyy ja tulosta ei voida varmuudella todeta: nolla tai 1 antaa arvon 1 , mutta tyhjä eikä 0 antaa arvoa UNKNOWN koska toimintaa ei voida ratkaista varmuudella .
PäivämäärätSQLite-sivustolla ei ole tyyppiä, joka edustaisi päivämääriä. Näiden manipuloimiseksi on kuitenkin olemassa joukko toimintoja. Päivämäärä voidaan tallentaa merkkijonona sen ISO 8601 -muodossa tai kokonaislukuna UNIX-aikaleiman muodossa .
SQLite hallinnoi yhden tai useamman sarakkeen rajoituksia. EI NULL- , CHECK- , DEFAULT- ja COLLATE- rajoitukset ilmoitetaan sarakkeessa, kun taas PRIMARY KEY- , UNIQUE- , CHECK- ja FOREIGN KEY -rajoitukset voidaan ilmoittaa yhdessä tai useammassa sarakkeessa.
UNIQUE- rajoitus luo automaattisesti hakemiston sarakkeisiin, joihin sitä sovelletaan.
PÄÄAVAINEnsisijainen avainrajoitus luo kuitenkin UNIQUE- rajoituksen kyseisiin sarakkeisiin, ja toisin kuin standardi , SQLiten PRIMARY KEY -rajoitin sallii NULL- merkinnät . Tämä ei ole standardin mukainen, ja tämä poikkeama voidaan korjata tulevissa versioissa. Siksi on suositeltavaa lisätä NOT NULL -rajoitus ensisijaisen avaimen ilmoitukseen.
ROWID ja AUTOINCREMENTJokainen taulukon rivi on merkitty 64-bittisellä allekirjoitetulla kokonaisluvulla nimeltä ROWID . Kun taulukko ilmoitetaan yhdellä ja vain yhdellä INTEGER PRIMARY KEY -sarakkeella, tästä sarakkeesta tulee ROWID- aliaksen nimi . Aliaksen käyttö ROWID- tunnisteen kanssa lisää hakujen nopeutta, joka voi olla jopa kaksi kertaa nopeampi kuin normaalilla ensisijaisella avaimella, joka liittyy sen ainutlaatuisuusindeksiin.
Kun taulukko on tyhjä, algoritmi määrittää tunnukselle arvon 1 , jonka se lisää jokaiselle uudelle tietueelle, kunnes se saavuttaa 64-bittisen allekirjoitetun kokonaisluvun ( ) rajan . Kun tämä raja on saavutettu, se käyttää uudelleen poistettujen tietueiden vapauttamia tiloja. Tunnisteiden allokointi ei siis ole enää inkrementaalista vaan satunnaista.
On mahdollista käyttää avainsanaa AUTOINCREMENT . Viimeksi mainittu muuttaa algoritmia hieman: kun kokonaisluvun raja on saavutettu, uutta tietuetta ei voida enää lisätä. Tämä mahdollistaa sen, että samaa tunnistetta ei koskaan kanneta kahdessa erillisessä tietueessa, vaikka ne eivät olisikaan samanaikaisesti.
ULKOMAAN AVAINVersiosta 3.6.19 lähtien SQLite pystyy hallitsemaan vieraan avaimen rajoituksia .
Taaksepäin yhteensopivuuden vuoksi ulkomaisen avaimen tuki ei ole oletusarvoisesti käytössä. Aktivoinnin suorittaa Foreign_keys- pragma .
Kaikki sarakkeet, joihin vieras avain viittaa, on ilmoitettava ainutlaatuisiksi ( ENSIMMÄINEN AVAIN luo yksilöllisen avaimen). SQLite ei vielä ota huomioon MATCH- lauseketta vieraiden avainten määrittelyssä.
SQLite hallinnoi laukaisimia melko täydellisellä tavalla. Käynnistimet ENNEN , JÄLKEEN tai PÄIVÄT voidaan raportoida. SQLite tukee JOKA RIVI -vaihtoehtoa (oletusarvo), mutta ei JOKAISEKSI LASKENTAKSI .
SQLite sallii näkymien luomisen kyselyjen pituuden lyhentämiseksi.
Näkymät ovat vain luku -tilassa , mutta INSTEAD OF -ominaisuuden kanssa on mahdollista käyttää käynnistimiä simuloimaan kykyä muokata niitä.
Kaikki SQL-komennot, joiden tarkoituksena on muuttaa tietokannan tilaa (melkein mikä tahansa muu komento kuin SELECT ), sisältävät heille omistetun tapahtuman luomisen , kunhan komentoa sisältävää tapahtumaa ei ole jo luotu. Tämä tarkoittaa, että kaikki komennot ovat atomisia . Jos komennon suorittaminen ei aiheuta virhettä, muokkaus tehdään automaattisesti (automaattinen sitoumus ), mutta jos näin ei ole, kaikki komennon tekemät muutokset peruutetaan.
Kaikki tietokannan muutokset on sarjatuotettu: vain yksi muokkaus suoritetaan kerrallaan ja tietokanta lukitaan lukemista varten muokkauksen aikana.
SQLite mahdollistaa sekä tapahtumien luomisen että palautuspisteiden ( SAVEPOINT ) luomisen, mutta ei salli eristäytymisen eriasteista hallintaa. Tapahtumassa ensimmäisen lukukomennon kutsun aikana aktivoidaan jaettu lukitus, joka sallii lukuoikeuden, mutta kieltää kaiken muutoksen muilla tapahtumilla, ensimmäisen kirjoituspuhelun aikana koko tietokanta luetaan ja kirjoitetaan lukittuna muita tapahtumia varten .
HappoVaikka SQLite ensi silmäyksellä kunnioittaisi ACID-ominaisuuksien joukkoa , jotka määrittävät transaktiojärjestelmän luotettavuuden, on silti mahdollista laittaa tietokanta epäjohdonmukaiseen tilaan, koska tyyppejä ei pakoteta: on mahdollista esimerkiksi lisätä merkkijonon sarakkeessa, jonka affiniteetti tyyppi määritellään kokonaisluku . Tiukassa tulkinnassaan SQLite ei kunnioita ACID-ominaisuuksien joukkoa.
SQLite mahdollistaa sellaisten väliaikaisten taulukoiden luomisen, joiden määritelmiä, tietoja ja hakemistoja ei tallenneta tietokantatiedostoon ja jotka menetetään siksi, kun tietokanta suljetaan.
On mahdollista luoda suoraan kirjastosta oma tallennusmoottori tietokantataulukon simuloimiseksi. Virtuaalitaulukon luominen tapahtuu toteuttamalla joukko toimintoja. Pöydän käyttö on täysin avointa lukuun ottamatta tiettyjen toimintojen puuttumista (mahdotonta luoda laukaisimia tai indeksejä tai muokata taulukon rakennetta).
Tämä mekanismi mahdollistaa pääsyn SQL-kielellä mihin tahansa tietolähteeseen, kuten CSV- tai XML- tiedostoihin .
SQLite tarjoaa ohjelmointirajapinnan kautta sen kirjasto, luoda käyttäjälle toimintoja . Kirjaston määrittelemät toiminnot voidaan ylikuormittaa määrittelemään niiden toteutus uudelleen. Jotkut operaattorit, kuten LIKE, käyttävät samanlaisia toimintoja alikerroksina, jotka voidaan myös korvata käyttäjän määrittelemillä toiminnoilla.
SQLite ei tue luomista menettelyjä , mutta niiden tarve on vähäisempi, koska upotettu arkkitehtuuria.
SQLite sallii hakemistojen luomisen yhdelle tai useammalle sarakkeelle. Hakemistot voivat olla nousevia ( ASC ) tai laskevia ( DESC ) sekä ainutlaatuisia (tämä on samanlainen kuin ainutlaatuisuusrajoituksen luominen). SQLite käyttää hakemistonsa B-puuta .
SQLite esittelee avainsanan EXPLAIN, jota käytetään kuvaamaan komennon suorittamiseen tarvittavat vaiheet sekä käytetyt indeksit.
Pragmat ovat SQLite-määritysavain / arvo-pareja. Ne ovat tietokannan sisäisiä ja antavat sinun kuvata, kuinka SQLiten tulisi tulkita tiettyjä toimintoja. Niiden avulla voit myös aktivoida tai deaktivoida tiettyjä ominaisuuksia, etenkin taaksepäin yhteensopivuuden vuoksi.
Sen lisäksi virallista täytäntöönpanoa C , siteet muille kielille olemassa ( C ++ , Perl , Ruby , TCL , kieliä käyttäen NET kautta ADO.NET kuljettaja ...).
Jotkut ohjelmointikielet sisältävät SQLite- standardikirjastossa , esimerkiksi Python (versiosta 2.5 lähtien) ja PHP (versiosta 5 lähtien).
SQLite-sovellusta käytetään monissa ilmaisohjelmistoissa, kuten Mozilla Firefox , monissa GNU / Linux- jakeluissa , palvelimen ja työpöydän käyttöjärjestelmissä, kuten Solaris tai mobiililaitteissa, kuten Android tai Symbian , joissakin Applen , Googlen , Adoben ja McAfeen ohjelmistoissa sekä joissakin laitteet Philips .
SQLite on saatavana myös Oravlen Primavera P6 -ohjelmiston version 8.4 kanssa.
W3C: n julkaisemassa luonnoksessa, joka koskee SQL-tietokannan tallentamista verkkoselaimen puolelle, todetaan myös, että tätä ominaisuutta käyttävien ohjelmistojen on kyettävä tulkitsemaan oikein SQLite-kieli sen versiossa 3.6.19 . Vaikka W3C ei pakota SQLitea, Google Chrome , Apple Safari ja Opera Browser käyttävät sitä tähän tarkoitukseen.
SQLite on olemassa kahdessa pääversiossa: 2.x ja 3.x. SQLite-versiot 2 ja 3 eroavat toisistaan useilla muutoksilla: