Neden SQLite veritabanı kullanmalı?

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şmez değerleri ve yargılar
  • Pencere işlevi
  • Filtreleme maddesi
  • Çakışma durumunda ... ekle ("Yükselt")
  • Sütunu yeniden adlandır
  • Modern-SQL.com'da Sonraki
  • 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ĞİL

    Yukarı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.val

    Belgelere 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.val

    0: 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:

    • 0: SQLite genellikle PostgreSQL sözdizimini izler, Richard Hipp buna PostgreSQL'in yapacağı şey (WWPD) adını verdi.
    • 1: Karşılaştırmalı veritabanı tablosu, Create table ifadesiyle oluşturulan veritabanı tablosunu ifade eder. Türetilmiş veritabanı tablosundaki sütun adları (Select deyimiyle döndürülen sorgu sonuç kümesi gibi), SELECT deyimi, FROM deyimi veya WITH deyimi aracılığıyla değiştirilebilir.
    • 2: Bildiğim kadarıyla, bu özelliği güncellenebilir görünümler veya türetilmiş sütunlar aracılığıyla simüle etmek mümkün olabilir.

    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.

    C dili: Bahar Şenliği için eve gittiğimde kimseyi getirmeyen tek kişi benim!
    önceki
    Tiguan L PHEV'den bahsederken, işletme sahibi içini çekti: Yeni enerji konusunda iyimser değildim ve yenildim.
    Sonraki
    Uygulama ile karşılaştırıldığında, Web geliştirme yeni başlayanlar için daha uygun mu?
    Özel meydan okuma, bireysel meydan okuma. Yepyeni Mai Rui Bao XL'ye karşı 3 seri / C seviyesi (aşağıda)
    Singleton Modu Hakkında İlginç Bir Şekilde Konuşmak - Monitörü Seçmek
    Av tüfeği değiştirildi, BYD F0 taç yolun yerini aldı, sahibi: Kendimi çok iyi hissediyorum
    JQuery'ye veda edin! Bootstrap 5 bağımlılığını kaldıracak
    Chifeng 1 Nolu Ortaokul "Hang Moğol Ulusal Bayrağı ve Ulusal Amblemi"? Resmi cevap
    2017'de satın almaya değer en iyi 10 tam ekran telefon. Hangisi sizin?
    Brilliance RV Mengma serisi 398,000-42,8 milyon yuan'a satıldı, 4 koltuk / 6 koltuk versiyonu piyasaya sürüldü
    Lakeside Üniversitesi dördüncü okul sezonunu memnuniyetle karşılıyor, yeni öğrencilerin% 80'i 40 yaşın altındaki girişimciler
    Shenzhen'deki bir AI şirketinin yüz verileri sızdırıldı ve 2,56 milyondan fazla kullanıcının hassas bilgileri "çıplaktı"!
    Qingdao Publishing Art Museum'da açılan "Fade in and fade out-Yu Yao'nun resimleri" sergisi
    Huawei, Xiaomi, Apple Kaygısı
    To Top