SQLite özbaşına, daxil edilə bilən, əməliyyat, serversiz və sıfır konfiqurasiya SQL verilənlər bazası mühərriki həyata keçirən açıq mənbə, multiplatform, pulsuz və kiçik K kütüphanəsidir. Dünyanın ən çox istifadə edilən SQL məlumat bazası mühərriki.
Bir baxışda xüsusiyyətləri
Açar funksiyalar: təcrid olunmuş, atomlu, dayanıqlı və davamlı əməliyyatlara dəstək, SQL92 proqramı, verilənlər bazası faylları kompüterlər arasında sərbəst şəkildə bölüşdürülə bilər, 2 terabaytədək verilənlər bazasını dəstəkləyir, gigabyte ölçülü blob və strinqlərə dəstək verir, kiçik kod izi istifadə etmək üçün asan və çox sadə API (Application Programming Interface).
Bundan əlavə, SQLite ilkin konfiqurasiya və ya daha da tətbiq edilməsini tələb etmir, developers proqram fayl formatlarını istifadə etmək üçün mükəmməl, heç bir xarici əlaqəyə malik deyil, TCL (Tool Command Language) bağlamalarında və hərtərəfli sənədlərdə.
Bir çox başqa proqramlaşdırma dilləri üçün bindings ayrı-ayrılıqda mövcuddur. Onun mənbə kodu yaxşı şərh və SQLite veritabanlarının idarə olunması üçün istifadə olunacaq hesabdan tərtib edilmiş müstəqil bir CLI (Command-Line Interface) müştəri ilə gəlir.
Bunu nə üçün istifadə edə bilərəm?
SQLite verilənlər bazası mühərriki istənilən məqsəd üçün istifadə edilə bilər, fərdi və ya kommersiya. SQLite üçün nəzərdə tutulan istifadəçilər gadgetlar bazası, veb verilənlər bazası, müəssisə RDBMS (İlişkisel verilənlər bazası idarəetmə sistemi) və proqram fayl formatı üçün stand-in daxildir.
Başlıq altında və dəstəklənən OS'ler
SQLite dağılımı bir SQLite verilənlər bazasını idarə etmək üçün istifadə edilə bilən və SQLite kitabxanasının necə istifadə edilməsinə nümunə kimi istifadə edilə bilən müstəqil bir command-line giriş proqramı (sqlite) ilə gəlir. Tamamilə ANSI-C proqramlaşdırma dilində yazılmışdır.
Desteklenen masa üstü əməliyyat sistemləri arasında GNU / Linux, Mac OS X və Microsoft Windows daxildir. Dəstəklənən mobil əməliyyat sistemləri Android və iOS daxildir. Bu, həm də 32-bit və 64-bit hardware platformaları ilə uğurla sınaqdan keçirilmişdir və bu digər OS-lərə asanlıqla portativdir.
Bu sürümdə nə yeni : p>
- Bu sürümün əsas məqamları, xüsusilə ORDER BY LIMIT sorguları üçün PostgreSQL tərzi UPSERT və təkmilləşdirilmiş performansa dəstəkdir.
Sürümdeki yeni :
- F2FS fayl sistemindəki atom-yazma imkanlarından istifadə edin, olduqca azaldılmış əməliyyat həcmi üçün. Hal-hazırda, SQLITE_ENABLE_BATCH_ATOMIC_WRITE kompilyasiya müddəti seçimini tələb edir.
- ATTACH və DETACH əmrlərinə əməliyyatın içərisində işləməyə icazə verin.
- PRIMARY KEY tam olaraq bir sütun içərsə, ROWID virtual masalarına yazılabilir olmağa icazə verin.
- "fsync ()" & quot; başlıq WAL resetində yazıldıqdan sonra baş verir, indi keçid məntəqələri üçün sinxronizasiya parametrlərini istifadə edir. Bu, bir "fullfsync" istifadə edəcək deməkdir; PRAGMA checkpoint_fullfsync qurulduqda macs haqqında.
- Sqlite3_sourceid () funksiyası, mənbə kodunun versiya nəzarətində yoxlanıldıqdan və modifikasiya olunduqdan sonra dəyişdirildiklərini aşkar etməyə çalışır, versiya hashinin son dörd simvolu "alt1" kimi göstərilir. və ya "alt2". Məqsəd, təsadüfən və / və ya diqqətsiz düzəlişləri təsbit etməkdir. A forger bu xüsusiyyəti poza bilər.
- CREATE TABLE AS ifadələri üçün sütun adlarının sağ tərəfdə ümumi sorgu ilə düzəlişini yaxşılaşdırdı.
- Daha az "stat ()" unix VFS tərəfindən verilən sistem çağırışları.
- ESCAPE bəndində işləyən LIKE optimallaşdırmasını artırdı.
- Geliştirilmiş PRAGMA integrity_check və PRAGMA quick_check, əvvəllər itkin olduqlarını görməmiş bir sıra korrupsiyanı aşkar etmək üçün.
-
Həm də pragmati yeniləyin, belə ki, qeydlərdə korrupsiya ilə qarşılaşdıqda SQLITE_CORRUPT deyil, səhv mətnləri qaytarırlar. - Sorgu planlayıcısı indi FROM-bəndinin sub-sorgulamalarını, sorgu düzleştirici optimallaşdırmasını istifadə edərək, birgə rutinleri istifadə etməyi üstün edir. Subqueries üçün birgə rutinlərin istifadəsinə dəstək artıq əlil ola bilməz.
- Haqqında məlumatı keçin! =, IS, DEĞİL, NULL deyil və virtual masalar xBestIndex metoduna NULL məhdudiyyətlər verir.
- Son satırdakı xarakter eksik olduqda sonuncu giriş satırını qəbul etməsi üçün CSV virtual tablosunu genişləndirdi.
- Nadir hallarda istifadə edilən "sıfırdan" silin. yaddaş ayırıcı. SQLite'yi mümkün olduğunda böyük yaddaş ayırmalarının qarşısını almaq üçün bir ipucu verən SQLITE_CONFIG_SMALL_MALLOC konfiqurasiya qəbulu ilə dəyişdirin.
- Mövcud birliyin virtual sətir uzadılmasına vergül virtual tablosunu əlavə etdi.
- Verilənlər bazasının səhifələrinə birbaşa daxil olmaq üçün sqlite_dbpage virtual masa əlavə edildi. Mənbə kodu birləşməyə daxil edilir və -DSQLITE_ENABLE_DBPAGE_VTAB kompilyasiya müddəti variantını istifadə edərək aktivləşdirilir.
- fts5vocab virtual cədvəlinin yeni bir növü əlavə edin - "nümunə" & quot; - FTS5 tam mətn indeksinə mümkün olan ən aşağı səviyyədə birbaşa çıxış təmin edir.
- Windows VFS-də rand_s () bir çağırışı Firefox'ta bəzi older dizüstü bilgisayarlarda problem yaratdığından çıxarın.
- Komut satırı kabuğuna src / shell.c mənbə kodu artıq versiya nəzarətində deyil. Bu fayl hazırda quruluş prosesinin bir hissəsi kimi yaranır.
- Müxtəlif mikrooptizasiyalar CPU istifadəini təxminən 2,1% azaldır.
- Hata düzeltmelerini:
- OSSFuzz tərəfindən aşkar edilmiş səhv bir assert () bəyanatını düzəldin. Bilet cb91bf4290c211d
- Sqlite3_result_pointer () 'da bir qaranlıq yaddaş sızıntısını düzeltin. Bilet 7486aa54b968e9b
- Sorgu planlayıcısı çalışmayı bitirdikten sonra şemanın sıfırlanmasını önleyerek olası bir kullanımdan sonra pulsuz bir hatadan kaçının. Bilet be436a7f4587ce5
- Yalnızca COLLATE doğruysa ORDER BY və ya GROUP BY-ni optimallaşdırmaq üçün yalnız endeks-ifadələrdən istifadə edin. Bilet e20dd54ab0e4383
- Endeksin ifadelerindeki ifade həqiqətən sabit olduğunda gələn bir iddia hatasını düzeltin. Bilet aa98619ad08ddca
- PRAGMA reverse_unordered_selects sonra baş verə biləcək bir təsdiqləmə səhvini düzəldin. Bilet cb91bf4290c211d
- Bir IN və ya EXISTS alt sorgusunda tablo dəyərli funksiyaları istifadə edən sorgular üçün baş verə biləcək bir segfault düzeltin. Bilet b899b6042f97f5
- Müəyyən bir dəhşətli ümumi masa ifadəsi tərtib edərkən potensial bir tam daşqın problemini düzəldin. Bu, OSSFuzz tərəfindən aşkar edilmiş bir problemdir. Check-in 6ee8cb6ae5.
- Google Project Zero Natalie Silvanoviç tərəfindən aşkarlanan bir problem, bozuk bir verilənlər bazası faylını sorgularken potensial dışarıdan okunduğunda oxuyun. Check-in 04925dee41a21f.
Sürüm 3.20.1-də yeni nə :
- Sürüm 3.20.1 patch azad nadir bir yaddaş sızıntısını düzəldmək üçün sqlite3_result_pointer () interfeysində iki satırlıq kodu dəyişir.
Sürüm 3.9.2'de yeni :
- SQLite versiyası 3.9.2 iki qaranlıq hataları təsbit edən bir yamaq versiyasıdır.
Yeniliklər versiyası 3.8.9:
- Bu sürümdeki yeni funksiyalar PRAGMA index_xinfo əmrini, sqlite3_status64 () interfeysini və command-line kabuğunun ".dbinfo" komutunu ehtiva edir.
Sürüm 3.8.8.2'de yeni :
- 3.8.8.2 patch azad bir kiçik problemi düzəldir: Sqlite3_wal_checkpoint (TRUNCATE) əməliyyatının həmişə yenidən sıfırlanıb və yeni bir məzmun içermese belə, yazma qabaqcıl jurnalını həmişə kəsəcək. Bu bir səhv düzeltme və ya yeni bir xüsusiyyətdir
- Bu kimi bir şey adətən növbəti mütəmadi olaraq planlaşdırılan sərbəstliyə daxil olacaq, lakin görkəmli bir SQLite istifadəçisinin tələsik dəyişikliyə ehtiyacı var idi, belə ki, biz bu yamaqdan istifadə etməkdən xoş gəldiniz.
- Sqlite3_wal_checkpoint (TRUNCATE) 'nin inkişaf etmiş davranışına ehtiyacı olmadığı halda yükseltme üçün heç bir səbəb yoxdur.
Yeni nə versiyası 3.8.8.1:
- Sifariş məntiqində bir səhv düzəldin, 3.8.4-cü ildən bəri təqdim olundu ki, bu, ORDER BY bəndini ehtiva edən sorgularda yanlış sırada görünməyə səbəb ola bilən, bir LIMIT bənddə və təxminən 60 və ya daha çox sütuna malikdir nəticə yığdı. Bilet f97c4637102a3ae72b79.
- SQLITE_SOURCE_ID: "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55"
- Sqlite3.c üçün SHA1: 33987fb50dcc09f1429a653d6b47672f5a96f19e
Yeni nə versiyası 3.8.8:
- Yeni Xüsusiyyətlər:
- Bir verilənlər bazası faylının başqa bir əməliyyatla dəyişdirildiyini müəyyən etmək üçün istifadə edilə bilən PRAGMA data_version əmrinə əlavə edilib.
- SQLITE_CHECKPOINT_TRUNCATE seçimini sqlite3_wal_checkpoint_v2 () interfeyinə əlavə etdi, PRAGMA wal_checkpoint üçün müvafiq təkmilləşdirmələr.
- SQLITE_ENABLE_STMT_SCANSTATUS ilə tərtib edildikdə mövcud sqlite3_stmt_scanstatus () interfeysinə əlavə edildi.
- Sqlite3_table_column_metadata (), ROWID masaları olmadan düzgün işləmək və sütun adı parametresinin NULL olması durumunda bir tablo varlığını kontrol etmek üçün geliştirilmiştir. İndi interfeys SQLITE_ENABLE_COLUMN_METADATA kompilyasiya zamanı seçimi tələb etmədən quruluşa da daxil edilir.
- SQLITE_ENABLE_API_ARMOR kompilyasiya müddəti seçiminə əlavə edilib.
- SQLITE_REVERSE_UNORDERED_SELECTS kompilyasiya zamanı seçimi əlavə edildi.
- SQLITE_SORTER_PMASZ kompilyasiya vaxtı və SQLITE_CONFIG_PMASZ start-time seçimi əlavə edildi.
- SQLITE_CONFIG_PCACHE_HDRSZ variantını sqlite3_config () tətbiqinə əlavə etmək üçün ərizə üçün SQLITE_CONFIG_PAGECACHE ilə istifadə üçün müvafiq yaddaş məbləğini müəyyən etməyə imkan verir.
- VALUES bənddə satırların sayı artıq SQLITE_LIMIT_COMPOUND_SELECT ilə məhdudlaşmır.
- SQL-də recursively qiymətləndirən eval () SQL funksiyasını həyata keçirən eval.c yüklənə bilən uzantısına əlavə edilib.
- Performansın Təkmilləşdirilməsi:
- B-ağacının balanslaşdırılmasında iştirak edən memcpy () əməliyyatlarının sayını, ümumi performansın 3,2% artırılması üçün azaldın.
- skip-scan optimallaşdırılması üçün xərc sxemlərinin təkmilləşdirilməsi.
- Avtomatik indeksləşdirmə optimallaşdırması, əgər müvafiq olarsa qismən bir indeks yarada bilir.
- Hata düzeltmelerini:
- Gündəlik faylını kəsdikdən sonra fsync ()-ə zəng edərək "PRAGMA journal_mode = TRUNCATE" ilə güc itkisindən sonra dayanıqlığı təmin edin.
- Sorgu planlayıcısı indi Sütun JOIN'in sağ masanındakı hər hansı bir sütunun NULL olacağını tanıyır, hətta bu sütunda bir NULL məhdudiyyət yoxdur. Bu hallarda NULL testlərini optimallaşdırmağa çalışın. 6f2222d550f5b0ee7ed biletini düzeltin.
- DISTINCT operatoru azalan indekslə tətbiq olunsa da ORDER BY artaraq sıralar qoyur. Bilet c5ea805691bfc4204b1cb9e üçün düzelt.
- İş parçacığının bəzi hissələrinin açıldığı və bağlanıldığı paylaşılan önbellek rejimində bir çox mövzu ilə işləyərkən stress altında baş verə biləcək məlumat yarışlarını düzəldin.
- Amerikalı qeyri-səlis lop tərəfindən aşkar olan qaranlıqda olan qəzaların düzəldilməsi. Bilet a59ae93ee990a55.
- R-Tree uzadının -O3 ilə tərtib edildikdə yanlış nəticələr hesablamasına səbəb olan bir GCC optimizer səhvinin (MacOS 10.7-də gcc 4.2.1 üçün) işləməsi.
- Digər dəyişikliklər:
- DHAVE_STRCHRNULL kompilyasiya müddəti variantını istifadə edərək, xüsusilə effektiv olmadıqda, strchrnul () C-kitabxana rutininin istifadəsini dayandırın.
- ehtimal (), ehtimal () və ehtimalı () SQL işarəsi funksiyalarının effektivliyinə və dəqiqliyinə düzəlişlər.
- SQLITE_SOURCE_ID: "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
- Sqlite3.c üçün SHA1: 91aea4cc722371d58aae3d22e94d2a4165276905
Sürüm 3.8.7.4'de yeni :
- Bu azad düzəldilməsi 3.8.7.3 yamasının dəyişməsi ilə tələb olunan mutasiyaya əlavə olunur, ancaq təsadüfən silinir. Mutex, daxili SQLite testlərindən heç birinin tələbi olmadı, lakin Firefox olmadan qəzaya uğradı. Mutex'in tekrar kaçırılmaması üçün test durumları eklendi.
Yeniliklər versiyası 3.8.7.3:
- Bug fix: Paylaşılan önbellek rejimində işləyərkən önbellekteki KeyInfo obyektlərinin (tətbiqi görünməyən bir daxili abstraksiya) köhnəlməməsi və eyni verilən paylaşılan önbellekteki digər verilənlər bazası bağlantılarını tərk edərkən tez-tez verilənlər bazası əlaqələrinin bağlanması və yenidən açılmasından əmin olun davamlı olaraq. Bilet e4a18565a36884b00edf.
- Bug fix: Sütunun bir NULL məhdudiyyəti olsa belə bir LEFT JOIN'in sağ masanındakı hər hansı bir sütun NULL ola bilər. Sütunun heç bir zaman NULL olmadığı optimallaşdırma tətbiq etməyin. Bilet 6f2222d550f5b0ee7ed.
- SQLITE_SOURCE_ID: "2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86"
- Sqlite3.c üçün SHA1: 3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
Sürüm 3.8.7.2'de yeni :
- Bu sürümün əsas səbəbi ROLLBACK əmrini artırmaqdır, belə ki ROLLBACK şemasını dəyişdirməyincə, işə davam etmək üçün eyni verilənlər bazası bağlantısında sorgulara imkan verir. SQLite'nin əvvəlki bütün sürümlerinde, ROLLBACK, bekleyen sorguları hemen durdurur ve SQLITE_ABORT və ya SQLITE_ABORT_ROLLBACK döndürür. ROLLBACK verilənlər bazası sxemini dəyişdirsə, lakin bu patch azad edildikdə, sxemlər dəyişilməzsə, sorgulara davam etməyə icazə verilir. SORUNLAR hələ də dayandırılır.
- ROLLBACK genişləndirilməsinə əlavə olaraq, bu yamaq salıcı da üç qaranlıq böcəyin düzəldilməsini ehtiva edir.
versiyası 3.8.7.1: yeni nədir
- Bu hata düzeltme sürümünün əsas səbəbi, ALTER TABLE ADD COLUMN istifadə edərək əlavə edilmiş bir masanın sonunda sahələrin dəyərinin yenilənməsi ilə bağlı bir problemi həll etməkdir. Bu problem ilk dəfə 3.8.7 versiyasında çıxdı.
- 3.8.7-də buraxılan digər kiçik bir çətinlik, Android quruluşunun standart C kitabxanasından strchrnul () funksiyasını istifadə etməyə çalışdığına baxmayaraq, bu funksiya Android-də mövcud deyil. Android qurur problemi həll etmək üçün -DHAVE_STRCHRNUL = 0 əlavə etmək məcburiyyətində qaldı. Bu patch Android düzəltmələri indi heç bir dəyişiklik etmədən işləməlidir ki, düzəldir.
- PRAGMA journal_mode = TRUNCATE əməliyyat PRAGMA synchronous = FULL zaman journal faylını kəsdikdən sonra fsync () çağırır.
- Son olaraq, VIEW'larda UPDATE və DELETE run ilə əlaqəli bir neçə uzun və qaranlıq problemlər müəyyən edildi.
Sürüm 3.8.7-də yeni nə :
- Bir əvvəlki sürümdeki dəyişikliklərin əksəriyyəti, SQLite-yə bir az daha sürətlə kömək etmək üçün nəzərdə tutulmuş mikro-optimizasiya olmuşdur. Hər fərdi optimallaşdırma qeyri-qənaətbəxşdir ki, kiçik bir performans təsirinə malikdir. Amma təkmilləşdirmələr artır. Linux-da cachegrind istifadə edərək, gcc 4.8.1 və-x64 linux ilə tərtib edilmiş yaxşı hazırlanmış bir iş yükünün ölçülməsi (SQLite developers tipik bir proqram iş yükü üçün proxy kimi istifadə olunur) ölçülürsə, hazırkı buraxılış 20% -dən çoxdur əvvəlki sərbəstliklə müqayisədə eyni sayda CPU dövrü. Cachegrind real CPU deyil və ölçmə üçün istifadə edilən iş yükü yalnız bir proxydir. Buna görə performansınız dəyişə bilər. Real-dünya proqramlarında təxminən yarım ölçülü və təkmilləşdirilmiş hesabatların görülməsini gözləyirik. 10% -i 20% -dən azdır, amma hələ də olduqca yaxşıdır.
- Bu sürüm imzalanmış 32-bit uzunluğunun parametrləri əvəzinə imzalanmamış 64-bit olan yeni C-dil interfeyslərini ehtiva edir. Yeni API'lər yeni imkanlar təqdim etmir. Lakin, tam daşqın zəifliklərinə daha davamlı olan tətbiqləri yazmağı asanlaşdırırlar.
- Bu sürüm ayrıca böyük sıralama əməliyyatlarına kömək etmək üçün birdən çox mövzuları istifadə edə bilən yeni bir sıralayıcı da daxildir. (Sifariş əməliyyatları bəzən ORDER BY və / və ya GROUP BY maddələrini tətbiq etmək üçün tələb olunur və demək olar ki, həmişə CREATE INDEX üçün tələb olunur.) Çox iş parçalanma sıralayıcı default olaraq söndürülür və PRAGMA mövzu SQL komutunu istifadə edərək effektiv olmalıdır. Çox yivli sıralayıcı böyük növlər üçün daha sürətli real-time performans təmin edir, lakin daha çox CPU dövründən və daha çox enerji istifadə edir unutmayın.
Sürüm 3.8.3.1'de yeni :
- SQLite versiyası 3.8.3.1, sorguların doğrulanmış satırları atmamasına səbəb ola biləcək 3.8.1, 3.8.2 və 3.8.3 versiyalarında mövcud səhvləri düzəldir. Bu sürümlerden yüksəlmə tövsiyə olunur.
- SQLite, SQLITE_ENABLE_STAT3 və ya SQLITE_ENABLE_STAT4 kompilyasiya variantları ilə tərtib edildikdə problem yaranır. Bu halda, bir sorğu aşağıdakı ifadələri olan WHERE bəndində varsa:
- WHERE (EXPRESS OR EXPRESS OR OR ... OR exprN) və sütun IS NOT NULL
- Bütün expr1 vasitəsilə exprN vasitəsilə göstəricilərin istifadəsi üçün uyğun olduqda, SQLite sorgu planlaması zamanı səhvən "sütun IS NOT NULL" termini "sütun> NULL" -ə çevirə bilər. Lakin sonuncu müddət heç vaxt doğru deyildir və sorgu heç bir satır qaytarmayacaqdır.
Yeniliklər versiyası 3.8.3:
- Ortaq masa ifadələri və İL fəsli üçün əlavə dəstək.
- printf () SQL funksiyasına əlavə edilib.
- SQLITE_DETERMINISTIC, sqlite3_create_function () və əlaqəli interfeyslərin 4-cü ardıcıllığında isteğe bağlı bir bit olaraq əlavə olunur və tətbiqləri daimi dəlilləri olduğunda daxili döngələrdən fərqlənə biləcək yeni funksiyalar yaratmaq imkanı verir.
- SQLITE_READONLY_DBMOVED bir əməliyyatın əvvəlində qaytarılmış SQLITE_READONLY_DBMOVED kodu əlavə edərək, əsas verilənlər bazası faylının adı dəyişdirildiyini və ya SQLite altında köçürüldüyünü göstərmək üçün.
- ATTACH fayl adı argümanında funksiya çağırışları və alt sorguları da daxil olmaqla zahiri ifadələrə icazə verin.
- SELECT deyiminin etibarlı olduğu hər yerdə istifadə edilən VALUES bəndinə icazə verin.
- N == 0 ilə çağırıldığında sqlite3_randomness (N, P) tərəfindən istifadə olunan PRNG'yi işə salın. 'da çatal ()' dan sonra avtomatik olaraq yenidən yazılmışdır
- Spellfix1 virtual tablosunu, rowid ilə effektiv şəkildə axtarış edə bilmək üçün artırın.
- Performansın təkmilləşdirilməsi.
- EXPLAIN işləyərkən VDBE bayt kodunda göstərilən şərhlərə düzəlişlər.
- LEMON parser generatoruna "% token_class" direktivini əlavə edin və qrammatikanı asanlaşdırmaq üçün istifadə edin.
- OpenBSD-nin təhlükəli hesab etdiyi C-kitabxana funksiyalarını çağırmamaq üçün LEMON kodunu dəyişdirin. (Ex: sprintf).
- Hata düzeltme: Komut satırı kabuğunun CSV idxal xüsusiyyətində, bir CRLN xəttinin sonunda qaçmış cüt tirajın meydana gəldiyi bir sahəni bitirməyin.
- SQLITE_SOURCE_ID: "2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538"
- Sqlite3.c üçün SHA1: 98a07da78f71b0275e8d9c510486877adc31dbee
Şərhlər tapılmadı