{"id":33672,"date":"2025-11-05T18:40:54","date_gmt":"2025-11-05T15:40:54","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=33672"},"modified":"2025-11-05T18:40:54","modified_gmt":"2025-11-05T15:40:54","slug":"ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/","title":{"rendered":"Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131"},"content":{"rendered":"<p><body><\/p>\n<h2>Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131<\/h2>\n<h3>Giri\u015f: SQLite Nedir ve Neden \u00d6nemlidir?<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, veritabanlar\u0131 uygulamalar\u0131n ve sistemlerin temelini olu\u015fturur. B\u00fcy\u00fck \u00f6l\u00e7ekli ve y\u00fcksek performansl\u0131 uygulamalar i\u00e7in MySQL, PostgreSQL veya Oracle gibi sunucu tabanl\u0131 veritabanlar\u0131 tercih edilirken, daha k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli, g\u00f6m\u00fcl\u00fc veya yerel veri depolama ihtiya\u00e7lar\u0131 i\u00e7in farkl\u0131 \u00e7\u00f6z\u00fcmler aran\u0131r. \u0130\u015fte tam bu noktada SQLite devreye girer. SQLite, hafif, sunucusuz, kendi kendine yeten, yap\u0131land\u0131r\u0131labilir ve i\u015flem \u00f6zellikli bir SQL veritaban\u0131 motorudur. Ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, &#8220;lite&#8221; (hafif) bir yap\u0131ya sahiptir ve geleneksel sunucu tabanl\u0131 veritabanlar\u0131n\u0131n aksine ayr\u0131 bir sunucu s\u00fcrecine ihtiya\u00e7 duymaz. T\u00fcm veritaban\u0131, tek bir dosya olarak disk \u00fczerinde saklan\u0131r.<\/p>\n<p>SQLite&#8217;\u0131n bu benzersiz mimarisi onu mobil uygulamalar (Android, iOS), masa\u00fcst\u00fc uygulamalar\u0131 (Chrome, Firefox, Skype), IoT cihazlar\u0131, web taray\u0131c\u0131lar\u0131 ve hatta baz\u0131 web sunucular\u0131 i\u00e7in ideal bir se\u00e7im haline getirir. Geli\u015ftiriciler i\u00e7in h\u0131zl\u0131 prototipleme, test s\u00fcre\u00e7leri ve k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli projelerde karma\u015f\u0131k kurulum ve y\u00f6netim s\u00fcre\u00e7lerinden ka\u00e7\u0131nmak i\u00e7in m\u00fckemmel bir ara\u00e7t\u0131r. Ubuntu 20.04 gibi Linux tabanl\u0131 sistemlerde SQLite&#8217;\u0131 kurmak ve kullanmak olduk\u00e7a basittir ve bu makalede ad\u0131m ad\u0131m bu s\u00fcreci ele alaca\u011f\u0131z.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>Bu makaledeki ad\u0131mlar\u0131 uygulayabilmek i\u00e7in a\u015fa\u011f\u0131daki \u00f6n gereksinimlere sahip olman\u0131z gerekmektedir:<\/p>\n<p>*   <strong>Ubuntu 20.04 \u0130\u015fletim Sistemi:<\/strong> Makale, \u00f6zellikle Ubuntu 20.04 (Focal Fossa) s\u00fcr\u00fcm\u00fc \u00fczerine odaklanm\u0131\u015ft\u0131r. Di\u011fer Debian tabanl\u0131 da\u011f\u0131t\u0131mlar i\u00e7in de benzer ad\u0131mlar ge\u00e7erli olabilir, ancak baz\u0131 komutlarda k\u00fc\u00e7\u00fck farkl\u0131l\u0131klar olabilir.<br \/>\n*   <strong>Terminal Eri\u015fimi:<\/strong> Komutlar\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir terminal penceresine (Ctrl+Alt+T) ihtiyac\u0131n\u0131z olacak.<br \/>\n*   <strong><code>sudo<\/code> Yetkileri:<\/strong> Sistem genelinde paket kurulumu yapabilmek i\u00e7in <code>sudo<\/code> (super user do) yetkilerine sahip bir kullan\u0131c\u0131 olman\u0131z gerekmektedir.<br \/>\n*   <strong>Temel Linux Komut Bilgisi:<\/strong> <code>apt<\/code>, <code>cd<\/code>, <code>ls<\/code> gibi temel Linux komutlar\u0131na a\u015fina olman\u0131z faydal\u0131 olacakt\u0131r.<br \/>\n*   <strong>Temel Veritaban\u0131 Bilgisi (\u0130ste\u011fe Ba\u011fl\u0131):<\/strong> SQL sorgular\u0131na ve veritaban\u0131 kavramlar\u0131na (tablo, s\u00fctun, sat\u0131r vb.) temel d\u00fczeyde a\u015fina olman\u0131z, SQLite kullan\u0131m\u0131n\u0131 daha h\u0131zl\u0131 anlaman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>SQLite Kurulumu<\/h3>\n<p>SQLite&#8217;\u0131 Ubuntu 20.04&#8217;e kurmak olduk\u00e7a basittir ve birka\u00e7 terminal komutuyla halledilebilir. \u0130ki ana bile\u015feni kuraca\u011f\u0131z: <code>sqlite3<\/code> komut sat\u0131r\u0131 arac\u0131 ve geli\u015ftiriciler i\u00e7in <code>libsqlite3-dev<\/code> k\u00fct\u00fcphanesi.<\/p>\n<h4>Sistem Paket Listesini G\u00fcncelleme<\/h4>\n<p>Herhangi bir yeni yaz\u0131l\u0131m kurulumundan \u00f6nce, sisteminizin paket listesini g\u00fcncellemek ve mevcut paketleri y\u00fckseltmek iyi bir uygulamad\u0131r. Bu, en son kararl\u0131 s\u00fcr\u00fcmleri alman\u0131z\u0131 ve olas\u0131 ba\u011f\u0131ml\u0131l\u0131k sorunlar\u0131n\u0131 \u00f6nlemenizi sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt upgrade -y<\/code><\/pre>\n<p>*   <code>sudo apt update<\/code>: Yerel paket indeksinizi uzak depolardaki en son bilgilerle g\u00fcnceller.<br \/>\n*   <code>sudo apt upgrade -y<\/code>: Sisteminizdeki t\u00fcm y\u00fckl\u00fc paketleri en son s\u00fcr\u00fcmlerine y\u00fckseltir. <code>-y<\/code> bayra\u011f\u0131, t\u00fcm sorulara otomatik olarak &#8220;evet&#8221; yan\u0131t\u0131 vermenizi sa\u011flar.<\/p>\n<h4>SQLite Komut Sat\u0131r\u0131 Arac\u0131n\u0131 Kurma<\/h4>\n<p><code>sqlite3<\/code> paketi, SQLite veritabanlar\u0131 ile etkile\u015fim kurmak i\u00e7in kullan\u0131lan komut sat\u0131r\u0131 aray\u00fcz\u00fcn\u00fc (CLI) i\u00e7erir. Bu ara\u00e7, veritaban\u0131 olu\u015fturma, sorgulama ve y\u00f6netme gibi temel i\u015flemleri yapman\u0131z\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">sudo apt install sqlite3 -y<\/code><\/pre>\n<p>Bu komut, <code>sqlite3<\/code> paketini ve gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 sisteminize y\u00fckleyecektir.<\/p>\n<h4>SQLite Geli\u015ftirme K\u00fct\u00fcphanelerini Kurma (\u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nerilir)<\/h4>\n<p>E\u011fer C, C++ veya di\u011fer programlama dilleriyle kendi uygulamalar\u0131n\u0131z\u0131 geli\u015ftiriyorsan\u0131z ve bu uygulamalar\u0131n SQLite veritabanlar\u0131yla etkile\u015fime girmesini istiyorsan\u0131z, geli\u015ftirme k\u00fct\u00fcphanelerine ihtiyac\u0131n\u0131z olacakt\u0131r. <code>libsqlite3-dev<\/code> paketi, ba\u015fl\u0131k dosyalar\u0131n\u0131 ve statik k\u00fct\u00fcphaneleri i\u00e7erir.<\/p>\n<pre><code class=\"language-bash\">sudo apt install libsqlite3-dev -y<\/code><\/pre>\n<p>Bu paket, \u00f6zellikle Python, Node.js veya di\u011fer diller i\u00e7in SQLite ba\u011flay\u0131c\u0131lar\u0131n\u0131 (binding) derlerken gerekli olabilir.<\/p>\n<h4>Kurulumu Do\u011frulama<\/h4>\n<p>Kurulumun ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in <code>sqlite3<\/code> komutunu <code>version<\/code> bayra\u011f\u0131yla \u00e7al\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sqlite3 --version<\/code><\/pre>\n<p>Ekranda y\u00fckl\u00fc SQLite s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6rmelisiniz. \u00d6rne\u011fin:<\/p>\n<pre><code class=\"language-\">3.31.1 2020-01-27 19:55:54 3b3e9a68a4376a5b9270bc8627521a9229eef17d455437e67dcd7e340d774b77<\/code><\/pre>\n<p>Bu \u00e7\u0131kt\u0131, SQLite&#8217;\u0131n ba\u015far\u0131yla kuruldu\u011funu g\u00f6sterir.<\/p>\n<h3>SQLite Komut Sat\u0131r\u0131 Aray\u00fcz\u00fc (CLI) Kullan\u0131m\u0131<\/h3>\n<p>SQLite&#8217;\u0131n en temel kullan\u0131m \u015fekli, komut sat\u0131r\u0131 aray\u00fcz\u00fcd\u00fcr. Bu b\u00f6l\u00fcm, bir veritaban\u0131 olu\u015fturmaktan temel SQL i\u015flemlerine kadar CLI kullan\u0131m\u0131 hakk\u0131nda ayr\u0131nt\u0131l\u0131 bilgi verecektir.<\/p>\n<h4>Yeni Bir Veritaban\u0131 Olu\u015fturma veya Mevcut Bir Veritaban\u0131n\u0131 A\u00e7ma<\/h4>\n<p>SQLite kabu\u011funu ba\u015flatmak ve yeni bir veritaban\u0131 dosyas\u0131 olu\u015fturmak veya mevcut birini a\u00e7mak i\u00e7in <code>sqlite3<\/code> komutunu ve ard\u0131ndan veritaban\u0131 dosyas\u0131n\u0131n ad\u0131n\u0131 kullan\u0131n. E\u011fer belirtilen dosya yoksa, SQLite onu olu\u015fturacakt\u0131r; varsa, mevcut veritaban\u0131n\u0131 a\u00e7acakt\u0131r.<\/p>\n<pre><code class=\"language-bash\">sqlite3 ornek_veritabani.db<\/code><\/pre>\n<p>Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, SQLite kabu\u011funa girmi\u015f olacaks\u0131n\u0131z ve komut istemi <code>sqlite><\/code> \u015feklinde de\u011fi\u015fecektir.<\/p>\n<pre><code class=\"language-\">SQLite version 3.31.1 2020-01-27 19:55:54\nEnter \".help\" for usage hints.\nsqlite><\/code><\/pre>\n<h4>Temel SQLite Kabuk Komutlar\u0131<\/h4>\n<p>SQLite kabu\u011funda, <code>. <\/code> (nokta) ile ba\u015flayan \u00f6zel komutlar bulunur. Bunlar SQL komutlar\u0131 de\u011fildir, ancak kabuk ortam\u0131n\u0131 y\u00f6netmenize yard\u0131mc\u0131 olurlar.<\/p>\n<p>*   <code>.help<\/code>: T\u00fcm mevcut kabuk komutlar\u0131n\u0131 listeler.<br \/>\n*   <code>.quit<\/code> veya <code>.exit<\/code>: SQLite kabu\u011fundan \u00e7\u0131kar ve terminale geri d\u00f6ner.<br \/>\n*   <code>.tables<\/code>: Mevcut veritaban\u0131ndaki t\u00fcm tablolar\u0131 listeler.<br \/>\n*   <code>.schema [tablo_ad\u0131]<\/code>: Bir tablonun <code>CREATE TABLE<\/code> deyimini veya t\u00fcm tablolar\u0131n \u015femas\u0131n\u0131 g\u00f6sterir.<br \/>\n*   <code>.databases<\/code>: A\u00e7\u0131k veritabanlar\u0131n\u0131 listeler.<br \/>\n*   <code>.dump [tablo_ad\u0131]<\/code>: Veritaban\u0131n\u0131n veya belirli bir tablonun i\u00e7eri\u011fini SQL <code>INSERT<\/code> deyimleri olarak d\u00f6ker.<br \/>\n*   <code>.mode [mod]<\/code>: \u00c7\u0131kt\u0131 format\u0131n\u0131 ayarlar (\u00f6rne\u011fin, <code>csv<\/code>, <code>column<\/code>, <code>html<\/code>).<br \/>\n*   <code>.headers [on|off]<\/code>: \u00c7\u0131kt\u0131da s\u00fctun ba\u015fl\u0131klar\u0131n\u0131 g\u00f6sterip g\u00f6stermeyece\u011finizi ayarlar.<\/p>\n<p>\u015eimdi bu komutlar\u0131 ve temel SQL i\u015flemlerini kullanarak bir \u00f6rnek veritaban\u0131 olu\u015ftural\u0131m.<\/p>\n<h4>Tablo Olu\u015fturma<\/h4>\n<p>\u00d6\u011frencilerin bilgilerini saklamak i\u00e7in <code>ogrenciler<\/code> ad\u0131nda bir tablo olu\u015ftural\u0131m. Bu tablo <code>id<\/code>, <code>ad<\/code>, <code>soyad<\/code>, <code>yas<\/code> ve <code>bolum<\/code> s\u00fctunlar\u0131na sahip olacak.<\/p>\n<pre><code class=\"language-sql\">CREATE TABLE ogrenciler (\n    id INTEGER PRIMARY KEY AUTOINCREMENT,\n    ad TEXT NOT NULL,\n    soyad TEXT NOT NULL,\n    yas INTEGER,\n    bolum TEXT\n);<\/code><\/pre>\n<p>*   <code>CREATE TABLE<\/code>: Yeni bir tablo olu\u015fturmak i\u00e7in kullan\u0131lan SQL komutudur.<br \/>\n*   <code>ogrenciler<\/code>: Tablonun ad\u0131d\u0131r.<br \/>\n*   <code>id INTEGER PRIMARY KEY AUTOINCREMENT<\/code>: <code>id<\/code> s\u00fctunu bir tamsay\u0131 (INTEGER) olacak, birincil anahtar (PRIMARY KEY) olarak atanacak ve her yeni kay\u0131tta otomatik olarak artacakt\u0131r (AUTOINCREMENT).<br \/>\n*   <code>ad TEXT NOT NULL<\/code>: <code>ad<\/code> s\u00fctunu metin (TEXT) tipinde olacak ve bo\u015f b\u0131rak\u0131lamaz (NOT NULL).<br \/>\n*   <code>soyad TEXT NOT NULL<\/code>: <code>soyad<\/code> s\u00fctunu metin (TEXT) tipinde olacak ve bo\u015f b\u0131rak\u0131lamaz (NOT NULL).<br \/>\n*   <code>yas INTEGER<\/code>: <code>yas<\/code> s\u00fctunu tamsay\u0131 (INTEGER) tipinde olacak.<br \/>\n*   <code>bolum TEXT<\/code>: <code>bolum<\/code> s\u00fctunu metin (TEXT) tipinde olacak.<\/p>\n<p>Komutu yazd\u0131ktan sonra noktal\u0131 virg\u00fcl (<code>;<\/code>) ile bitirip Enter tu\u015funa bas\u0131n. Herhangi bir hata mesaj\u0131 almazsan\u0131z, tablo ba\u015far\u0131yla olu\u015fturulmu\u015ftur.<\/p>\n<p>Tablonun olu\u015fturuldu\u011funu do\u011frulamak i\u00e7in <code>.tables<\/code> komutunu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-sqlite\">sqlite> .tables\nogrenciler<\/code><\/pre>\n<p>Tablonun \u015femas\u0131n\u0131 g\u00f6rmek i\u00e7in <code>.schema ogrenciler<\/code> komutunu kullan\u0131n:<\/p>\n<pre><code class=\"language-sqlite\">sqlite> .schema ogrenciler\nCREATE TABLE ogrenciler (\n    id INTEGER PRIMARY KEY AUTOINCREMENT,\n    ad TEXT NOT NULL,\n    soyad TEXT NOT NULL,\n    yas INTEGER,\n    bolum TEXT\n);<\/code><\/pre>\n<h4>Veri Ekleme<\/h4>\n<p>\u015eimdi <code>ogrenciler<\/code> tablosuna baz\u0131 \u00f6\u011frenci kay\u0131tlar\u0131 ekleyelim.<\/p>\n<pre><code class=\"language-sql\">INSERT INTO ogrenciler (ad, soyad, yas, bolum) VALUES ('Ay\u015fe', 'Y\u0131lmaz', 20, 'Bilgisayar M\u00fchendisli\u011fi');\nINSERT INTO ogrenciler (ad, soyad, yas, bolum) VALUES ('Mehmet', 'Demir', 22, 'Elektrik M\u00fchendisli\u011fi');\nINSERT INTO ogrenciler (ad, soyad, yas, bolum) VALUES ('Zeynep', 'Kaya', 21, 'Mimarl\u0131k');\nINSERT INTO ogrenciler (ad, soyad, yas, bolum) VALUES ('Ali', 'Can', 19, 'T\u0131p');<\/code><\/pre>\n<p>Her <code>INSERT<\/code> deyiminden sonra noktal\u0131 virg\u00fcl kullanmay\u0131 unutmay\u0131n. <code>id<\/code> s\u00fctununu belirtmemize gerek yok \u00e7\u00fcnk\u00fc <code>AUTOINCREMENT<\/code> olarak tan\u0131mland\u0131.<\/p>\n<h4>Veri Sorgulama (SELECT)<\/h4>\n<p>Tabloya ekledi\u011fimiz verileri g\u00f6rmek i\u00e7in <code>SELECT<\/code> komutunu kullan\u0131r\u0131z.<\/p>\n<p>T\u00fcm \u00f6\u011frencileri ve t\u00fcm s\u00fctunlar\u0131 listelemek i\u00e7in:<\/p>\n<pre><code class=\"language-sql\">SELECT * FROM ogrenciler;<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131 \u015f\u00f6yle g\u00f6r\u00fcnebilir:<\/p>\n<pre><code class=\"language-\">1|Ay\u015fe|Y\u0131lmaz|20|Bilgisayar M\u00fchendisli\u011fi\n2|Mehmet|Demir|22|Elektrik M\u00fchendisli\u011fi\n3|Zeynep|Kaya|21|Mimarl\u0131k\n4|Ali|Can|19|T\u0131p<\/code><\/pre>\n<p>Daha okunabilir bir \u00e7\u0131kt\u0131 i\u00e7in <code>.mode column<\/code> ve <code>.headers on<\/code> komutlar\u0131n\u0131 kullanabiliriz:<\/p>\n<pre><code class=\"language-sqlite\">sqlite> .mode column\nsqlite> .headers on\nsqlite> SELECT * FROM ogrenciler;\nid          ad          soyad       yas         bolum\n----------  ----------  ----------  ----------  -----------------------\n1           Ay\u015fe        Y\u0131lmaz      20          Bilgisayar M\u00fchendisli\u011fi\n2           Mehmet      Demir       22          Elektrik M\u00fchendisli\u011fi\n3           Zeynep      Kaya        21          Mimarl\u0131k\n4           Ali         Can         19          T\u0131p<\/code><\/pre>\n<p>Sadece belirli s\u00fctunlar\u0131 se\u00e7mek i\u00e7in:<\/p>\n<pre><code class=\"language-sql\">SELECT ad, soyad FROM ogrenciler;<\/code><\/pre>\n<p>Belirli ko\u015fullara g\u00f6re filtrelemek i\u00e7in <code>WHERE<\/code> ifadesini kullan\u0131n:<\/p>\n<pre><code class=\"language-sql\">SELECT * FROM ogrenciler WHERE yas > 20;<\/code><\/pre>\n<p>Bu, ya\u015f\u0131 20&#8217;den b\u00fcy\u00fck olan \u00f6\u011frencileri listeleyecektir:<\/p>\n<pre><code class=\"language-\">id          ad          soyad       yas         bolum\n----------  ----------  ----------  ----------  -----------------------\n2           Mehmet      Demir       22          Elektrik M\u00fchendisli\u011fi\n3           Zeynep      Kaya        21          Mimarl\u0131k<\/code><\/pre>\n<h4>Veri G\u00fcncelleme (UPDATE)<\/h4>\n<p>Mevcut bir kayd\u0131n verilerini de\u011fi\u015ftirmek i\u00e7in <code>UPDATE<\/code> komutunu kullan\u0131r\u0131z. \u00d6rne\u011fin, Mehmet Demir&#8217;in b\u00f6l\u00fcm\u00fcn\u00fc g\u00fcncelleyelim:<\/p>\n<pre><code class=\"language-sql\">UPDATE ogrenciler SET bolum = 'Yaz\u0131l\u0131m M\u00fchendisli\u011fi' WHERE ad = 'Mehmet' AND soyad = 'Demir';<\/code><\/pre>\n<p>G\u00fcncellemenin ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in tekrar sorgulayabiliriz:<\/p>\n<pre><code class=\"language-sql\">SELECT * FROM ogrenciler WHERE ad = 'Mehmet';<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131:<\/p>\n<pre><code class=\"language-\">id          ad          soyad       yas         bolum\n----------  ----------  ----------  ----------  -----------------------\n2           Mehmet      Demir       22          Yaz\u0131l\u0131m M\u00fchendisli\u011fi<\/code><\/pre>\n<h4>Veri Silme (DELETE)<\/h4>\n<p>Bir veya daha fazla kayd\u0131 veritaban\u0131ndan silmek i\u00e7in <code>DELETE FROM<\/code> komutunu kullan\u0131r\u0131z. \u00d6rne\u011fin, Ali Can&#8217;\u0131 tablodan silelim:<\/p>\n<pre><code class=\"language-sql\">DELETE FROM ogrenciler WHERE ad = 'Ali' AND soyad = 'Can';<\/code><\/pre>\n<p>Silme i\u015flemini do\u011frulamak i\u00e7in t\u00fcm \u00f6\u011frencileri tekrar listeleyebiliriz:<\/p>\n<pre><code class=\"language-sql\">SELECT * FROM ogrenciler;<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da Ali Can&#8217;\u0131n olmad\u0131\u011f\u0131n\u0131 g\u00f6receksiniz.<\/p>\n<h4>Tablo Silme (DROP TABLE)<\/h4>\n<p>Bir tabloyu tamamen silmek ve i\u00e7indeki t\u00fcm verileri kald\u0131rmak i\u00e7in <code>DROP TABLE<\/code> komutunu kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-sql\">DROP TABLE ogrenciler;<\/code><\/pre>\n<p>Bu komut, <code>ogrenciler<\/code> tablosunu veritaban\u0131ndan kal\u0131c\u0131 olarak kald\u0131racakt\u0131r.<\/p>\n<p>Veritaban\u0131 i\u015flemlerini tamamlad\u0131\u011f\u0131n\u0131zda, <code>.quit<\/code> komutuyla SQLite kabu\u011fundan \u00e7\u0131k\u0131n:<\/p>\n<pre><code class=\"language-sqlite\">sqlite> .quit<\/code><\/pre>\n<h3>SQLite Veri T\u00fcrleri ve K\u0131s\u0131tlamalar<\/h3>\n<p>SQLite, di\u011fer veritaban\u0131 sistemlerine g\u00f6re daha esnek bir veri t\u00fcr\u00fc sistemine sahiptir. &#8220;Manifest Typing&#8221; ad\u0131 verilen bu sistemde, bir s\u00fctun tan\u0131mlarken belirtilen veri t\u00fcr\u00fc bir \u00f6neri niteli\u011findedir. SQLite, be\u015f temel depolama s\u0131n\u0131f\u0131na sahiptir:<\/p>\n<p>*   <strong>NULL:<\/strong> De\u011ferin bo\u015f oldu\u011funu belirtir.<br \/>\n*   <strong>INTEGER:<\/strong> \u0130\u015faretli bir tamsay\u0131. 1, 2, 3, 4, 6 veya 8 bayt boyutunda depolanabilir.<br \/>\n*   <strong>REAL:<\/strong> Kayan noktal\u0131 bir say\u0131, 8 baytl\u0131k IEEE kayan nokta format\u0131nda depolan\u0131r.<br \/>\n*   <strong>TEXT:<\/strong> UTF-8, UTF-16BE veya UTF-16LE kodlamalar\u0131ndan herhangi birini kullanarak depolanan bir metin dizesi.<br \/>\n*   <strong>BLOB:<\/strong> Tam olarak girildi\u011fi gibi depolanan ikili b\u00fcy\u00fck nesne (Binary Large Object). Genellikle resim, ses dosyalar\u0131 gibi veriler i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>Veri t\u00fcrleri esnek olsa da, s\u00fctun k\u0131s\u0131tlamalar\u0131 (Constraints) veritaban\u0131n\u0131zdaki verilerin b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flamak i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<p>*   <strong>PRIMARY KEY:<\/strong> Bir tablodaki her sat\u0131r\u0131 benzersiz olarak tan\u0131mlayan bir veya daha fazla s\u00fctundur. Genellikle <code>AUTOINCREMENT<\/code> ile birlikte kullan\u0131l\u0131r.<br \/>\n*   <strong>NOT NULL:<\/strong> Bir s\u00fctunun bo\u015f (NULL) de\u011fer i\u00e7ermemesini sa\u011flar.<br \/>\n*   <strong>UNIQUE:<\/strong> Bir s\u00fctundaki t\u00fcm de\u011ferlerin benzersiz olmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>DEFAULT:<\/strong> Bir s\u00fctuna de\u011fer girilmedi\u011finde kullan\u0131lacak varsay\u0131lan bir de\u011fer atar.<br \/>\n*   <strong>CHECK:<\/strong> Bir s\u00fctuna girilen de\u011ferlerin belirli bir ko\u015fulu kar\u015f\u0131lamas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>FOREIGN KEY:<\/strong> \u0130ki tablo aras\u0131nda bir ba\u011flant\u0131 kurar, referans b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flar.<\/p>\n<p>\u00d6rnek bir <code>siparisler<\/code> tablosu olu\u015fturarak <code>FOREIGN KEY<\/code> kullan\u0131m\u0131n\u0131 g\u00f6sterebiliriz:<\/p>\n<pre><code class=\"language-sql\">CREATE TABLE musteriler (\n    musteri_id INTEGER PRIMARY KEY AUTOINCREMENT,\n    ad TEXT NOT NULL,\n    email TEXT UNIQUE\n);\n\nCREATE TABLE siparisler (\n    siparis_id INTEGER PRIMARY KEY AUTOINCREMENT,\n    musteri_id INTEGER NOT NULL,\n    siparis_tarihi TEXT DEFAULT CURRENT_DATE,\n    tutar REAL NOT NULL,\n    FOREIGN KEY (musteri_id) REFERENCES musteriler(musteri_id)\n);<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>siparisler<\/code> tablosundaki <code>musteri_id<\/code> s\u00fctunu, <code>musteriler<\/code> tablosundaki <code>musteri_id<\/code> s\u00fctununa referans verir. Bu, yaln\u0131zca <code>musteriler<\/code> tablosunda mevcut olan bir <code>musteri_id<\/code> ile sipari\u015f olu\u015fturulabilece\u011fi anlam\u0131na gelir.<\/p>\n<h3>\u0130leri Seviye SQLite Kavramlar\u0131<\/h3>\n<p>SQLite, basitli\u011fine ra\u011fmen g\u00fc\u00e7l\u00fc \u00f6zelliklere sahiptir. \u0130\u015fte baz\u0131 ileri seviye kavramlar:<\/p>\n<h4>\u0130ndeksler (Indexes)<\/h4>\n<p>\u0130ndeksler, b\u00fcy\u00fck tablolardan veri al\u0131rken sorgular\u0131n performans\u0131n\u0131 art\u0131rmak i\u00e7in kullan\u0131l\u0131r. Bir kitab\u0131n dizini gibi d\u00fc\u015f\u00fcnebilirsiniz; belirli bir bilgiyi daha h\u0131zl\u0131 bulman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<pre><code class=\"language-sql\">CREATE INDEX idx_ogrenciler_soyad ON ogrenciler (soyad);<\/code><\/pre>\n<p>Bu komut, <code>ogrenciler<\/code> tablosunun <code>soyad<\/code> s\u00fctununda bir indeks olu\u015fturur. <code>WHERE soyad = '...'<\/code> gibi sorgular art\u0131k daha h\u0131zl\u0131 \u00e7al\u0131\u015facakt\u0131r.<\/p>\n<h4>G\u00f6r\u00fcn\u00fcmler (Views)<\/h4>\n<p>Bir g\u00f6r\u00fcn\u00fcm, bir veya daha fazla tablodan al\u0131nan sanal bir tablodur. Ger\u00e7ek bir tablo gibi veri depolamaz, ancak sorgular\u0131 basitle\u015ftirmek ve veri g\u00fcvenli\u011fini art\u0131rmak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-sql\">CREATE VIEW aktif_ogrenciler AS\nSELECT id, ad, soyad, bolum\nFROM ogrenciler\nWHERE yas >= 18;<\/code><\/pre>\n<p>Art\u0131k <code>SELECT * FROM aktif_ogrenciler;<\/code> \u015feklinde sorgu yapabilirsiniz.<\/p>\n<h4>\u0130\u015flemler (Transactions)<\/h4>\n<p>\u0130\u015flemler, bir dizi SQL deyimini tek bir atomik birim olarak grupland\u0131rman\u0131z\u0131 sa\u011flar. Yani, ya t\u00fcm deyimler ba\u015far\u0131l\u0131 olur (COMMIT) ya da hi\u00e7biri olmaz (ROLLBACK). Bu, veritaban\u0131 b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc korumak i\u00e7in hayati \u00f6neme sahiptir.<\/p>\n<pre><code class=\"language-sql\">BEGIN TRANSACTION;\nINSERT INTO ogrenciler (ad, soyad, yas, bolum) VALUES ('Emre', 'Kara', 23, 'Fizik');\nUPDATE ogrenciler SET yas = 24 WHERE ad = 'Ay\u015fe';\n-- Bir hata olu\u015fursa veya i\u015flemi iptal etmek istersek:\n-- ROLLBACK;\n-- Her \u015fey yolundaysa:\nCOMMIT;<\/code><\/pre>\n<h3>Programlama Dilleri ile SQLite Entegrasyonu (Python \u00d6rne\u011fi)<\/h3>\n<p>SQLite&#8217;\u0131n en g\u00fc\u00e7l\u00fc y\u00f6nlerinden biri, \u00e7e\u015fitli programlama dilleriyle kolayca entegre olabilmesidir. Python, yerle\u015fik <code>sqlite3<\/code> mod\u00fcl\u00fc sayesinde SQLite ile \u00e7al\u0131\u015fmak i\u00e7in m\u00fckemmel bir se\u00e7enektir.<\/p>\n<h4>Python ile SQLite Kullan\u0131m\u0131<\/h4>\n<p>Bir Python beti\u011fi ile <code>ornek_veritabani.db<\/code> dosyam\u0131zla nas\u0131l etkile\u015fim kuraca\u011f\u0131m\u0131z\u0131 g\u00f6sterelim.<\/p>\n<pre><code class=\"language-python\">import sqlite3\nimport os\n\n<h2>Veritaban\u0131 dosyas\u0131n\u0131n yolu<\/h2>\ndb_file = 'python_ornek.db'\n\n<h2>E\u011fer dosya varsa sil, temiz bir ba\u015flang\u0131\u00e7 i\u00e7in (iste\u011fe ba\u011fl\u0131)<\/h2>\nif os.path.exists(db_file):\n    os.remove(db_file)\n    print(f\"{db_file} dosyas\u0131 temizlendi.\")\n\n<h2>Veritaban\u0131na ba\u011flanma (e\u011fer yoksa olu\u015fturulur)<\/h2>\ntry:\n    conn = sqlite3.connect(db_file)\n    cursor = conn.cursor()\n    print(f\"Veritaban\u0131 '{db_file}' ba\u015far\u0131yla ba\u011fland\u0131.\")\n\n    # 1. Tablo Olu\u015fturma\n    cursor.execute('''\n        CREATE TABLE IF NOT EXISTS urunler (\n            id INTEGER PRIMARY KEY AUTOINCREMENT,\n            ad TEXT NOT NULL,\n            fiyat REAL NOT NULL,\n            stok_adedi INTEGER DEFAULT 0\n        )\n    ''')\n    print(\"Tablo 'urunler' olu\u015fturuldu veya zaten mevcut.\")\n\n    # 2. Veri Ekleme\n    urunler = [\n        ('Laptop', 1200.50, 10),\n        ('Mouse', 25.00, 50),\n        ('Klavye', 75.99, 30),\n        ('Monit\u00f6r', 300.00, 15)\n    ]\n    cursor.executemany(\"INSERT INTO urunler (ad, fiyat, stok_adedi) VALUES (?, ?, ?)\", urunler)\n    conn.commit() # De\u011fi\u015fiklikleri kaydet\n    print(f\"{len(urunler)} adet \u00fcr\u00fcn eklendi.\")\n\n    # 3. Veri Sorgulama\n    print(\"\\n--- T\u00fcm \u00dcr\u00fcnler ---\")\n    cursor.execute(\"SELECT * FROM urunler\")\n    for row in cursor.fetchall():\n        print(row)\n\n    print(\"\\n--- Fiyat\u0131 100'den B\u00fcy\u00fck \u00dcr\u00fcnler ---\")\n    cursor.execute(\"SELECT ad, fiyat FROM urunler WHERE fiyat > 100\")\n    for row in cursor.fetchall():\n        print(row)\n\n    # 4. Veri G\u00fcncelleme\n    cursor.execute(\"UPDATE urunler SET stok_adedi = 5 WHERE ad = 'Laptop'\")\n    conn.commit()\n    print(\"\\nLaptop'un stok adedi g\u00fcncellendi.\")\n\n    # G\u00fcncellenmi\u015f veriyi tekrar sorgula\n    print(\"\\n--- G\u00fcncellenmi\u015f Laptop Verisi ---\")\n    cursor.execute(\"SELECT * FROM urunler WHERE ad = 'Laptop'\")\n    print(cursor.fetchone())\n\n    # 5. Veri Silme\n    cursor.execute(\"DELETE FROM urunler WHERE ad = 'Mouse'\")\n    conn.commit()\n    print(\"\\nMouse \u00fcr\u00fcn\u00fc silindi.\")\n\n    # Kalan \u00fcr\u00fcnleri g\u00f6ster\n    print(\"\\n--- Kalan \u00dcr\u00fcnler ---\")\n    cursor.execute(\"SELECT * FROM urunler\")\n    for row in cursor.fetchall():\n        print(row)\n\nexcept sqlite3.Error as e:\n    print(f\"Veritaban\u0131 hatas\u0131 olu\u015ftu: {e}\")\nfinally:\n    if conn:\n        conn.close()\n        print(\"\\nVeritaban\u0131 ba\u011flant\u0131s\u0131 kapat\u0131ld\u0131.\")<\/code><\/pre>\n<p>Bu Python beti\u011fi, bir SQLite veritaban\u0131 dosyas\u0131 olu\u015fturur, bir tablo tan\u0131mlar, veri ekler, sorgular, g\u00fcnceller ve siler.<\/p>\n<p>*   <code>sqlite3.connect('python_ornek.db')<\/code>: Veritaban\u0131 dosyas\u0131na ba\u011flan\u0131r. E\u011fer dosya yoksa, otomatik olarak olu\u015fturulur.<br \/>\n*   <code>conn.cursor()<\/code>: Veritaban\u0131nda SQL komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir imle\u00e7 (cursor) nesnesi olu\u015fturur.<br \/>\n*   <code>cursor.execute()<\/code>: Tek bir SQL komutunu \u00e7al\u0131\u015ft\u0131r\u0131r.<br \/>\n*   <code>cursor.executemany()<\/code>: Ayn\u0131 SQL komutunu birden fazla de\u011fer k\u00fcmesiyle \u00e7al\u0131\u015ft\u0131r\u0131r (toplu ekleme i\u00e7in idealdir).<br \/>\n*   <code>conn.commit()<\/code>: Yap\u0131lan de\u011fi\u015fiklikleri veritaban\u0131na kal\u0131c\u0131 olarak kaydeder. <code>INSERT<\/code>, <code>UPDATE<\/code>, <code>DELETE<\/code> gibi komutlardan sonra bu gereklidir.<br \/>\n*   <code>cursor.fetchall()<\/code>: T\u00fcm sorgu sonu\u00e7lar\u0131n\u0131 bir liste olarak d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <code>cursor.fetchone()<\/code>: Sorgu sonucunun tek bir sat\u0131r\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <code>conn.close()<\/code>: Veritaban\u0131 ba\u011flant\u0131s\u0131n\u0131 kapat\u0131r.<\/p>\n<h4>Di\u011fer Diller<\/h4>\n<p>*   <strong>Node.js:<\/strong> <code>sqlite3<\/code> npm paketi ile kullan\u0131labilir.<br \/>\n*   <strong>PHP:<\/strong> <code>PDO_SQLite<\/code> uzant\u0131s\u0131 ile SQLite deste\u011fi sunar.<br \/>\n*   <strong>Java:<\/strong> JDBC s\u00fcr\u00fcc\u00fcs\u00fc arac\u0131l\u0131\u011f\u0131yla SQLite ile etkile\u015fime ge\u00e7ebilir.<br \/>\n*   <strong>Go:<\/strong> <code>database\/sql<\/code> paketi ve <code>github.com\/mattn\/go-sqlite3<\/code> s\u00fcr\u00fcc\u00fcs\u00fc ile kullan\u0131l\u0131r.<\/p>\n<h3>SQLite i\u00e7in Grafik Kullan\u0131c\u0131 Aray\u00fcz\u00fc (GUI) Ara\u00e7lar\u0131<\/h3>\n<p>Komut sat\u0131r\u0131, veritaban\u0131 y\u00f6netimi i\u00e7in g\u00fc\u00e7l\u00fc olsa da, g\u00f6rsel bir aray\u00fcz bazen daha kullan\u0131\u015fl\u0131 olabilir. SQLite i\u00e7in bir\u00e7ok GUI arac\u0131 mevcuttur.<\/p>\n<h4>DB Browser for SQLite (sqlitebrowser)<\/h4>\n<p>DB Browser for SQLite, SQLite veritabanlar\u0131n\u0131 olu\u015fturmak, tasarlamak ve d\u00fczenlemek i\u00e7in \u00fccretsiz, a\u00e7\u0131k kaynakl\u0131 ve kullan\u0131m\u0131 kolay bir g\u00f6rsel ara\u00e7t\u0131r. Ubuntu&#8217;da kurulumu da olduk\u00e7a basittir.<\/p>\n<pre><code class=\"language-bash\">sudo apt install sqlitebrowser -y<\/code><\/pre>\n<p>Kurulum tamamland\u0131ktan sonra, uygulamay\u0131 uygulama men\u00fcn\u00fczden &#8220;DB Browser for SQLite&#8221; olarak arayarak veya terminalden <code>sqlitebrowser<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak ba\u015flatabilirsiniz.<\/p>\n<p>DB Browser for SQLite ile \u015funlar\u0131 yapabilirsiniz:<\/p>\n<p>*   Veritaban\u0131 dosyalar\u0131n\u0131 a\u00e7ma ve kaydetme.<br \/>\n*   Tablolar\u0131, indeksleri ve g\u00f6r\u00fcn\u00fcmleri olu\u015fturma, de\u011fi\u015ftirme ve silme.<br \/>\n*   Veri ekleme, g\u00fcncelleme ve silme.<br \/>\n*   SQL sorgular\u0131 \u00e7al\u0131\u015ft\u0131rma ve sonu\u00e7lar\u0131 g\u00f6r\u00fcnt\u00fcleme.<br \/>\n*   Veritaban\u0131 \u015femas\u0131n\u0131 g\u00f6rsel olarak inceleme.<\/p>\n<p>Bu ara\u00e7, \u00f6zellikle yeni ba\u015flayanlar veya karma\u015f\u0131k sorgular\u0131 g\u00f6rsel olarak olu\u015fturmak isteyenler i\u00e7in \u00e7ok faydal\u0131d\u0131r.<\/p>\n<h4>Di\u011fer GUI Ara\u00e7lar\u0131<\/h4>\n<p>*   <strong>DBeaver:<\/strong> \u00c7e\u015fitli veritabanlar\u0131n\u0131 destekleyen evrensel bir veritaban\u0131 istemcisi olup SQLite deste\u011fi de sunar.<br \/>\n*   <strong>SQLPro for SQLite (macOS):<\/strong> Mac kullan\u0131c\u0131lar\u0131 i\u00e7in pop\u00fcler bir \u00fccretli se\u00e7enek.<br \/>\n*   <strong>TablePlus:<\/strong> Modern bir veritaban\u0131 y\u00f6netim arac\u0131, SQLite deste\u011fi de mevcut.<\/p>\n<h3>En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>SQLite&#8217;\u0131 etkin ve verimli bir \u015fekilde kullanmak i\u00e7in baz\u0131 en iyi uygulamalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir:<\/p>\n<p>1.  <strong>Veritaban\u0131n\u0131z\u0131 Yedekleyin:<\/strong> SQLite veritabanlar\u0131 tek dosya oldu\u011fu i\u00e7in yedeklemesi kolayd\u0131r. D\u00fczenli olarak kopyalar\u0131n\u0131 al\u0131n. \u00d6zellikle \u00f6nemli verilerle \u00e7al\u0131\u015f\u0131rken bu hayati \u00f6neme sahiptir.<br \/>\n2.  <strong>Do\u011fru Veri T\u00fcrlerini Kullan\u0131n:<\/strong> SQLite esnek olsa da, s\u00fctunlar\u0131 do\u011fru veri t\u00fcrleriyle tan\u0131mlamak hem okunabilirli\u011fi art\u0131r\u0131r hem de bazen performans optimizasyonlar\u0131na yard\u0131mc\u0131 olur. \u00d6rne\u011fin, say\u0131lar i\u00e7in <code>INTEGER<\/code> veya <code>REAL<\/code>, metinler i\u00e7in <code>TEXT<\/code> kullan\u0131n.<br \/>\n3.  <strong>\u0130ndeksleri Ak\u0131ll\u0131ca Kullan\u0131n:<\/strong> <code>WHERE<\/code> ve <code>ORDER BY<\/code> ifadelerinde s\u0131k\u00e7a kullan\u0131lan s\u00fctunlara indeks eklemek sorgu performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Ancak, \u00e7ok fazla indeks eklemek <code>INSERT<\/code>, <code>UPDATE<\/code> ve <code>DELETE<\/code> i\u015flemlerini yava\u015flatabilir, bu y\u00fczden dengeyi bulun.<br \/>\n4.  <strong>\u0130\u015flemleri (Transactions) Kullan\u0131n:<\/strong> Veritaban\u0131 b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flamak i\u00e7in birden fazla SQL deyimini atomik bir birim olarak \u00e7al\u0131\u015ft\u0131rmak i\u00e7in i\u015flemleri kullan\u0131n.<br \/>\n5.  <strong>G\u00fcvenlik Konular\u0131:<\/strong> SQLite veritabanlar\u0131 basit dosyalard\u0131r. Bu dosyalar\u0131n do\u011fru dosya izinlerine sahip oldu\u011fundan ve hassas verileri do\u011frudan herkesin eri\u015febilece\u011fi bir dizinde saklamad\u0131\u011f\u0131n\u0131zdan emin olun. E\u011fer web uygulamas\u0131 kullan\u0131yorsan\u0131z, SQL enjeksiyon sald\u0131r\u0131lar\u0131na kar\u015f\u0131 parametreli sorgular kullan\u0131n (Python \u00f6rne\u011findeki <code>?<\/code> kullan\u0131m\u0131 gibi).<br \/>\n6.  <strong>Ne Zaman SQLite Kullan\u0131lmamal\u0131d\u0131r?<\/strong><br \/>\n    *   <strong>Y\u00fcksek E\u015fzamanl\u0131 Yazma \u0130\u015flemleri:<\/strong> SQLite, birden fazla s\u00fcrecin ayn\u0131 anda ayn\u0131 veritaban\u0131na yazmas\u0131 gerekti\u011finde iyi performans g\u00f6stermez. Kilitlenme mekanizmalar\u0131 nedeniyle performans d\u00fc\u015febilir.<br \/>\n    *   <strong>B\u00fcy\u00fck \u00d6l\u00e7ekli Web Uygulamalar\u0131:<\/strong> Genellikle sunucu tabanl\u0131 veritabanlar\u0131 (MySQL, PostgreSQL) daha iyi performans ve \u00f6l\u00e7eklenebilirlik sunar.<br \/>\n    *   <strong>A\u011f \u00dczerinden Eri\u015fim:<\/strong> SQLite, bir a\u011f sunucusu gibi \u00e7al\u0131\u015fmaz. Veritaban\u0131 dosyas\u0131na do\u011frudan dosya sistemi \u00fczerinden eri\u015filmesi gerekir.<\/p>\n<h3>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p>1.  <strong><code>sqlite3: command not found<\/code>:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> SQLite paketinin do\u011fru kurulup kurulmad\u0131\u011f\u0131n\u0131 kontrol edin: <code>sudo apt install sqlite3<\/code>. PATH de\u011fi\u015fkeninizde olup olmad\u0131\u011f\u0131n\u0131 kontrol edin.<br \/>\n2.  <strong><code>Error: database is locked<\/code>:<\/strong><br \/>\n    *   <strong>Neden:<\/strong> Genellikle birden fazla uygulaman\u0131n veya ayn\u0131 uygulaman\u0131n birden fazla i\u015fleminin ayn\u0131 anda veritaban\u0131na yazmaya \u00e7al\u0131\u015fmas\u0131ndan kaynaklan\u0131r.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Veritaban\u0131na eri\u015fen t\u00fcm uygulamalar\u0131 kapat\u0131n ve tekrar deneyin. Python gibi dillerde ba\u011flant\u0131y\u0131 d\u00fczg\u00fcn bir \u015fekilde kapatmak (<code>conn.close()<\/code>) \u00f6nemlidir. \u0130\u015flemleri (<code>BEGIN TRANSACTION<\/code>, <code>COMMIT<\/code>) do\u011fru kullanmak da bu sorunu \u00f6nleyebilir.<br \/>\n3.  <strong><code>SQL error: no such table: your_table_name<\/code>:<\/strong><br \/>\n    *   <strong>Neden:<\/strong> Belirtti\u011finiz tablo ad\u0131 veritaban\u0131nda mevcut de\u011fil veya yanl\u0131\u015f yaz\u0131lm\u0131\u015f.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>.tables<\/code> komutunu kullanarak mevcut tablolar\u0131 listeleyin ve tablo ad\u0131n\u0131 kontrol edin. Tabloyu olu\u015fturdu\u011funuzdan emin olun.<br \/>\n4.  <strong><code>Permission denied<\/code>:<\/strong><br \/>\n    *   <strong>Neden:<\/strong> SQLite veritaban\u0131 dosyas\u0131n\u0131 olu\u015fturmak veya de\u011fi\u015ftirmek istedi\u011finiz dizinde yazma izniniz yok.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Veritaban\u0131 dosyas\u0131n\u0131 yazma iznine sahip oldu\u011funuz bir dizinde (\u00f6rne\u011fin ev dizininiz <code>~\/<\/code>) olu\u015fturun veya dizinin izinlerini uygun \u015fekilde ayarlay\u0131n (<code>chmod<\/code>).<br \/>\n5.  <strong>S\u00f6zdizimi Hatalar\u0131 (Syntax Errors):<\/strong><br \/>\n    *   <strong>Neden:<\/strong> SQL komutlar\u0131n\u0131zda yaz\u0131m hatas\u0131, eksik noktal\u0131 virg\u00fcl veya yanl\u0131\u015f anahtar kelime kullan\u0131m\u0131.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Hata mesaj\u0131n\u0131 dikkatlice okuyun. SQL komutunuzu g\u00f6zden ge\u00e7irin ve do\u011fru s\u00f6zdizimi i\u00e7in SQLite belgelerine ba\u015fvurun.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makale, Ubuntu 20.04 \u00fczerinde SQLite&#8217;\u0131n nas\u0131l kurulaca\u011f\u0131n\u0131 ve kullan\u0131laca\u011f\u0131n\u0131 kapsaml\u0131 bir \u015fekilde ele ald\u0131. SQLite&#8217;\u0131n hafif yap\u0131s\u0131, sunucusuz mimarisi ve dosya tabanl\u0131 depolamas\u0131, onu bir\u00e7ok farkl\u0131 uygulama senaryosu i\u00e7in cazip bir se\u00e7enek haline getirmektedir. Komut sat\u0131r\u0131 aray\u00fcz\u00fc ile temel veritaban\u0131 i\u015flemlerini ger\u00e7ekle\u015ftirmeyi, Python gibi programlama dilleriyle entegrasyonu ve DB Browser for SQLite gibi GUI ara\u00e7lar\u0131n\u0131 kullanmay\u0131 \u00f6\u011frendik.<\/p>\n<p>SQLite, \u00f6zellikle geli\u015ftirme, test, k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli uygulamalar, mobil ve IoT cihazlar\u0131 i\u00e7in m\u00fckemmel bir ara\u00e7t\u0131r. Do\u011fru kullan\u0131ld\u0131\u011f\u0131nda, verimli ve g\u00fcvenilir bir veri depolama \u00e7\u00f6z\u00fcm\u00fc sunar. Bu bilgilerle, kendi projelerinizde SQLite&#8217;\u0131 kullanmaya ba\u015flayabilir ve veritaban\u0131 y\u00f6netimi becerilerinizi daha da geli\u015ftirebilirsiniz. Unutmay\u0131n, pratik yapmak ve farkl\u0131 senaryolar\u0131 denemek, bu teknolojide uzmanla\u015fman\u0131n anahtar\u0131d\u0131r.<\/p>\n","protected":false},"excerpt":{"rendered":"Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131\nGiri\u015f: SQLite Nedir ve Neden \u00d6nemlidir?\nG\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, veritaban","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1468],"tags":[],"class_list":{"0":"post-33672","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131\" \/>\n<meta property=\"og:description\" content=\"Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131 Giri\u015f: SQLite Nedir ve Neden \u00d6nemlidir? G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, veritaban\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-05T15:40:54+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131\",\"datePublished\":\"2025-11-05T15:40:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/\"},\"wordCount\":2886,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/\",\"name\":\"Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-05T15:40:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/","og_locale":"tr_TR","og_type":"article","og_title":"Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131","og_description":"Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131 Giri\u015f: SQLite Nedir ve Neden \u00d6nemlidir? G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, veritaban","og_url":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-05T15:40:54+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131","datePublished":"2025-11-05T15:40:54+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/"},"wordCount":2886,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/","url":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/","name":"Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-05T15:40:54+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-sqlite-kurulumu-ve-kullanimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ubuntu 20.04 \u00dczerinde SQLite Kurulumu ve Kullan\u0131m\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33672","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33672"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33672\/revisions"}],"predecessor-version":[{"id":33673,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33672\/revisions\/33673"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33672"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33672"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}