SQLite

Το **SQLite** (ɛskjuːɛlˈlaɪt/ ή /ˈsiːkwəl.laɪt/) είναι ένα σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων που περιέχεται σε μια C προγραμματιστική βιβλιοθήκη. Σε αντίθεση με άλλα συστήματα διαχείρισης βάσης δεδομένων, το SQLite δεν είναι μια ξεχωριστή διεργασία που προσπελάζεται από μια εφαρμογή πελάτη, αλλά ένα ενσωματωμένο μέρος της.

Το SQLite είναι συμβατό με ACID και υλοποιεί το μεγαλύτερο μέρος του προτύπου SQL, χρησιμοποιώντας μια δυναμική και εβδομαδιαία τυπωμένη SQL σύνταξη που δεν εγγυάται την ακεραιότητα του τομέα.

Το SQLite είναι μια δημοφιλής επιλογή ως ενσωματωμένη βάση δεδομένων για τοπική αποθήκευση ή αποθήκευση πελάτη σε λογισμικό εφαρμογής όπως ως φυλλομετρητής. Είναι η πιο πλατιά αναπτυσσόμενη μηχανή βάσης δεδομένων και χρησιμοποιείται σήμερα από πολλούς φυλλομετρητές ευρείας χρήσης , από λειτουργικά συστήματα και από ενσωματωμένα συστήματα, μεταξύ άλλων. Το SQLite έχει συνδέσεις με πολλές γλώσσες προγραμματισμού.

Η πηγαία γλώσσα για το SQLite είναι κοινό κτήμα.

## Σχεδιασμός
Αντίθετα με τα συστήματα διαχείρισης βάσεων δεδομένων μορφής Μοντέλο πελάτη-διακομιστή, η μηχανή SQLite δεν έχει αυτόνομες διεργασίες με τις οποίες επικοινωνεί το πρόγραμμα της εφαρμογής. Αντίθετα, η βιβλιοθήκη SQLite είναι συνδεμένη και έτσι γίνεται ένα ενσωματωμένο μέρος του προγράμματος εφαρμογής.  (Σε αυτό, το SQLite ακολουθεί το προηγούμενο του Informix SE του c. 1984)  Η βιβλιοθήκη μπορεί επίσης να κληθεί δυναμικά. Το πρόγραμμα της εφαρμογής χρησιμοποιεί τη λειτουργικότητα του SQLite μέσα από απλές κλήσεις συνάρτησης, που μειώνουν την καθυστέρηση στην πρόσβαση της βάσης δεδομένων: οι κλήσεις της συνάρτησης μέσα από μια απλή διεργασία είναι πιο αποτελεσματικές από την Διαδιεργασική επικοινωνία. Το SQLite αποθηκεύει την συνολική βάση δεδομένων (ορισμούς, πίνακες, δείκτες και τα ίδια τα δεδομένα) ως ένα μοναδικό διαλειτουργικό αρχείο στη μηχανή ενός οικοδεσπότη. Υλοποιεί αυτόν τον απλό σχεδιασμό με κλείδωμα όλου του αρχείου της βάσης δεδομένων κατά τη διάρκεια της εγγραφής. Το SQLite διαβάζει λειτουργίες που μπορεί να είναι πολυλειτουργικές, αν και οι εγγραφές μπορούν να γίνουν μόνο με τη σειρά.

## Ιστορικό
Ο D. Richard Hipp σχεδίασε το SQLite την άνοιξη του 2000 ενώ δούλευε στη General Dynamics σε συμβόλαιο με το Ναυτικό των Ηνωμένων Πολιτειών. Ο Hipp σχεδίαζε λογισμικό για ενσωματωμένη χρήση σε καθοδηγούμενους καταστροφείς πυραύλων, που αρχικά βασίστηκε σε HP-UX με μια βάση δεδομένων IBM Informix παρασκηνίου. Οι σκοποί σχεδίασης του SQLite ήταν να επιτρέπει στο πρόγραμμα να λειτουργήσει χωρίς εγκατάσταση ενός συστήματος διαχείρισης βάσης δεδομένων ή χωρίς να απαιτείται  ένας διαχειριστής βάσης δεδομένων. Τον Αύγουστο του 2000, εκδόθηκε το SQLite 1.0, με βάση το gdbm (Διαχειριστής βάσης δεδομένων GNU). Το SQLite 2.0 αντικατέστησε το gdbm με μια προσαρμοσμένη εφαρμογή B-tree, προσθέτοντας υποστήριξη για συναλλαγές. Στο SQLite 3.0, που χρηματοδοτήθηκε μερικώς από την America Online, προστέθηκε διεθνοποίηση και τοπικοποίηση, manifest typing και άλλες σημαντικές βελτιώσεις.

Το 2011 ο Hipp ανακοίνωσε τα σχέδια του να προσθέσει μια διεπαφή UnQL στις βάσεις δεδομένων SQLite και να αναπτύξει το *UnQLite*, μια ενσωματώσιμη κειμενοστραφή βάση δεδομένων. Ο Howard Chu μετέφερε το SQLite 3.7.7.1 για να χρησιμοποιεί Openldap MDB αντί για τον αρχικό κώδικα Btree και το απεκάλεσε προσαρμογή στο SQLite. Σε μια δοκιμή εισαγωγής 1000 εγγραφών ήταν 20 φορές πιο γρήγορο.

## Χαρακτηριστικά
Το SQLite υλοποιεί το μεγαλύτερο μέρος του προτύπου SQL-92 για το SQL, αλλά του λείπουν κάποια χαρακτηριστικά. Για παράδειγμα, έχει μερική υποστήριξη για εναύσματα βάσης δεδομένων και δεν μπορεί να γράψει σε προβολή (βάσης δεδομένων) (υποστηρίζει όμως ΣΤΗ ΘΕΣΗ τους εναύσματα που παρέχουν αυτή τη λειτουργία). Αν και υποστηρίζει σύνθετα ερωτήματα, έχει ακόμα περιορισμένη υποστήριξη για ALTER TABLE, καθώς δεν μπορεί να τροποποιήσει ή να διαγράψει στήλες.

Το SQLite χρησιμοποιεί ένα ασυνήθιστο Σύστημα τύπων για μια συμβατή με SQL DBMS· αντί της απόδοσης ενός τύπου σε μια στήλη όπως συμβαίνει στα περισσότερα συστήματα βάσεων δεδομένων SQL, οι τύποι αποδίδονται σε ατομικές τιμές· με όρους γλώσσας είναι έχει *δυναμικό τύπο*. Επιπλέον, έχει *αδύναμο τύπο* σε μερικούς από τους ίδιους τρόπους που έχει η Perl: κάποιος μπορεί να εισάγει μια Συμβολοσειρά σε μια στήλη ακεραίων (αν και το SQLite θα προσπαθήσει αρχικά να μετατρέψει τη συμβολοσειρά σε ακέραιο, αν ο προτιμώμενος  τύπος της στήλης είναι ακέραιος). Αυτό προσθέτει ευκινησία στις στήλες, ειδικά όταν συνδέεται σε έναν δυναμικό τύπο γλώσσας σεναρίου. Όμως, η τεχνική δεν μεταφέρεται σε άλλα προϊόντα SQL. Μια συνηθισμένη κριτική είναι ότι σε ένα σύστημα τύπου SQLite λείπει ο μηχανισμός ολοκληρωμένων δεδομένων που παρέχεται από από στήλες με δυναμικό τύπο σε άλλα προϊόντα. Ο ιστότοπος του SQLite περιγράφει  μια κατάσταση "αυστηρής συγγένειας", αλλά αυτό το χαρακτηριστικό δεν έχει ακόμα προστεθεί Όμως, μπορεί να υλοποιηθεί με περιορισμούς όπως `CHECK(typeof(x)='integer')`.

Πολλές διεργασίες υπολογιστή ή νήματα μπορεί να προσπελάζουν την ίδια βάση δεδομένων ταυτόχρονα. Πολλές προσπελάσεις ανάγνωσης μπορούν να ικανοποιηθούν παράλληλα. Μια πρόσβαση εγγραφής μπορεί να ικανοποιηθεί μόνο αν καμιά άλλη πρόσβαση δεν εξυπηρετείται την ίδια στιγμή. Αλλιώς, η πρόσβαση εγγραφής αποτυγχάνει με ένα κωδικό σφάλματος (ή μπορεί να ξαναγίνει αυτόματη προσπάθεια μέχρι τη λήξη χρόνου). Αυτή η ταυτόχρονη κατάσταση πρόσβασης μπορεί να αλλάξει όταν αντιμετωπίζονται προσωρινοί πίνακες. Αυτός ο περιορισμός χαλάρωσε στην έκδοση 3.7 όταν η write-ahead logging (WAL) ενεργοποιήθηκε ενεργοποιώντας ταυτόχρονες αναγνώσεις και εγγραφές.

Ένα αυτόνομο πρόγραμμα που λέγεται `sqlite3` παρέχεται που μπορεί να χρησιμοποιηθεί για να δημιουργήσει μια βάση δεδομένων, να ορίσει τους πίνακες μέσα της, να εισάγει και να αλλάξει γραμμές, να εκτελέσει ερωτήματα και να διαχειριστεί ένα αρχείο βάσης δεδομένων SQLite. Αυτό το πρόγραμμα είναι ένα μοναδικό εκτελέσιμο αρχείο στη μηχανή οικοδεσπότη. Εξυπηρετεί επίσης ως παράδειγμα για εγγραφή εφαρμογών που χρησιμοποιούν τη βιβλιοθήκη SQLite.

Η πλήρης υποστήριξη Unicode του SQLite είναι προαιρετική.

Το SQLite έχει αυτόματη δοκιμή οπισθοχώρησης πριν από κάθε έκδοση. Πάνω από 2 εκατομμύρια δοκιμές εκτελούνται ως μέρος της της επαλήθευσης της έκδοσης. Ξεκινώντας στις 10 Αυγούστου 2009 με την έκδοση SQLite 3.6.17, οι εκδόσεις του SQLite έχουν 100% κάλυψη των δοκιμών κλάδου, ένα από τα συστατικά της κάλυψης κώδικα.

Από την έκδοση 3.8.2 μπορείτε να δημιουργήσετε πίνακες χωρίς rowid.

## Ανάπτυξη
Η ανάπτυξη του SQLite αποθηκεύει τις αναθεωρήσεις του πηγαίου κώδικα του στο Fossil, ένα σύστημα ελέγχου διανεμόμενης έκδοσης που το ίδιο χτίζεται σε μια βάση δεδομένων του SQLite.

## Αποδοχή

### Γλώσσες προγραμματισμού
Το SQLite έχει συνδέσεις για έναν μεγάλο αριθμό γλωσσών προγραμματισμού, που συμπεριλαμβάνουν :

* BASIC
* Delphi
* C
* C#
* C++
* Clipper//Harbour
* Common Lisp
* Curl
* D
* Free Pascal
* Go
* Haskell

* Java
* JavaScript 
* Julia
* Livecode
* Lua
* newLisp
* Objective-C (on OS X and iOS)
* OCaml
* Perl
* PHP
* Pike
* PureBasic

* Python
* R
* REALbasic
* REBOL
* Ruby
* Scheme
* Smalltalk
* Tcl
* Visual Basic
* Xojo

### Ενδιάμεσο λογισμικό
* Η προσαρμογή ADO.NET, αναπτύχθηκε αρχικά από τον Robert Simpson, διατηρείται από κοινού με τους προγραμματιστές του SQLite από τον Απρίλιο του 2010.
* Ο οδηγός ODBC έχει αναπτυχθεί και συντηρείται ξεχωριστά από τον Christian Werner. Ο οδηγός ODBC του Werner αποτελεί τη συνιστώμενη μέθοδο σύνδεση για πρόσβαση της SQLite από το OpenOffice.org.
* Το πρόγραμμα COM (ActiveX) κάνει προσβάσιμο το SQLite στα Windows σε γλώσσες σεναρίου όπως JScript and VBScript. Αυτό προσθέτει δυνατότητες βάσης δεδομένων στις εφαρμογές HTML (HTA).
* Το XULRunner χρησιμοποιεί SQLite

### Φυλλομετρητές ιστού
* Οι φυλλομετρητές Google Chrome, Opera, Safari και ο Android Browser επιτρέπουν την αποθήκευση πληροφοριών καθώς και την ανάκτησή τους από μια βάση δεδομένων SQLite μέσα από τον φυλλομετρητή, χρησιμοποιώντας την τεχνολογία Web SQL Database.
* Τα Mozilla Firefox και Mozilla Thunderbird αποθηκεύουν πολλά δεδομένα διαμόρφωσης (σελιδοδείκτες, μπισκότα, επαφές κ.λ.π.) σε εσωτερικά διαχειριζόμενες βάσεις δεδομένων SQLite και προσφέρουν ακόμα ένα πρόσθετο για να διαχειριστείτε βάσεις δεδομένων SQLite.

### Πλαίσια εφαρμογών ιστών
* Το Bugzilla, η βάση δεδομένων σφαλμάτων του Mozilla γραμμένη σε Perl μπορεί να χρησιμοποιήσει το SQLite για να αποθηκεύσει δεδομένα και ρυθμίσεις.
* Το Django, ένα πλαίσιο ιστού Python, υποστηρίζει το SQLite3 από προεπιλογή.
* Από την έκδοση 7, το Drupal, ένα  Σύστημα διαχείρισης περιεχομένου με βάση το PHP για τη δημιουργία ιστότοπων και ιστολογίων, έχει μια επιλογή για εγκατάσταση χρησιμοποιώντας SQLite.
* Το προεπιλεγμένο σύστημα διαχείρισης βάσεων δεδομένων του Ruby on Rails είναι επίσης SQLite.
* Το web2py, ένα πλαίσιο ιστού Python, έχει ως προεπιλεγμένο σύστημα διαχείρισης βάσεων δεδομένων το SQLite.

### Διάφορα
* Το Skype είναι μια ευρέως αναπτυσσόμενη εφαρμογή που χρησιμοποιεί το SQLite.
* Τα Συστήματα Adobe χρησιμοποιούν το SQLite ως μορφή των αρχείων τους στο Adobe Photoshop Lightroom, μια πρότυπη βάση δεδομένων στο Adobe AIR και εσωτερικά στο Adobe Reader.
* Οι εγκαταστάσεις διαχείρισης υπηρεσιών που χρησιμοποιούνται για διαχείριση υπηρεσιών στο Solaris και τα λειτουργικά συστήματα OpenSolaris, χρησιμοποιούν εσωτερικά SQLite.
* Το Flame, ένα πρόγραμμα για κακόβουλο λογισμικό που χρησιμοποιείται για κυβερνοκατασκοπία, χρησιμοποιεί το SQLite για την αποθήκευση των δεδομένων που συλλέγει.
* Η γλώσσα προγραμματισμού Xojo έχει ενσωματωμένη υποστήριξη του SQLite και στην επιφάνεια εργασίας και στα web frameworks.

### Λειτουργικά συστήματα
Λόγω του μικρού του μεγέθους, το SQLite είναι καλά προσαρμοσμένο σε ενσωματωμένα συστήματα και περιλαμβάνεται επίσης στα:
* Blackberry's BlackBerry 10 OS
* Microsoft's Windows Phone 8
* Apple's iOS
* Symbian OS
* Nokia's Maemo
* Google's Android
* Linux Foundation's MeeGo
* LG's webOS
* NetBSD
* OpenBSD
* FreeBSD όπου ξεκινώντας με την έκδοση 10 είναι το πακέτο πυρήνα διαχείρισης του συστήματος.
* illumos

Όμως, είναι επίσης κατάλληλο για λειτουργικά συστήματα επιφάνειας εργασίας· η Apple το υιοθέτησε ως μια επιλογή στο API δεδομένων πυρήνα του OS X από την αρχική υλοποίηση σε Mac OS X 10.4 και πέρα καθώς και για τη διαχείριση βίντεο και τραγουδιών στο iPhone.

## Δείτε επίσης
* Σύγκριση των συστημάτων διαχείρισης των σχεσιακών βάσεων δεδομένων
* Κατάλογος των συστημάτων διαχείρισης σχεσιακών βάσεων δεδομένων
* Επίπεδες βάσεις δεδομένων αρχείων
* Εργαλεία σχετικά με το SQLite:
** SQLite Database Browser (multi-platform)
** SQLite Database Browser New (multi-platform)
** SQLite Manager
** SQLiteMan (multi-platform)
** SpatiaLite
** SQLiteStudio (multi-platform)
** SQLite Administrator (Windows only)
** SQLite Expert (Windows only)
** SQLite Professional (OS X only)
** Android SQLite Manager (Android only)
** kbmSQLiteMan (Windows only) Free (register to download) Simple to use, supports SQLite 3.8+
* Παρόμοιες μηχανές βάσεων δεδομένων:
** SQL Server Compact
** H2 (DBMS)
** Berkeley DB

## Αναφορές


## Παραπομπές

* 
* 
* 
* 

## Εξωτερικοί σύνδεσμοι

* 
* 
* 
*SQLite Tutorial

Κατηγορία:Βιβλιοθήκες C
Κατηγορία:Διαλειτουργικό λογισμικό
Κατηγορία:Ελεύθερο λογισμικό