SQLite hafife alınmış bir veritabanıdır, ancak bazı insanlar bunun üretim ortamları için uygun olmayan bir oyuncak veritabanı olduğunu düşünür. Aslında SQLite çok güvenilir bir veritabanıdır, terabaytlarca veriyi işleyebilir, ancak ağ katmanı yoktur. Ardından, bu makale sizinle SQLite'ın geçen yılki en son SQL özelliklerini tartışacak.
Yazar | Markus Winand
Tercüman | Peter
Editör | Tu Min
Üretildi | CSDN (ID: CSDNNews)
SQLite "sadece" bir kitaplıktır, geleneksel anlamda bir sunucu değildir. Bu nedenle, bazı durumlarda gerçekten uygunsuzdur. Bununla birlikte, diğer pek çok durumda en uygun seçimdir. SQLite, en yaygın kullanılan ve kullanılan veritabanı motoru olarak bilinir. Bunun çok mümkün olduğunu düşünüyorum çünkü SQLite'ın telif hakkı kısıtlaması yok. Geliştiriciler, yapılandırılmış verileri dosyalarda depolamak için SQL kullanmak istediklerinde, tercih edilen çözüm SQLite olmalıdır.
SQLite'ın SQL lehçesi de çok güçlüdür. MySQL'den dört yıl önce with ifadesini destekler. Son zamanlarda, MySQL'in sadece beş ay gerisinde olan pencere işlevleri için destek de uyguladı.
Daha sonra, bu makale SQLite tarafından 2018'de eklenen yeni SQL özelliklerini, yani SQLite tarafından 3.22.0'dan 3.26.0'a eklenen yeni SQL özelliklerini tanıtacaktır.
Spesifik içerik şunları içerir:
Boole değişkenleri ve yargıları
SQLite "yanlış" boole değerlerini destekler: Boolean'ı türün adı olarak kabul eder, ancak onu bir tamsayı olarak ele alır (bu MySQL'e çok benzer). Doğru ve yanlış değerleri sırasıyla 1 ve 0 değerleri ile temsil edilir (bu C diliyle aynıdır).
3.23.0 sürümünden başlayarak, SQLite doğru ve yanlış anahtar kelimelerini temsil etmek için 1 ve 0 sayılarını kullanır ve is true | false yargılama ifadesini destekler. Artık bilinmeyen anahtar kelimesini desteklemiyor. Bilinmeyen ve null aynı Boolean değerine sahip olduğundan geliştiriciler bunun yerine null kullanabilir.
INSERT ve UPDATE ifadelerinde, true ve false, değerlerin ve küme cümlelerinin okunabilirliğini büyük ölçüde artırabilir.
Yargı ifadesi true | false çok kullanışlıdır. Karşılaştırma işleminden farklı bir anlamı vardır:
Hadi karşılaştıralım
NEREDE c < > YANLIŞile
C NEREDE YANLIŞ DEĞİLYukarıdaki örnekte, c null ise, c < > Yanlışın sonucu bilinmiyor.
Bunun nedeni, WHERE yan tümcesinin yalnızca sonucu doğru olan değerleri kabul etmesi ve sonucu yanlış veya bilinmeyen değerleri filtrelemesidir. Bu şekilde ilgili satırı sonuçtan kaldıracaktır.
Buna bağlı olarak, c null ise, c'nin yargı sonucu yanlış değildir. Bu nedenle, ikinci WHERE yan tümcesi c'nin boş olduğu satırları da içerecektir.
Aynı etkiyi elde etmek için kullanabileceğiniz başka bir yöntem, boş değerleri işleyen ayrı bir yan tümce eklemektir. Bu ifadeyi kullanmaktır:
NEREDE c < > YANLIŞ VEYA c BOŞBu formun ifadeleri daha uzundur ve bazı gereksiz ifadelere sahiptir (c iki kez kullanılır). Uzun lafın kısası, bunu veya ... is-null ifadesini değiştirmek için is not false kullanabilirsiniz. Daha fazla ayrıntı için lütfen "Üç Değerli Sonuçlara Dayalı İkili Kararlar" bölümüne bakın.
SQLite'deki Boolean değişmez değerleri ve Boolean yargılamaları için destek artık diğer açık kaynak veritabanlarına yakındır.Tek fark, SQLite'ın desteklememesidir (bunun yerine kullanabilirsiniz null). İlginç bir şekilde, bu özellikler aşağıda belirtilen ticari ürünlerde henüz mevcut değil.
0: Yalnızca doğru, yanlışı destekler. Bilinmiyor desteklenmez. Gerekirse bunun yerine null kullanın
1: Desteklemiyor bilinmiyor, gerekirse bunun yerine kullanım boş
Pencere işlevi
SQLite 3.25.0, pencere işlevlerini tanıttı. Pencere işlevini biliyorsanız, bunun önemli olduğunu da biliyorsunuzdur. Pencere işlevini anlamıyorsanız, lütfen nasıl kullanacağınızı kendiniz öğrenin. Bu makale pencere işlevini ayrıntılı olarak açıklamayacak, ancak lütfen inanın: en önemli "modern" SQL özelliğidir.
SQLite'nin over cümlesine desteği, diğer veritabanlarına çok yakındır. Dikkate değer tek sınırlama, aralık ifadesinin sayıları veya ayırma mesafelerini desteklememesidir (yalnızca geçerli satır ve sınırsız önce | aşağıdakiler desteklenir). SQLite 3.25.0 yayımlandığında, SQL Server ve PostgreSQL aynı sınırlamalara sahipti. PostgreSQL 11 bu sınırlamayı ortadan kaldırır.
0: değişiklik yok
1: Aralık tanımı tarih saat türünü desteklemiyor
2: Aralık kabul edilmedi < mesafe > Anahtar kelimeler (yalnızca sınırsız ve mevcut satırı destekler)
SQLite'ın pencere işlevleri desteği sektöre öncülük ediyor. Desteklemediği işlevler, diğer bazı önemli ürünlerde de desteklenmez (farklı, genişlik_buçeti, saygı | boş değerleri yoksay ve toplama ifadesindeki ilk | son ifadeden).
0: ORDER BY ifadesi de yok
1: Negatif ofsete izin verilmiyor, boş değerlerin özel olarak işlenmesi: potansiyel müşteri ( < ifade > , 'IGNORE NULLS'), burada dize parametresi
2: Varsayılan değer yok (üçüncü parametre), saygı | nulls yoksay ifadesi desteklenmiyor
3: Negatif uzaklığa izin verilmiyor, nulls deyimini yok sayma desteklenmiyor
4: Negatif ofsete izin verilmiyor
5: Saygıyı desteklemiyor | nulls ifadesini yok say
6: Negatif uzaklığa izin verilmiyor, saygı | nulls deyimini göz ardı et desteklenmiyor
7: Boş değerlerin özel olarak işlenmesi: ilk_değer ( < ifade > , 1, null, 'IGNORE NULLS'), burada dize parametreleri.
8: Ignore nulls ifadesi desteklenmiyor
9: ignore nulls ifadesi ve son ifadeden desteklenmiyor
Filtre ifadesi
Filtre ifadesi yalnızca sözdizimsel şeker olsa da - aynı sonucu elde etmek için ifadeleri kolayca kullanabilirsiniz - bence bu aynı zamanda gerekli sözdizimsel şekerdir çünkü insanların SQL ifadelerini öğrenmesini ve anlamasını kolaylaştırır.
Aşağıdaki seçme maddesine bir göz atın: Sizce hangisinin anlaşılması daha kolay?
TOPLA (gelir) toplam_başvuru seçin , TOPLA (DURUMDA ürün = 1 SONRA gelir SON ) prod1_revenue ...ile
TOPLA (gelir) toplam_başvuru seçin , TOPLA (gelir) FİLTRE (NEREDE ürün = 1) prod1_revenue ...Bu örnek, filtre cümlesinin işlevini çok iyi özetler: toplama işlevinin son ekidir ve karşılık gelen satırlar, toplamadan önce belirli koşullara göre filtrelenebilir. Pivot teknolojisi, filtre maddeleri için en yaygın kullanım durumudur. Bu, Varlık Öznitelik Değeri (EAV) modelindeki özniteliklerin tablo sütunlarına dönüştürülmesini içerir. Daha fazla bilgi edinmek isterseniz, "filtre-Seçici Toplamalar" (https://modern-sql.com/feature/filter) bağlantısına başvurabilirsiniz. ).
SQLite'ın 3.25.0 sürümünden başlayarak, filtre yan tümcesi, over yan tümcesini kullanan toplama işlevlerinde desteklenmektedir, ancak henüz group by cümlesi kullanan toplama işlevlerinde desteklenmemektedir. Ne yazık ki, bu, yukarıdaki durumları işlemek için SQLite'da hala filtre deyimlerini kullanamayacağınız anlamına gelir. Durum ifadelerini daha önce olduğu gibi kullanmalısınız. Umarım SQLite bunu mümkün olan en kısa sürede yapabilir.
Çakışma durumunda ... ekle ("Yükselt")
SQLite, 3.24.0 sürümünden başlayarak "upert" kavramını tanıttı: birincil anahtarlar ve benzersiz kısıtlamalar arasındaki çakışmaları incelikle ele alabilen bir insert deyimidir. Bu çakışmaları yok saymayı (on çatışma ifadesinde hiçbir şey yapmayın) veya mevcut satırı güncellemeyi (on çatışma bildiriminde güncelleme işlemini yürütmeyi) seçebilirsiniz.
Bu benzersiz bir SQL uzantısıdır, yani standart SQL'in bir parçası değildir, bu nedenle aşağıdaki matriste gri olarak gösterilmiştir. Ancak SQLite, bu işlevi gerçekleştirmek için PostgreSQL ile aynı sözdizimine uygundur. Standart, birleştirme ifadesi için destek sağlar.
PostgreSQL'den farklı olarak, SQLite aşağıdaki ifadelerde sorunlara sahiptir.
INSERT INTO hedefi SEÇ * Kaynaktan ÇATIŞMA ÜZERİNE (kimlik) GÜNCELLEME AYARINI YAP val = hariç tutuldu.valBelgelere göre, bunun nedeni, ayrıştırıcının ON anahtar sözcüğünün SELECT deyiminin bağlantı kısıtlaması mı yoksa upert yan tümcesinin başlangıcı mı olduğunu belirleyememesidir. Doğru olduğu gibi, sorguya yan tümceler ekleyerek çözebilirsiniz.
INSERT INTO hedefi SEÇ * Kaynaktan NEREDE doğru ÇATIŞMA ÜZERİNE (kimlik) GÜNCELLEME AYARINI YAP val = hariç tutuldu.val0: ayrıca ekleme, güncelleme, silme ve birleştirme işlemlerinin hata bilgilerini de kaydedin ("DML hata günlüğü")
1: Çakışma durumunda, sorgunun from ifadesinin yanında olamaz, gerekirse ayırmak için where true ifadesi ekleyebilirsiniz.
Sütunu yeniden adlandır
SQLite tarafından sunulan bir diğer benzersiz özellik, temel veritabanı tablosundaki 1. sütunu yeniden adlandırmaktır. Standart SQL bu tür işlevleri desteklemez 2.
SQLite, sütunları yeniden adlandırmak için diğer ürünler tarafından yaygın olarak kullanılan sözdizimini izler:
TABLO DEĞİŞTİR SÜTUNU YENİDEN ADLANDIR ŞUNA:
0: Lütfen sp_rename'e bakın.
Diğer Haberler
2018'de SQL gramerindeki değişikliklere ek olarak SQLite, bazı uygulama programlama arayüzlerini (API'ler) de değiştirdi. Daha detaylı haberler için sqlite.com (https://www.sqlite.org/news.html) adresindeki haberler bölümüne bakabilirsiniz.
Ayak izi:
Orijinal: https://modern-sql.com/blog/2019-01/sqlite-in-2018
Yazar hakkında: Markus Winand, verimli SQL eğitimi sağlar. "SQL Performance Explained" adlı kitabı geliştiriciler için standart bir okuma haline geldi.
Bu makale bir CSDN çevirisidir. Yeniden yazdırmanız gerekirse, lütfen kaynağı belirtin.