Takip et

Ubuntu 20.04 Üzerinde SQLite Kurulumu ve Kullanımı

Ubuntu 20.04 Üzerinde SQLite Kurulumu ve Kullanımı Giriş: SQLite Nedir ve Neden Önemlidir? Günümüzün veri odaklı dünyasında, veritaban

Ubuntu 20.04 Üzerinde SQLite Kurulumu ve Kullanımı

Giriş: SQLite Nedir ve Neden Önemlidir?

Günümüzün veri odaklı dünyasında, veritabanları uygulamaların ve sistemlerin temelini oluşturur. Büyük ölçekli ve yüksek performanslı uygulamalar için MySQL, PostgreSQL veya Oracle gibi sunucu tabanlı veritabanları tercih edilirken, daha küçük ölçekli, gömülü veya yerel veri depolama ihtiyaçları için farklı çözümler aranır. İşte tam bu noktada SQLite devreye girer. SQLite, hafif, sunucusuz, kendi kendine yeten, yapılandırılabilir ve işlem özellikli bir SQL veritabanı motorudur. Adından da anlaşılacağı gibi, “lite” (hafif) bir yapıya sahiptir ve geleneksel sunucu tabanlı veritabanlarının aksine ayrı bir sunucu sürecine ihtiyaç duymaz. Tüm veritabanı, tek bir dosya olarak disk üzerinde saklanır.

SQLite’ın bu benzersiz mimarisi onu mobil uygulamalar (Android, iOS), masaüstü uygulamaları (Chrome, Firefox, Skype), IoT cihazları, web tarayıcıları ve hatta bazı web sunucuları için ideal bir seçim haline getirir. Geliştiriciler için hızlı prototipleme, test süreçleri ve küçük ölçekli projelerde karmaşık kurulum ve yönetim süreçlerinden kaçınmak için mükemmel bir araçtır. Ubuntu 20.04 gibi Linux tabanlı sistemlerde SQLite’ı kurmak ve kullanmak oldukça basittir ve bu makalede adım adım bu süreci ele alacağız.

Ön Gereksinimler

Bu makaledeki adımları uygulayabilmek için aşağıdaki ön gereksinimlere sahip olmanız gerekmektedir:

* Ubuntu 20.04 İşletim Sistemi: Makale, özellikle Ubuntu 20.04 (Focal Fossa) sürümü üzerine odaklanmıştır. Diğer Debian tabanlı dağıtımlar için de benzer adımlar geçerli olabilir, ancak bazı komutlarda küçük farklılıklar olabilir.
* Terminal Erişimi: Komutları çalıştırmak için bir terminal penceresine (Ctrl+Alt+T) ihtiyacınız olacak.
* sudo Yetkileri: Sistem genelinde paket kurulumu yapabilmek için sudo (super user do) yetkilerine sahip bir kullanıcı olmanız gerekmektedir.
* Temel Linux Komut Bilgisi: apt, cd, ls gibi temel Linux komutlarına aşina olmanız faydalı olacaktır.
* Temel Veritabanı Bilgisi (İsteğe Bağlı): SQL sorgularına ve veritabanı kavramlarına (tablo, sütun, satır vb.) temel düzeyde aşina olmanız, SQLite kullanımını daha hızlı anlamanıza yardımcı olacaktır.

SQLite Kurulumu

SQLite’ı Ubuntu 20.04’e kurmak oldukça basittir ve birkaç terminal komutuyla halledilebilir. İki ana bileşeni kuracağız: sqlite3 komut satırı aracı ve geliştiriciler için libsqlite3-dev kütüphanesi.

Sistem Paket Listesini Güncelleme

Herhangi bir yeni yazılım kurulumundan önce, sisteminizin paket listesini güncellemek ve mevcut paketleri yükseltmek iyi bir uygulamadır. Bu, en son kararlı sürümleri almanızı ve olası bağımlılık sorunlarını önlemenizi sağlar.

sudo apt update
sudo apt upgrade -y

* sudo apt update: Yerel paket indeksinizi uzak depolardaki en son bilgilerle günceller.
* sudo apt upgrade -y: Sisteminizdeki tüm yüklü paketleri en son sürümlerine yükseltir. -y bayrağı, tüm sorulara otomatik olarak “evet” yanıtı vermenizi sağlar.

SQLite Komut Satırı Aracını Kurma

sqlite3 paketi, SQLite veritabanları ile etkileşim kurmak için kullanılan komut satırı arayüzünü (CLI) içerir. Bu araç, veritabanı oluşturma, sorgulama ve yönetme gibi temel işlemleri yapmanızı sağlar.

sudo apt install sqlite3 -y

Bu komut, sqlite3 paketini ve gerekli bağımlılıklarını sisteminize yükleyecektir.

SQLite Geliştirme Kütüphanelerini Kurma (İsteğe Bağlı ama Önerilir)

Eğer C, C++ veya diğer programlama dilleriyle kendi uygulamalarınızı geliştiriyorsanız ve bu uygulamaların SQLite veritabanlarıyla etkileşime girmesini istiyorsanız, geliştirme kütüphanelerine ihtiyacınız olacaktır. libsqlite3-dev paketi, başlık dosyalarını ve statik kütüphaneleri içerir.

sudo apt install libsqlite3-dev -y

Bu paket, özellikle Python, Node.js veya diğer diller için SQLite bağlayıcılarını (binding) derlerken gerekli olabilir.

Kurulumu Doğrulama

Kurulumun başarılı olup olmadığını kontrol etmek için sqlite3 komutunu version bayrağıyla çalıştırabilirsiniz:

sqlite3 --version

Ekranda yüklü SQLite sürümünü görmelisiniz. Örneğin:

3.31.1 2020-01-27 19:55:54 3b3e9a68a4376a5b9270bc8627521a9229eef17d455437e67dcd7e340d774b77

Bu çıktı, SQLite’ın başarıyla kurulduğunu gösterir.

SQLite Komut Satırı Arayüzü (CLI) Kullanımı

SQLite’ın en temel kullanım şekli, komut satırı arayüzüdür. Bu bölüm, bir veritabanı oluşturmaktan temel SQL işlemlerine kadar CLI kullanımı hakkında ayrıntılı bilgi verecektir.

Yeni Bir Veritabanı Oluşturma veya Mevcut Bir Veritabanını Açma

SQLite kabuğunu başlatmak ve yeni bir veritabanı dosyası oluşturmak veya mevcut birini açmak için sqlite3 komutunu ve ardından veritabanı dosyasının adını kullanın. Eğer belirtilen dosya yoksa, SQLite onu oluşturacaktır; varsa, mevcut veritabanını açacaktır.

sqlite3 ornek_veritabani.db

Bu komutu çalıştırdığınızda, SQLite kabuğuna girmiş olacaksınız ve komut istemi sqlite> şeklinde değişecektir.

SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite>

Temel SQLite Kabuk Komutları

SQLite kabuğunda, . (nokta) ile başlayan özel komutlar bulunur. Bunlar SQL komutları değildir, ancak kabuk ortamını yönetmenize yardımcı olurlar.

* .help: Tüm mevcut kabuk komutlarını listeler.
* .quit veya .exit: SQLite kabuğundan çıkar ve terminale geri döner.
* .tables: Mevcut veritabanındaki tüm tabloları listeler.
* .schema [tablo_adı]: Bir tablonun CREATE TABLE deyimini veya tüm tabloların şemasını gösterir.
* .databases: Açık veritabanlarını listeler.
* .dump [tablo_adı]: Veritabanının veya belirli bir tablonun içeriğini SQL INSERT deyimleri olarak döker.
* .mode [mod]: Çıktı formatını ayarlar (örneğin, csv, column, html).
* .headers [on|off]: Çıktıda sütun başlıklarını gösterip göstermeyeceğinizi ayarlar.

Şimdi bu komutları ve temel SQL işlemlerini kullanarak bir örnek veritabanı oluşturalım.

Tablo Oluşturma

Öğrencilerin bilgilerini saklamak için ogrenciler adında bir tablo oluşturalım. Bu tablo id, ad, soyad, yas ve bolum sütunlarına sahip olacak.

CREATE TABLE ogrenciler (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    ad TEXT NOT NULL,
    soyad TEXT NOT NULL,
    yas INTEGER,
    bolum TEXT
);

* CREATE TABLE: Yeni bir tablo oluşturmak için kullanılan SQL komutudur.
* ogrenciler: Tablonun adıdır.
* id INTEGER PRIMARY KEY AUTOINCREMENT: id sütunu bir tamsayı (INTEGER) olacak, birincil anahtar (PRIMARY KEY) olarak atanacak ve her yeni kayıtta otomatik olarak artacaktır (AUTOINCREMENT).
* ad TEXT NOT NULL: ad sütunu metin (TEXT) tipinde olacak ve boş bırakılamaz (NOT NULL).
* soyad TEXT NOT NULL: soyad sütunu metin (TEXT) tipinde olacak ve boş bırakılamaz (NOT NULL).
* yas INTEGER: yas sütunu tamsayı (INTEGER) tipinde olacak.
* bolum TEXT: bolum sütunu metin (TEXT) tipinde olacak.

Komutu yazdıktan sonra noktalı virgül (;) ile bitirip Enter tuşuna basın. Herhangi bir hata mesajı almazsanız, tablo başarıyla oluşturulmuştur.

Tablonun oluşturulduğunu doğrulamak için .tables komutunu kullanabilirsiniz:

sqlite> .tables
ogrenciler

Tablonun şemasını görmek için .schema ogrenciler komutunu kullanın:

sqlite> .schema ogrenciler
CREATE TABLE ogrenciler (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    ad TEXT NOT NULL,
    soyad TEXT NOT NULL,
    yas INTEGER,
    bolum TEXT
);

Veri Ekleme

Şimdi ogrenciler tablosuna bazı öğrenci kayıtları ekleyelim.

INSERT INTO ogrenciler (ad, soyad, yas, bolum) VALUES ('Ayşe', 'Yılmaz', 20, 'Bilgisayar Mühendisliği');
INSERT INTO ogrenciler (ad, soyad, yas, bolum) VALUES ('Mehmet', 'Demir', 22, 'Elektrik Mühendisliği');
INSERT INTO ogrenciler (ad, soyad, yas, bolum) VALUES ('Zeynep', 'Kaya', 21, 'Mimarlık');
INSERT INTO ogrenciler (ad, soyad, yas, bolum) VALUES ('Ali', 'Can', 19, 'Tıp');

Her INSERT deyiminden sonra noktalı virgül kullanmayı unutmayın. id sütununu belirtmemize gerek yok çünkü AUTOINCREMENT olarak tanımlandı.

Veri Sorgulama (SELECT)

Tabloya eklediğimiz verileri görmek için SELECT komutunu kullanırız.

Tüm öğrencileri ve tüm sütunları listelemek için:

SELECT * FROM ogrenciler;

Çıktı şöyle görünebilir:

1|Ayşe|Yılmaz|20|Bilgisayar Mühendisliği
2|Mehmet|Demir|22|Elektrik Mühendisliği
3|Zeynep|Kaya|21|Mimarlık
4|Ali|Can|19|Tıp

Daha okunabilir bir çıktı için .mode column ve .headers on komutlarını kullanabiliriz:

sqlite> .mode column
sqlite> .headers on
sqlite> SELECT * FROM ogrenciler;
id          ad          soyad       yas         bolum
----------  ----------  ----------  ----------  -----------------------
1           Ayşe        Yılmaz      20          Bilgisayar Mühendisliği
2           Mehmet      Demir       22          Elektrik Mühendisliği
3           Zeynep      Kaya        21          Mimarlık
4           Ali         Can         19          Tıp

Sadece belirli sütunları seçmek için:

SELECT ad, soyad FROM ogrenciler;

Belirli koşullara göre filtrelemek için WHERE ifadesini kullanın:

SELECT * FROM ogrenciler WHERE yas > 20;

Bu, yaşı 20’den büyük olan öğrencileri listeleyecektir:

id          ad          soyad       yas         bolum
----------  ----------  ----------  ----------  -----------------------
2           Mehmet      Demir       22          Elektrik Mühendisliği
3           Zeynep      Kaya        21          Mimarlık

Veri Güncelleme (UPDATE)

Mevcut bir kaydın verilerini değiştirmek için UPDATE komutunu kullanırız. Örneğin, Mehmet Demir’in bölümünü güncelleyelim:

UPDATE ogrenciler SET bolum = 'Yazılım Mühendisliği' WHERE ad = 'Mehmet' AND soyad = 'Demir';

Güncellemenin başarılı olup olmadığını kontrol etmek için tekrar sorgulayabiliriz:

SELECT * FROM ogrenciler WHERE ad = 'Mehmet';

Çıktı:

id          ad          soyad       yas         bolum
----------  ----------  ----------  ----------  -----------------------
2           Mehmet      Demir       22          Yazılım Mühendisliği

Veri Silme (DELETE)

Bir veya daha fazla kaydı veritabanından silmek için DELETE FROM komutunu kullanırız. Örneğin, Ali Can’ı tablodan silelim:

DELETE FROM ogrenciler WHERE ad = 'Ali' AND soyad = 'Can';

Silme işlemini doğrulamak için tüm öğrencileri tekrar listeleyebiliriz:

SELECT * FROM ogrenciler;

Çıktıda Ali Can’ın olmadığını göreceksiniz.

Tablo Silme (DROP TABLE)

Bir tabloyu tamamen silmek ve içindeki tüm verileri kaldırmak için DROP TABLE komutunu kullanırız.

DROP TABLE ogrenciler;

Bu komut, ogrenciler tablosunu veritabanından kalıcı olarak kaldıracaktır.

Veritabanı işlemlerini tamamladığınızda, .quit komutuyla SQLite kabuğundan çıkın:

sqlite> .quit

SQLite Veri Türleri ve Kısıtlamalar

SQLite, diğer veritabanı sistemlerine göre daha esnek bir veri türü sistemine sahiptir. “Manifest Typing” adı verilen bu sistemde, bir sütun tanımlarken belirtilen veri türü bir öneri niteliğindedir. SQLite, beş temel depolama sınıfına sahiptir:

* NULL: Değerin boş olduğunu belirtir.
* INTEGER: İşaretli bir tamsayı. 1, 2, 3, 4, 6 veya 8 bayt boyutunda depolanabilir.
* REAL: Kayan noktalı bir sayı, 8 baytlık IEEE kayan nokta formatında depolanır.
* TEXT: UTF-8, UTF-16BE veya UTF-16LE kodlamalarından herhangi birini kullanarak depolanan bir metin dizesi.
* BLOB: Tam olarak girildiği gibi depolanan ikili büyük nesne (Binary Large Object). Genellikle resim, ses dosyaları gibi veriler için kullanılır.

Veri türleri esnek olsa da, sütun kısıtlamaları (Constraints) veritabanınızdaki verilerin bütünlüğünü sağlamak için kritik öneme sahiptir.

* PRIMARY KEY: Bir tablodaki her satırı benzersiz olarak tanımlayan bir veya daha fazla sütundur. Genellikle AUTOINCREMENT ile birlikte kullanılır.
* NOT NULL: Bir sütunun boş (NULL) değer içermemesini sağlar.
* UNIQUE: Bir sütundaki tüm değerlerin benzersiz olmasını sağlar.
* DEFAULT: Bir sütuna değer girilmediğinde kullanılacak varsayılan bir değer atar.
* CHECK: Bir sütuna girilen değerlerin belirli bir koşulu karşılamasını sağlar.
* FOREIGN KEY: İki tablo arasında bir bağlantı kurar, referans bütünlüğünü sağlar.

Örnek bir siparisler tablosu oluşturarak FOREIGN KEY kullanımını gösterebiliriz:

CREATE TABLE musteriler (
    musteri_id INTEGER PRIMARY KEY AUTOINCREMENT,
    ad TEXT NOT NULL,
    email TEXT UNIQUE
);

CREATE TABLE siparisler (
    siparis_id INTEGER PRIMARY KEY AUTOINCREMENT,
    musteri_id INTEGER NOT NULL,
    siparis_tarihi TEXT DEFAULT CURRENT_DATE,
    tutar REAL NOT NULL,
    FOREIGN KEY (musteri_id) REFERENCES musteriler(musteri_id)
);

Bu örnekte, siparisler tablosundaki musteri_id sütunu, musteriler tablosundaki musteri_id sütununa referans verir. Bu, yalnızca musteriler tablosunda mevcut olan bir musteri_id ile sipariş oluşturulabileceği anlamına gelir.

İleri Seviye SQLite Kavramları

SQLite, basitliğine rağmen güçlü özelliklere sahiptir. İşte bazı ileri seviye kavramlar:

İndeksler (Indexes)

İndeksler, büyük tablolardan veri alırken sorguların performansını artırmak için kullanılır. Bir kitabın dizini gibi düşünebilirsiniz; belirli bir bilgiyi daha hızlı bulmanıza yardımcı olur.

CREATE INDEX idx_ogrenciler_soyad ON ogrenciler (soyad);

Bu komut, ogrenciler tablosunun soyad sütununda bir indeks oluşturur. WHERE soyad = '...' gibi sorgular artık daha hızlı çalışacaktır.

Görünümler (Views)

Bir görünüm, bir veya daha fazla tablodan alınan sanal bir tablodur. Gerçek bir tablo gibi veri depolamaz, ancak sorguları basitleştirmek ve veri güvenliğini artırmak için kullanışlıdır.

CREATE VIEW aktif_ogrenciler AS
SELECT id, ad, soyad, bolum
FROM ogrenciler
WHERE yas >= 18;

Artık SELECT * FROM aktif_ogrenciler; şeklinde sorgu yapabilirsiniz.

İşlemler (Transactions)

İşlemler, bir dizi SQL deyimini tek bir atomik birim olarak gruplandırmanızı sağlar. Yani, ya tüm deyimler başarılı olur (COMMIT) ya da hiçbiri olmaz (ROLLBACK). Bu, veritabanı bütünlüğünü korumak için hayati öneme sahiptir.

BEGIN TRANSACTION;
INSERT INTO ogrenciler (ad, soyad, yas, bolum) VALUES ('Emre', 'Kara', 23, 'Fizik');
UPDATE ogrenciler SET yas = 24 WHERE ad = 'Ayşe';
-- Bir hata oluşursa veya işlemi iptal etmek istersek:
-- ROLLBACK;
-- Her şey yolundaysa:
COMMIT;

Programlama Dilleri ile SQLite Entegrasyonu (Python Örneği)

SQLite’ın en güçlü yönlerinden biri, çeşitli programlama dilleriyle kolayca entegre olabilmesidir. Python, yerleşik sqlite3 modülü sayesinde SQLite ile çalışmak için mükemmel bir seçenektir.

Python ile SQLite Kullanımı

Bir Python betiği ile ornek_veritabani.db dosyamızla nasıl etkileşim kuracağımızı gösterelim.

import sqlite3
import os

Veritabanı dosyasının yolu

db_file = 'python_ornek.db'

Eğer dosya varsa sil, temiz bir başlangıç için (isteğe bağlı)

if os.path.exists(db_file): os.remove(db_file) print(f"{db_file} dosyası temizlendi.")

Veritabanına bağlanma (eğer yoksa oluşturulur)

try: conn = sqlite3.connect(db_file) cursor = conn.cursor() print(f"Veritabanı '{db_file}' başarıyla bağlandı.") # 1. Tablo Oluşturma cursor.execute(''' CREATE TABLE IF NOT EXISTS urunler ( id INTEGER PRIMARY KEY AUTOINCREMENT, ad TEXT NOT NULL, fiyat REAL NOT NULL, stok_adedi INTEGER DEFAULT 0 ) ''') print("Tablo 'urunler' oluşturuldu veya zaten mevcut.") # 2. Veri Ekleme urunler = [ ('Laptop', 1200.50, 10), ('Mouse', 25.00, 50), ('Klavye', 75.99, 30), ('Monitör', 300.00, 15) ] cursor.executemany("INSERT INTO urunler (ad, fiyat, stok_adedi) VALUES (?, ?, ?)", urunler) conn.commit() # Değişiklikleri kaydet print(f"{len(urunler)} adet ürün eklendi.") # 3. Veri Sorgulama print("\n--- Tüm Ürünler ---") cursor.execute("SELECT * FROM urunler") for row in cursor.fetchall(): print(row) print("\n--- Fiyatı 100'den Büyük Ürünler ---") cursor.execute("SELECT ad, fiyat FROM urunler WHERE fiyat > 100") for row in cursor.fetchall(): print(row) # 4. Veri Güncelleme cursor.execute("UPDATE urunler SET stok_adedi = 5 WHERE ad = 'Laptop'") conn.commit() print("\nLaptop'un stok adedi güncellendi.") # Güncellenmiş veriyi tekrar sorgula print("\n--- Güncellenmiş Laptop Verisi ---") cursor.execute("SELECT * FROM urunler WHERE ad = 'Laptop'") print(cursor.fetchone()) # 5. Veri Silme cursor.execute("DELETE FROM urunler WHERE ad = 'Mouse'") conn.commit() print("\nMouse ürünü silindi.") # Kalan ürünleri göster print("\n--- Kalan Ürünler ---") cursor.execute("SELECT * FROM urunler") for row in cursor.fetchall(): print(row) except sqlite3.Error as e: print(f"Veritabanı hatası oluştu: {e}") finally: if conn: conn.close() print("\nVeritabanı bağlantısı kapatıldı.")

Bu Python betiği, bir SQLite veritabanı dosyası oluşturur, bir tablo tanımlar, veri ekler, sorgular, günceller ve siler.

* sqlite3.connect('python_ornek.db'): Veritabanı dosyasına bağlanır. Eğer dosya yoksa, otomatik olarak oluşturulur.
* conn.cursor(): Veritabanında SQL komutlarını çalıştırmak için bir imleç (cursor) nesnesi oluşturur.
* cursor.execute(): Tek bir SQL komutunu çalıştırır.
* cursor.executemany(): Aynı SQL komutunu birden fazla değer kümesiyle çalıştırır (toplu ekleme için idealdir).
* conn.commit(): Yapılan değişiklikleri veritabanına kalıcı olarak kaydeder. INSERT, UPDATE, DELETE gibi komutlardan sonra bu gereklidir.
* cursor.fetchall(): Tüm sorgu sonuçlarını bir liste olarak döndürür.
* cursor.fetchone(): Sorgu sonucunun tek bir satırını döndürür.
* conn.close(): Veritabanı bağlantısını kapatır.

Diğer Diller

* Node.js: sqlite3 npm paketi ile kullanılabilir.
* PHP: PDO_SQLite uzantısı ile SQLite desteği sunar.
* Java: JDBC sürücüsü aracılığıyla SQLite ile etkileşime geçebilir.
* Go: database/sql paketi ve github.com/mattn/go-sqlite3 sürücüsü ile kullanılır.

SQLite için Grafik Kullanıcı Arayüzü (GUI) Araçları

Komut satırı, veritabanı yönetimi için güçlü olsa da, görsel bir arayüz bazen daha kullanışlı olabilir. SQLite için birçok GUI aracı mevcuttur.

DB Browser for SQLite (sqlitebrowser)

DB Browser for SQLite, SQLite veritabanlarını oluşturmak, tasarlamak ve düzenlemek için ücretsiz, açık kaynaklı ve kullanımı kolay bir görsel araçtır. Ubuntu’da kurulumu da oldukça basittir.

sudo apt install sqlitebrowser -y

Kurulum tamamlandıktan sonra, uygulamayı uygulama menünüzden “DB Browser for SQLite” olarak arayarak veya terminalden sqlitebrowser komutunu çalıştırarak başlatabilirsiniz.

DB Browser for SQLite ile şunları yapabilirsiniz:

* Veritabanı dosyalarını açma ve kaydetme.
* Tabloları, indeksleri ve görünümleri oluşturma, değiştirme ve silme.
* Veri ekleme, güncelleme ve silme.
* SQL sorguları çalıştırma ve sonuçları görüntüleme.
* Veritabanı şemasını görsel olarak inceleme.

Bu araç, özellikle yeni başlayanlar veya karmaşık sorguları görsel olarak oluşturmak isteyenler için çok faydalıdır.

Diğer GUI Araçları

* DBeaver: Çeşitli veritabanlarını destekleyen evrensel bir veritabanı istemcisi olup SQLite desteği de sunar.
* SQLPro for SQLite (macOS): Mac kullanıcıları için popüler bir ücretli seçenek.
* TablePlus: Modern bir veritabanı yönetim aracı, SQLite desteği de mevcut.

En İyi Uygulamalar ve İpuçları

SQLite’ı etkin ve verimli bir şekilde kullanmak için bazı en iyi uygulamaları göz önünde bulundurmak önemlidir:

1. Veritabanınızı Yedekleyin: SQLite veritabanları tek dosya olduğu için yedeklemesi kolaydır. Düzenli olarak kopyalarını alın. Özellikle önemli verilerle çalışırken bu hayati öneme sahiptir.
2. Doğru Veri Türlerini Kullanın: SQLite esnek olsa da, sütunları doğru veri türleriyle tanımlamak hem okunabilirliği artırır hem de bazen performans optimizasyonlarına yardımcı olur. Örneğin, sayılar için INTEGER veya REAL, metinler için TEXT kullanın.
3. İndeksleri Akıllıca Kullanın: WHERE ve ORDER BY ifadelerinde sıkça kullanılan sütunlara indeks eklemek sorgu performansını önemli ölçüde artırabilir. Ancak, çok fazla indeks eklemek INSERT, UPDATE ve DELETE işlemlerini yavaşlatabilir, bu yüzden dengeyi bulun.
4. İşlemleri (Transactions) Kullanın: Veritabanı bütünlüğünü sağlamak için birden fazla SQL deyimini atomik bir birim olarak çalıştırmak için işlemleri kullanın.
5. Güvenlik Konuları: SQLite veritabanları basit dosyalardır. Bu dosyaların doğru dosya izinlerine sahip olduğundan ve hassas verileri doğrudan herkesin erişebileceği bir dizinde saklamadığınızdan emin olun. Eğer web uygulaması kullanıyorsanız, SQL enjeksiyon saldırılarına karşı parametreli sorgular kullanın (Python örneğindeki ? kullanımı gibi).
6. Ne Zaman SQLite Kullanılmamalıdır?
* Yüksek Eşzamanlı Yazma İşlemleri: SQLite, birden fazla sürecin aynı anda aynı veritabanına yazması gerektiğinde iyi performans göstermez. Kilitlenme mekanizmaları nedeniyle performans düşebilir.
* Büyük Ölçekli Web Uygulamaları: Genellikle sunucu tabanlı veritabanları (MySQL, PostgreSQL) daha iyi performans ve ölçeklenebilirlik sunar.
* Ağ Üzerinden Erişim: SQLite, bir ağ sunucusu gibi çalışmaz. Veritabanı dosyasına doğrudan dosya sistemi üzerinden erişilmesi gerekir.

Sık Karşılaşılan Sorunlar ve Çözümleri

1. sqlite3: command not found:
* Çözüm: SQLite paketinin doğru kurulup kurulmadığını kontrol edin: sudo apt install sqlite3. PATH değişkeninizde olup olmadığını kontrol edin.
2. Error: database is locked:
* Neden: Genellikle birden fazla uygulamanın veya aynı uygulamanın birden fazla işleminin aynı anda veritabanına yazmaya çalışmasından kaynaklanır.
* Çözüm: Veritabanına erişen tüm uygulamaları kapatın ve tekrar deneyin. Python gibi dillerde bağlantıyı düzgün bir şekilde kapatmak (conn.close()) önemlidir. İşlemleri (BEGIN TRANSACTION, COMMIT) doğru kullanmak da bu sorunu önleyebilir.
3. SQL error: no such table: your_table_name:
* Neden: Belirttiğiniz tablo adı veritabanında mevcut değil veya yanlış yazılmış.
* Çözüm: .tables komutunu kullanarak mevcut tabloları listeleyin ve tablo adını kontrol edin. Tabloyu oluşturduğunuzdan emin olun.
4. Permission denied:
* Neden: SQLite veritabanı dosyasını oluşturmak veya değiştirmek istediğiniz dizinde yazma izniniz yok.
* Çözüm: Veritabanı dosyasını yazma iznine sahip olduğunuz bir dizinde (örneğin ev dizininiz ~/) oluşturun veya dizinin izinlerini uygun şekilde ayarlayın (chmod).
5. Sözdizimi Hataları (Syntax Errors):
* Neden: SQL komutlarınızda yazım hatası, eksik noktalı virgül veya yanlış anahtar kelime kullanımı.
* Çözüm: Hata mesajını dikkatlice okuyun. SQL komutunuzu gözden geçirin ve doğru sözdizimi için SQLite belgelerine başvurun.

Sonuç

Bu makale, Ubuntu 20.04 üzerinde SQLite’ın nasıl kurulacağını ve kullanılacağını kapsamlı bir şekilde ele aldı. SQLite’ın hafif yapısı, sunucusuz mimarisi ve dosya tabanlı depolaması, onu birçok farklı uygulama senaryosu için cazip bir seçenek haline getirmektedir. Komut satırı arayüzü ile temel veritabanı işlemlerini gerçekleştirmeyi, Python gibi programlama dilleriyle entegrasyonu ve DB Browser for SQLite gibi GUI araçlarını kullanmayı öğrendik.

SQLite, özellikle geliştirme, test, küçük ve orta ölçekli uygulamalar, mobil ve IoT cihazları için mükemmel bir araçtır. Doğru kullanıldığında, verimli ve güvenilir bir veri depolama çözümü sunar. Bu bilgilerle, kendi projelerinizde SQLite’ı kullanmaya başlayabilir ve veritabanı yönetimi becerilerinizi daha da geliştirebilirsiniz. Unutmayın, pratik yapmak ve farklı senaryoları denemek, bu teknolojide uzmanlaşmanın anahtarıdır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.