ZekDesk - AdımAdımYap — Bilgisayar
Bu BilgisayarWeb ve GeliştirmeVeritabanı Nedir? SQLite ile Sıfırdan B…
Veritabani_Nedir_SQLite_ile_Sifirdan_Baslangic_Rehberi.txt

Veritabanı Nedir? SQLite ile Sıfırdan Başlangıç Rehberi

Veritabanı Nedir? SQLite ile Sıfırdan Başlangıç Rehberi

Veritabanı, verilerin düzenli tablolar hâlinde saklandığı ve istediğiniz kayda saniyeler içinde ulaşmanızı sağlayan yapıdır; öğrenmeye başlamak için ise en kolay seçenek SQLite'tır. Çünkü SQLite sunucu kurulumu istemez, ayrı bir servis çalıştırmaz ve tüm veritabanını tek bir dosyada tutar. Kurulum derdiyle uğraşmadan doğrudan konuya girebilirsiniz.

Neden metin dosyası yerine veritabanı?

Küçük bir projede verileri bir metin dosyasında tutmak mümkündür. Ancak veri büyüdükçe üç sorun ortaya çıkar:

  • Arama yavaşlar. Belirli bir kaydı bulmak için tüm dosyayı okumanız gerekir.
  • Eş zamanlı erişim bozulur. İki kişi aynı anda yazdığında dosya bozulabilir.
  • Tutarlılık kaybolur. Aynı bilginin farklı yerlerde farklı yazımları oluşur.

Veritabanı bu üç sorunu indeks, kilit yönetimi ve şema kuralları ile çözer.

SQLite ne zaman doğru seçim, ne zaman değil?

Doğru seçim olduğu yerler: Masaüstü uygulamaları, mobil uygulamalar, tek sunucuda çalışan orta ölçekli web siteleri, iç araçlar, prototipler, gömülü sistemler ve öğrenme aşaması.

Sınırlarına yaklaştığınız yerler: Aynı anda çok sayıda yazma işlemi yapan yüksek trafikli sistemler ve birden fazla sunucudan paylaşımlı erişim gerektiren mimariler. Bu noktada MySQL veya PostgreSQL tarafına bakmak gerekir.

Yaygın bir yanlış anlama şudur: SQLite oyuncak bir veritabanı değildir. Dünyada en çok dağıtılmış veritabanı motorlarından biridir ve doğru senaryoda üretimde rahatlıkla kullanılır.

Temel kavramlar

  • Tablo: Aynı türdeki kayıtların tutulduğu yapı. Örneğin kullanicilar tablosu.
  • Sütun: Kaydın bir özelliği. Örneğin ad, eposta, kayit_tarihi.
  • Satır: Tek bir kaydın kendisi.
  • Birincil anahtar: Her satırı benzersiz kılan sütun. Genellikle id.
  • Yabancı anahtar: Bir tablodaki kaydın başka bir tablodaki kayda bağlanmasını sağlayan sütun.
  • İndeks: Aramayı hızlandıran yardımcı yapı. Kitabın dizini gibi düşünün.

İlk tablonuzu oluşturma

SQLite ile çalışmaya başlamak için komut satırı aracını ya da DB Browser for SQLite gibi görsel bir arayüzü kullanabilirsiniz. Yeni başlayanlar için görsel araç daha rahattır. Tablo oluşturma komutu şu yapıdadır:

CREATE TABLE urunler ( id INTEGER PRIMARY KEY AUTOINCREMENT, ad TEXT NOT NULL, fiyat REAL NOT NULL, stok INTEGER DEFAULT 0, olusturma_tarihi TEXT DEFAULT CURRENT_TIMESTAMP );

Burada dikkat edilecek noktalar şunlar: INTEGER PRIMARY KEY tanımı satırı benzersiz yapar, NOT NULL o alanın boş bırakılamayacağını belirtir, DEFAULT ise değer verilmediğinde kullanılacak varsayılanı tanımlar.

Dört temel sorgu

SQL öğrenmenin yüzde sekseni bu dört komutta biter:

  1. Kayıt ekleme: INSERT INTO urunler (ad, fiyat, stok) VALUES ('Klavye', 450.00, 12);
  2. Kayıt okuma: SELECT id, ad, fiyat FROM urunler WHERE stok = 0 ORDER BY ad ASC;
  3. Kayıt güncelleme: UPDATE urunler SET stok = 20 WHERE id = 1;
  4. Kayıt silme: DELETE FROM urunler WHERE id = 1;

Kritik uyarı: UPDATE ve DELETE komutlarını WHERE koşulu olmadan çalıştırırsanız tablodaki tüm satırlar etkilenir. Yeni başlayanların en pahalı hatası budur.

Tabloları birbirine bağlama

Gerçek projelerde veriyi tek tabloya sıkıştırmazsınız. Örneğin siparişleri ürünlerden ayırırsınız:

CREATE TABLE siparisler ( id INTEGER PRIMARY KEY AUTOINCREMENT, urun_id INTEGER NOT NULL, adet INTEGER NOT NULL, FOREIGN KEY (urun_id) REFERENCES urunler(id) );

Sonra iki tabloyu birleştirerek okursunuz:

SELECT s.id, u.ad, s.adet FROM siparisler s JOIN urunler u ON u.id = s.urun_id;

Önemli bir ayrıntı: SQLite'ta yabancı anahtar denetimi varsayılan olarak kapalı gelir. Bağlantı açtıktan sonra PRAGMA foreign_keys = ON; komutunu çalıştırmanız gerekir.

PHP ile SQLite bağlantısı

PHP tarafında PDO kullanmak en temiz yoldur. Bağlantı ve güvenli sorgu şu mantıkla kurulur:

  • Bağlantı: new PDO('sqlite:' . __DIR__ . '/veri/uygulama.db')
  • Hata modunu açın: setAttribute ile PDO::ERRMODE_EXCEPTION seçin. Aksi hâlde hatalar sessizce yutulur.
  • Sorguyu hazırlayın: prepare ile parametreli sorgu yazın.
  • Değerleri ayrı gönderin: execute içinde dizi olarak iletin.

Neden parametreli sorgu? Çünkü kullanıcıdan gelen değeri doğrudan sorgu metninin içine yazarsanız SQL enjeksiyonuna açık hâle gelirsiniz. Parametreli sorgu, değeri veri olarak işler ve komut olarak yorumlanmasını engeller. Bu, tercih değil zorunluluktur.

Dosya konumu ipucu: Veritabanı dosyasını web sunucusunun doğrudan erişebildiği bir klasöre koymayın. Aksi hâlde adresini tahmin eden biri tüm veritabanınızı indirebilir. Dosyayı kök dizinin dışında tutun veya erişimi sunucu ayarlarıyla engelleyin. Ayrıntılı bilgi için SQLite resmî dokümantasyonuna bakabilirsiniz.

Saha Notu

Yıllardır fabrikanın iç araçlarını ve kendi projelerimi geliştirirken varsayılan tercihim SQLite oldu. Bunun sebebi tembellik değil, sahada gözlemlediğim üç somut kazanç.

Birincisi taşınabilirlik. Veritabanı tek bir dosya olduğu için yedeklemek, kopyalamak veya bir sunucudan diğerine taşımak dosyayı kopyalamaktan ibaret. Bir stok takip aracını yeni sunucuya taşımam on beş dakika sürdü.

İkincisi kurulum maliyeti. Ayrı bir veritabanı sunucusu kurmadığınız için bakım yükü yok, parola yönetimi yok, port açma derdi yok. Tek kişilik bir bilgi işlem departmanında bu maddelerin her biri gerçek zaman demek.

Üçüncüsü ise hız. Okuma ağırlıklı iç araçlarda performans beklediğimden iyi çıktı. Bir raporlama panelinde binlerce satırlık sorgular göz açıp kapayıncaya kadar dönüyor.

Ancak bir sınıra da çarptım. Aynı anda birden çok kullanıcının sürekli yazma yaptığı bir kayıt uygulamasında kilitlenme hataları almaya başladım. Çözüm veritabanını değiştirmek olmadı; WAL adı verilen günlük kayıt modunu açmak ve yazma işlemlerini kısa tutmak sorunu ortadan kaldırdı. Buradan çıkardığım ders şu: SQLite'ın sınırına gerçekten dayandığınızı düşünmeden önce, doğru ayarları kullanıp kullanmadığınızı kontrol edin.

Son bir tavsiye: geliştirme aşamasında veritabanı dosyanızın bir kopyasını mutlaka ayrı tutun. Yanlış bir UPDATE komutu, WHERE koşulu unutulduğu için beş dakikada tüm tabloyu bozabilir. Bunu bir kez yaşadım ve o günden beri her yapısal değişiklikten önce dosyayı kopyalıyorum.

Sık Sorulan Sorular

SQLite gerçek projelerde kullanılabilir mi?

Kullanılabilir. Okuma ağırlıklı ve tek sunucuda çalışan uygulamalarda üretim ortamı için uygundur. Sınır, yüksek eş zamanlı yazma yükünde ortaya çıkar.

SQL öğrenmek zor mu?

Temel dört komutu bir günde öğrenirsiniz. Zorlaşan kısım SQL sözdizimi değil, veriyi doğru tablolara ayırmak yani veri modelleme tarafıdır.

Veritabanı dosyasını nasıl yedeklerim?

En basit yöntem uygulama kapalıyken dosyayı kopyalamaktır. Uygulama çalışırken güvenli kopya almak için SQLite'ın kendi yedekleme komutunu kullanmak daha doğrudur.

MySQL yerine SQLite kullanırsam sonradan geçiş yapabilir miyim?

Yapabilirsiniz. Standart SQL yazdıysanız geçiş büyük ölçüde şema ve veri aktarımından ibaret olur. Motora özgü özel komutlardan kaçınmak bu geçişi kolaylaştırır.

Görsel bir araç olmadan çalışabilir miyim?

Komut satırı aracı tüm işlemleri yapmanıza yeter. Ancak öğrenme aşamasında görsel bir tarayıcı kullanmak, tabloları ve ilişkileri kavramanızı belirgin biçimde hızlandırır.

Özet

Veritabanı, veriyi düzenli tutmanın ve hızlıca sorgulamanın yoludur. Öğrenmeye başlamak için SQLite ideal bir seçimdir çünkü kurulum gerektirmez ve her şey tek dosyada durur. Tablo oluşturmayı, dört temel sorguyu ve tabloları birbirine bağlamayı öğrendiğinizde işin büyük kısmını halletmiş olursunuz. PHP tarafında PDO ile parametreli sorgu kullanmayı ve veritabanı dosyasını web erişimine açık bir klasörde tutmamayı ilk günden alışkanlık hâline getirin.

Yorumlar

Henuz yorum yok. Ilk yorumu siz yazin.

Yorum Yap

Sistem Bilgisi
Ekran Karti
Cozunurluk
Isletim Sistemi
Tarayici
IP Adresi
Dil / Saat Dilimi
Pil Durumu
Donanim Eslesimi
Sistem Calisiyor — Kararli Sistem Durumu
Disk Bolumleri 12 kategori
Kayitli Dosyalar 113 yayinda yazi
Belgeler 4 sayfa
Sistem Gunlukleri 0 onayli yorum
Kullanici Hesaplari 0 uye
Yonetici Hesaplari 1 admin
Toplam Islem 4.1K goruntulenme
Medya Kutuphanesi 2 parca · 81 istasyon
Calisma Suresi 34 gun uptime
Son Senkronizasyon 6 gun once
Cekirdek Surumu ZekDesk v1.0
COPYRIGHT 2005-2026 ZekDesk. Tum haklari saklidir.
Baslat