2. Firebird Eğitimi
SQL dilinin temellerine geçmeden önce, okuyucuya SGBD Firebird'ü ve IB-Expert grafik istemcisini nasıl kuracağını anlatacağız.
2.1. Firebird'ü nereden bulabilirim?
Firebird'ün ana web sitesi [http://firebird.sourceforge.net/]'tir. İndirme sayfasında şu bağlantılar yer almaktadır (Nisan 2005):

Aşağıdaki öğeleri indireceksiniz:
Windows için SGBD | |
NET sürücüsüne başvurmadan SGBD'e erişim sağlayan .NET uygulamaları için bir sınıf kütüphanesi. | |
Firebird'ün ODBC sürücüsü |
Bu bileşenleri kurun. SGBD, içeriği aşağıdakine benzer bir klasöre kurulur:
![]() |
İkili dosyalar [bin] klasöründedir:
![]() |
SGBD dosyasını başlatmaya/durdurmaya yarar | |
veritabanlarını yönetmeye olanak tanıyan istemci |
Varsayılan olarak, SGBD yöneticisinin adı [SYSDBA] ve şifresi [masterkey]'tir. [Démarrer]'e aşağıdaki menüler eklenmiştir:

[Firebird Guardian] seçeneği, SGBD'i başlatmaya/durdurmaya yarar. Başlatıldıktan sonra, SGBD simgesi Windows görev çubuğunda kalır:
![]() |
[isql.exe] komut satırı istemcisi ile Firebird veritabanları oluşturmak ve kullanmak için, ürünle birlikte [doc] klasöründe bulunan belgeleri okumanız gerekir.
2.2. Firebird belgeleri
Firebird ve SQL diliyle ilgili belgeler, Firebird web sitesinde (Ocak 2006) bulunabilir:

Çeşitli kılavuzlar İngilizce olarak mevcuttur:
FB ile başlamak için | |
FB tarafından döndürülen hata kodlarını anlamak için |
SQL diline ilişkin eğitim kılavuzları da mevcuttur:

tabloların nasıl oluşturulacağını, hangi veri türlerinin kullanılabileceğini öğrenmek için... | |
Firebird ile SQL'i öğrenmek için referans kılavuzu |
Firebird ile çalışmanın ve SQL dilini öğrenmenin hızlı bir yolu, bir grafik istemci kullanmaktır. Bu tür bir istemci, bir sonraki paragrafta açıklanan IB-Expert'tir.
2.3. IB- Expert ile SGBD Firebird ile çalışmak
IB-Expert'in ana web sitesi [http://www.ibexpert.com/]'tir. İndirme sayfasında aşağıdaki bağlantılar bulunmaktadır:

Ücretsiz sürüm olan [Personal Edition]'i seçin. Bu sürüm indirilip kurulduktan sonra, aşağıdakine benzer bir klasör elde edersiniz:

Yürütülebilir dosya [ibexpert.exe]'tir. Normalde [Démarrer] menüsünde bir kısayol bulunur:

IBExpert başlatıldığında aşağıdaki pencere görüntülenir:

Bir veritabanı oluşturmak için [Database/Create Database] seçeneğini kullanalım:
[local] veya [remote] olabilir. Burada sunucumuz [IBExpert] ile aynı makinede bulunuyor. Bu nedenle [local]'i seçiyoruz | |
veritabanı dosyasını belirtmek için açılır menüdeki [dossier] türü düğmeyi kullanın. Firebird, tüm veritabanını tek bir dosyaya yerleştirir. Bu, Firebird’ün avantajlarından biridir. Veritabanını bir bilgisayardan diğerine, dosyayı basitçe kopyalayarak taşıyabilirsiniz. [.gdb] son eki otomatik olarak eklenir. | |
SYSDBA, mevcut Firebird dağıtımlarının varsayılan yöneticisidir | |
masterkey, mevcut Firebird dağıtımlarındaki SYSDBA yöneticisinin şifresidir | |
Kullanılacak lehçe SQL'tir | |
Bu kutucuk işaretlendiğinde, IBExpert, veritabanı oluşturulduktan sonra bu veritabanına bir bağlantı sunacaktır |
Oluşturma düğmesi [OK]'e tıkladığınızda aşağıdaki uyarıyı alırsanız:

bu, Firebird'ü başlatmadığınız anlamına gelir. Firebird'ü başlatın. Yeni bir pencere açılır:

Kullanılacak karakter ailesi. Yukarıdaki ekran görüntüsünde herhangi bir bilgi görünmese de, açılır listeden aksanlı Latin karakterlerin kullanılmasını sağlayan [ISO-8859-1] karakter ailesini seçmeniz önerilir. |
[IBExpert], Interbase'den türetilmiş çeşitli SGBD sürümlerini destekler. Yüklediğiniz Firebird sürümünü seçin: |
Bu yeni pencere [Register] tarafından onaylandıktan sonra şu sonuç elde edilir:

Oluşturulan veritabanına erişmek için bağlantısına çift tıklamanız yeterlidir. IBExpert, veritabanının özelliklerine erişim sağlayan bir ağaç yapısı gösterir:

2.4. Veri tablosu oluşturma
Bir tablo oluşturalım. [Tables]'e sağ tıklayıp (yukarıdaki pencereye bakın) [New Table] seçeneğini seçin. Tablo özelliklerini tanımlama penceresi açılır:
![]() |
Öncelikle, [1] giriş alanını kullanarak tabloya [ARTICLES] adını verelim:
![]() |
[2] giriş alanını kullanarak [ID] birincil anahtarını tanımlayalım:
![]() |
Bir alan, alanın üzerindeki [PK] (Birincil Anahtar) alanına çift tıklanarak birincil anahtar olarak belirlenir. [3]'in üstündeki düğmeyi kullanarak alanlar ekleyelim:

Tanımımızı "derlemedikçe" tablo oluşturulmaz. Tablonun tanımını tamamlamak için yukarıdaki [Compile] düğmesini kullanalım. IBExpert, tablonun oluşturulmasına yönelik SQL sorgularını hazırlar ve onay ister:

İlginç bir şekilde, IBExpert, çalıştırdığı SQL sorgularını görüntüler. Bu, hem SQL dilini hem de muhtemelen kullanılan özel SQL lehçesini öğrenmeye olanak tanır. [Commit] düğmesi, devam eden işlemi onaylamaya, [Rollback] düğmesi ise iptal etmeye yarar. Burada [Commit] ile işlemi kabul ediyoruz. Bu işlem tamamlandıktan sonra, IBExpert, oluşturulan tabloyu veritabanımızın dizin yapısına ekler:

Tabloya çift tıklayarak özelliklerine erişebiliriz:

[Constraints] paneli, tabloya yeni bütünlük kısıtlamaları eklememizi sağlar. Paneli açalım:

Oluşturduğumuz birincil anahtar kısıtlamasını burada görebiliriz. Başka kısıtlamalar da ekleyebiliriz:
- yabancı anahtarlar [Foreign Keys]
- alan bütünlüğü kısıtlamaları [Checks]
- alan benzersizlik kısıtlamaları [Uniques]
Şunu belirtelim:
- [ID, PRIX, STOCKACTUEL, STOKMINIMUM] alanlarının değeri >0 olmalıdır
- [NOM] alanı boş olmamalı ve benzersiz olmalıdır
[Checks] panelini açalım ve kısıtlamaların tanımlandığı alana sağ tıklayarak yeni bir kısıtlama ekleyelim:

İstenen kısıtlamaları tanımlayalım:

Yukarıda, [NOM<>''] kısıtlamasında tırnak işareti yerine iki apostrof kullanıldığına dikkat edin. Bu kısıtlamaları yukarıdaki [Compile] düğmesiyle derleyelim:

Burada da IBExpert, çalıştırdığı SQL sorgularını göstererek açıklayıcı bir yaklaşım sergiliyor. Şimdi, adın benzersiz olması gerektiğini belirtmek için [Constraints/Uniques] paneline geçelim. Bu, tabloda aynı adın iki kez bulunamayacağı anlamına gelir.

Kısıtlamayı tanımlayalım:

Ardından bunu derleyelim. Bu işlem tamamlandıktan sonra, [ARTICLES] tablosunun [DDL] (Veri Tanımlama Dili) panelini açalım:

Bu panel, tüm kısıtlamaları içeren tablonun oluşturulmasına ilişkin SQL kodunu gösterir. Bu kodu daha sonra tekrar çalıştırmak üzere bir komut dosyasına kaydedebiliriz:
SET SQL DIALECT 3;
SET NAMES NONE;
CREATE TABLE ARTICLES (
ID INTEGER NOT NULL,
NOM VARCHAR(20) NOT NULL,
PRIX DOUBLE PRECISION NOT NULL,
STOCKACTUEL INTEGER NOT NULL,
STOCKMINIMUM INTEGER NOT NULL
);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_ID check (ID>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_PRIX check (PRIX>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKACTUEL check (STOCKACTUEL>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKMINIMUM check (STOCKMINIMUM>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_NOM check (NOM<>'');
ALTER TABLE ARTICLES ADD CONSTRAINT UNQ_NOM UNIQUE (NOM);
ALTER TABLE ARTICLES ADD CONSTRAINT PK_ARTICLES PRIMARY KEY (ID);
2.5. Tabloya veri ekleme
Şimdi [ARTICLES] tablosuna veri girme zamanı. Bunun için [Data] panelini kullanalım:

Veriler, tablonun her satırındaki giriş alanlarına çift tıklanarak girilir. [+] düğmesi ile yeni bir satır eklenir, [-] düğmesi ile bir satır silinir. Bu işlemler, [Commit Transaction] düğmesi ile onaylanan bir işlem içinde gerçekleştirilir (yukarıya bakınız). Bu onay yapılmazsa veriler kaybolur.
2.6. SQL düzenleyicisi ([IB-Expert])
SQL dili (Yapısal Sorgu Dili), bir kullanıcının şunları yapmasına olanak tanır:
- depolayacağı veri türünü ve bu verilerin uyması gereken kısıtlamaları belirterek tablolar oluşturmak
- tablolara veri eklemek
- bazı verileri değiştirmek
- bazı verileri silmek
- bilgi elde etmek için içeriği değerlendirmek
- ...
IBExpert, kullanıcının 1'den 4'e kadar olan işlemleri grafiksel olarak gerçekleştirmesine olanak tanır. Bunu az önce gördük. Veritabanında her biri yüzlerce satır içeren çok sayıda tablo bulunduğunda, görsel olarak elde edilmesi zor bilgilere ihtiyaç duyulur. Örneğin, bir çevrimiçi mağazanın ayda binlerce alıcısı olduğunu varsayalım. Tüm satın alımlar bir veritabanına kaydedilir. Altı ay sonra, "X" adlı bir üründe bir kusur olduğu ortaya çıkar. Ürünü satın alan tüm kişilerle iletişime geçerek, ücretsiz değişim için ürünü iade etmelerini istemek istenir. Bu alıcıların adreslerini nasıl bulabiliriz?
- Tüm tabloları tek tek inceleyip bu alıcıları arayabiliriz. Bu işlem birkaç saat sürer.
- SQL komutunu vererek bu kişilerin listesini birkaç saniye içinde elde edebiliriz
SQL dili,
- tablolardaki veri miktarı fazla olduğunda
- birbiriyle ilişkili çok sayıda tablo olduğunda
- elde edilecek bilgi birden fazla tabloya dağılmışsa
- ...
Şimdi IBExpert'in SQL düzenleyicisini tanıtıyoruz. Bu düzenleyiciye [Tools/SQL Editor] veya [F12] seçeneği üzerinden erişilebilir:

Böylece, sorguları deneme imkanı sunan gelişmiş bir SQL sorgu düzenleyicisine erişebiliriz. Bir sorgu girelim:

Yukarıdaki [Execute] düğmesiyle SQL sorgusunu çalıştırıyoruz. Aşağıdaki sonucu elde ediyoruz:

Yukarıda, [Results] sekmesi, SQL [Select] emrinin sonuç tablosunu göstermektedir. Yeni bir SQL komutu vermek için, [Edit] sekmesine geri dönmeniz yeterlidir. Burada, daha önce çalıştırılmış olan SQL komutunu bulabilirsiniz.
![]()
Araç çubuğundaki birkaç düğme kullanışlıdır:
- [New Query] düğmesi, yeni bir SQL isteğine geçmenizi sağlar:

Böylece boş bir düzenleme sayfası açılır:

Böylece yeni bir komut olan SQL'i girebiliriz:

ve bunu çalıştırabiliriz:

[Edit] sekmesine geri dönelim. Verilen çeşitli SQL komutları, [IB-xpert] tarafından saklanır. [Previous Query] düğmesi, daha önce oluşturulan bir SQL emrine geri dönmenizi sağlar:

Böylece bir önceki talebe geri dönülür:

[Next Query] düğmesi ise bir sonraki SQL emrine geçilmesini sağlar:

Böylece, kaydedilmiş SQL siparişleri listesinde bir sonraki sipariş olan SQL'e ulaşırız:

[Delete Query] düğmesi, SQL emrini kaydedilmiş emir listesinden silmenizi sağlar:

[Clear Current Query] düğmesi, görüntülenen SQL emri için düzenleyicinin içeriğini silmenizi sağlar:

[Commit] düğmesi, veritabanında yapılan değişiklikleri kalıcı olarak kaydetmenizi sağlar:

[RollBack] düğmesi, son [Commit] işleminden bu yana veritabanında yapılan değişiklikleri geri almayı sağlar. Veritabanına bağlanıldığından beri herhangi bir [Commit] işlemi yapılmamışsa, bu bağlantıdan itibaren yapılan değişiklikler geri alınır.

Bir örnek verelim. Tabloya yeni bir satır ekleyelim:
![]()
SQL komutu çalıştırılır, ancak herhangi bir çıktı görüntülenmez. Ekleme işleminin gerçekleşip gerçekleşmediği bilinmez. Bunu öğrenmek için, [New Query] komutunun ardından SQL komutunu çalıştıralım:

[Execute] komutunda şu sonuç elde edilir:

Dolayısıyla satır başarıyla eklenmiştir. Şimdi tablonun içeriğini başka bir yolla inceleyelim. Veritabanı gezgininde [ARTICLES] tablosuna çift tıklayalım:

Aşağıdaki tablo karşımıza çıkıyor:

Yukarıdaki ok düğmesi, tabloyu yenilemeye yarar. Yenileme işleminden sonra yukarıdaki tablo değişmez. Sanki yeni satır eklenmemiş gibi bir izlenim ediniriz. SQL (F12) düzenleyicisine geri dönelim ve ardından [Commit] düğmesiyle gönderilen SQL emrini onaylayalım:

Bunu yaptıktan sonra, [ARTICLES] tablosuna geri dönelim. [Refresh] düğmesini kullansak bile hiçbir şeyin değişmediğini görebiliriz:

Yukarıda, [Fields] sekmesini açalım ve ardından [Data] sekmesine geri dönelim. Bu sefer eklenen satır doğru şekilde görünüyor:

Çeşitli SQL komutlarının yürütülmesi başladığında, düzenleyici veritabanında bir "işlem" açar. SQL komutlarıyla SQL düzenleyicisinde yapılan değişiklikler, yalnızca aynı SQL düzenleyicisinde kaldığımız sürece görünür olacaktır (birden fazla düzenleyici açılabilir). Sanki SQL düzenleyicisi gerçek veritabanı üzerinde değil de kendisine ait bir kopya üzerinde çalışıyormuş gibi görünür. Gerçekte işler tam olarak bu şekilde gerçekleşmez, ancak bu örnek işlem kavramını anlamamıza yardımcı olabilir. Bir işlem sırasında kopyada yapılan tüm değişiklikler, ancak bir [Commit Transaction] ile onaylandığında gerçek veritabanında görünür hale gelir. Bu noktada mevcut işlem sona erer ve yeni bir işlem başlar.
Bir işlem sırasında yapılan değişiklikler, [Rollback] adlı bir işlemle geri alınabilir. Şu deneyi yapalım. Aşağıdaki SQL komutuyla yeni bir işlem başlatalım (bunun için mevcut işlem üzerinde [Commit] komutunu çalıştırmak yeterlidir):

[ARTICLES] tablosundaki tüm satırları silen bu komutu çalıştıralım, ardından aşağıdaki yeni SQL komutunu çalıştıralım:

Şu sonucu elde ediyoruz:

Tüm satırlar silinmiştir. Bunun, [ARTICLES] tablosunun bir kopyası üzerinde yapıldığını hatırlayalım. Bunu doğrulamak için, aşağıdaki [ARTICLES] tablosuna çift tıklayalım:

ve [Data] sekmesini görüntüleyelim:

[Refresh] düğmesini kullansak veya [Fields] sekmesine geçip ardından [Data] sekmesine geri dönsek bile, yukarıdaki içerik değişmez. Bunun nedeni daha önce açıklanmıştı. Şu anda, kendi kopyası üzerinde çalışan başka bir işlem içindeyiz. Şimdi SQL (F12) düzenleyicisine geri dönelim ve [RollBack] düğmesini kullanarak yapılan satır silme işlemlerini geri alalım:

Onay isteniyor:

Onaylayalım. SQL düzenleyicisi, değişikliklerin geri alındığını onaylar:

Doğrulamak için yukarıdaki SQL isteğini tekrar çalıştıralım. Silinmiş olan satırları tekrar görüyoruz:

[Rollback] işlemi, SQL düzenleyicisinin üzerinde çalıştığı kopyayı, işlemin başlangıcındaki durumuna geri getirdi.





