Yasin DEMİR

#herseypaylasmakicin

————————————————————————————

MySQL için detay yapma zamanı…

————————————————————————————

VeriTabanı Nedir?

VeriTabanı uygulamaları olmadan bugün bilgisayarla neredeyse hiç birşey yapamayız. Neden mi? Bu sorunun cevabı Türk Dil Kurumu’nun Türkçe’ye kazandırdığı en iyi kelime olduğunu düşündüğüm Bilgisayar kelimesinde saklı. Bilgi, yani veri işliyor bilgisayar ve işleyeceği verinin de belli bir mantığa, düzene bağlı olması gerekiyor ki işleyebilsin. İşte bir mantığa dayanarak düzenli bir şekilde sakladığımız verilere bir VeriTabanı diyoruz.

Bir fikir vermek ve dikkatinizi çekmek için VeriTabanı uygulamalarının kullanıldığı bazı yerlere bir bakalım;

* İnternette (Webde)
* Üye kayıtlarını takip etmek için
* Herhangi bir e-ticaret uygulaması için
* CETURK gibi bir sistemin içeriğini saklamak için
* Daha da ileri bir basamak, bütün web sitesini saklamak için
* ICQ/Messenger benzeri programlarda arkadaş listesini saklamak için
* vs…
* LAN/WAN (Local Area Network/Wide Area Network)
* Bir domain için bu domaine bağlı kullanıcıların yetkileri vs’leri saklamak için
* e-mail vb sunucularda bilgileri saklamak için (email, log vs…)
* Güvenlik Duvar’larında (FIREWALL) kural listelerini saklamak için
* vs…
* Günlük hayattan
* Buzdolabında neler olduğunu takip etmek için yazdığımız program için
* Markette kasiyerin önündeki barkod aparatı için
* Oyunlardaki herşey için
* Winamp’ın playlisti için
* vs…

Yani bilgisayar dediğimiz olay aslında VeriTabanını temel alıyor. Teknolojiler devrimsel (yakın bir zamanda değineceğim: Quantum Bilgisayarları) boyutta değişse de VeriTabanından kurtulamayız.

Peki VeriTabanı işi için hangi dile ihtiyaç duyarım??? Hepsinde (yoksa bile kendiniz VeriTabanı olayını manuel olarak) yapabilirsiniz…

Mantığı nedir?

En basit haliyle;

Bir sürü bölmesi olan bir dolap düşün,
-Her bölmede karton dosyalar var,
–Dosyaların içinde de formlar var. Başvuru formları. Formlarda da
—Ad
—Soyad
—Doğum Tarihi
—Doğum Yeri
—Baba Adı
—Ana Adı
—Adres
—Telefon
gibi bilgiler var.

Şimdi biri geliyor ve biz ona boş bir başvuru formu dolduruyor, sonra da formu alıp dolaba karton dosyasıyla koyuyoruz…

İşte VeriTabanı mantığı budur. Nedir?

Ortak özelliklere sahip kayıtları gruplayıp bir yerde saklama işi veri yönetiminin temelidir.

Dolap VeriTabanımız
Başvuru Formları da Kayıtlarımız

Mantık bu basit ve anlaşılır. (Şimdilik :)

Tabanlar kaymıyor biraz daha yağlayalım.

Formu doldurup karton dosyaya koyup dolaba yerleştirmek bizi çok yorduğu ve ilgilenmemiz gereken başka işler olduğu için bir memur aldık işe, dolaptan sorumlu. Gelen başvuruları ona yönlendiriyoruz. O, başvuru formunu dolduruyor, biz onaylıyoruz. Sonra da karton dosyaya koyup dolaba alfabetik sırasına göre yerleştiriyor. Onun tek işi bu o yüzden ayrıntılara daha çok önem vermesi gerekiyor ki işinden olmasın (Bu iş dünyası ne de acımasız değil mi????) Sonra başvuruları değerlendirmek için çağırıyoruz memurumuzu, ona, atıyorum, “Mehmet Aca’nın başvurusunu getir” diyoruz, o da hemencecik yerini bulup karton dosyasından çıkarıp masamıza getiriyor…

Şimdi görüyorsunuz işimiz kolaylaştı ve daha önce bu işe ayıracak zamanımız da olmadığı için yapamadığımız alfabetik sıralama işini de yaptırıverdik. Çok daha zaman kazandırdı bize. Peki bunun anlamı bizler için ne olmalı???

Son duruma bakalım;

Dolap VeriTabanımız
Başvuru Formları da Kayıtlarımız
Memur VeriTabanı Yönetim Sistemimiz

Aha yeni bir kavram: VeriTabanı yönetim sistemi. Bu bizim için veri yönetimini yapan sistem. Yani Oracle, MySQL, MSSQL, Paradox, dBASE vs… Bizim için kayıtlarla ilgili işlemleri yapan sistem yani.

Hadi, yağlamaktan zarar gelmez, biraz daha…

Toplantılarımızdan birinde üyelerden biri: “Bugün Yaşı 25 Olan Kişilerin Başvurularını Değerlendirelim Sadece” dedi. Hemen memurumuzu çağırıyoruz. Ona “Yaşı 25 olan başvuruları getir” diyoruz. O da “Şu anda uzun sürer, teker teker kontrol etmem gerek” diyor. Haydaaa ben memuru bunun için mi tuttum??? “Olmadı şimdi” diyoruz memura. O da “Tamam bugünlük uzun sürer ama daha sonrakileri, nasıl isterseniz, anında getireceğim” diyor. Peki bu adam sihirbaz felan mı da numarası için çalışacak zaman istiyor?? “Nasıl olcak bu iş peki??” diyoruz. Cevap: “Ben isteyebileceğiniz kriterlere göre özel listeler hazırlayacağım ve o listeleri de dolabın kenarına asacağım, sonra siz istediğinizde de listeye bakıp hemen yerini bulup getireceğim.” Çook güzel. Bu işi sevdim ben. Bu memur işini hakkıyla yapıyor valla Helal!..

Hemen bir değerlendirelim:

Dolap VeriTabanımız
Başvuru Formları da Kayıtlarımız
Memur VeriTabanı Yönetim Sistemimiz
Kritere Göre Liste İndeksimiz

Evet görüyorsunuz, böylece aramaları hızlandırdık. VeriTabanı yönetim sistemimiz bizim istediğimiz kriterlere göre özel listeler hazırlıyor ve bunları bizim özel isteklerimizi de “şıp” diye getiriyor. İndex olayımız da böyleymiş…

Turbo Yağlayıcı : SQL nedir?

VeriTabanını mantıksal olarak anladık. Günümüz de bu işleri VetiTabanı yönetim sistemine yaptırmak için standartlaşmış olan SQL’i (Structured Query Language – Yapısal Sorgu Dili) kullanıyoruz. SQL çok basit bir dildir ama bugün SQL desteklemeyen VeriTabanı yönetim sistemleri iş bulamıyor ve rafa kaldırılıyorlar. SQL’in tarihçesinden bahsetmeyeceğim ama ben biraz nostalji olsun diye dBASE’den bahsedeyim biraz, 90′lı yıllarda dBASE ile ilk tanıştığım da bu salak şey ne demiştim kendi kendime. Ama öğrendikçe mükemmeliğini, kullanıcıya sunduğu kolaylıkları ve olanakları ile VeriTabanı yönetimine getirdiği harika boyutu gördüm. dBASE kendine özgü bir sorgu diline sahipti ve bunun üstüne kurulmuştu. Herneyse özüne geleyim işin, bugün kullandığımız/kullandığınız/kullandıkları o devasa veritabanlarının işçiliğini yapan SQL’in büyükbabası dBASE’in kendi sorgu dilidir…

Size tarih olmuş dBASE’i anlatmayacağım korkmayın :) SQL’i anlatacağım.

VeriTabanı ve tablolar:

SQL’e başlamadan önce tablo olayını anlamamız gerekiyor. Demek ki Turbo Yağlayıcı’dan önce biraz daha tereyağı sürmek lazım tabanlara…

Yine bir toplantımızda aldığımız karara göre çalışanlarımızın kayıtlarını dökümante edip saklayacağız. Bu iş için memurumuzu çağırıyoruz ve ona “Sen dolaptan sorumlu adamsın, dolaba farklı bilgileri koyacağız ama karışıklık olmasından korkuyoruz ne önerirsin?” diye soruyoruz. O da bu işin uzmanı ya hani hemen cevaplıyor: “Başvuruların hepsini aynı bölmede tutuyorum ve kriter listelerini de onun kapağında, ben yeni bilgileri için diğer bölmeyi kullanırım böylece karışıklık olmaz, onun kapağına da onun kriter listelerini koyarım.” Yahu bu memur canavar ya… Bu memur ne dersek yapıyor ya. Helal olsun vallaha…

Hemen değerlendirelim…

Dolap VeriTabanımız
Dolap Bölmeleri Tablolarımız
Memur SQL'ce konuşan VeriTabanı Yönetim Sistemi

İşte böylece ihtiyaçlarımızı da karşılayacak 2 ayrı tablomuz oldu. Yani VeriTabanı dediğimiz olay, belli amaca hizmet eden tabloları bir araya getiren bir olay. Bıçakta biraz daha tereyağı kalmış onu da sürelim sonra kaymaya başlıyoruz…

İşimiz iyice büyüdü. Bir sürü bilgimiz var, dolabımızı sürekli büyüttük, bir sürü bölmemiz oldu ve arşiv odamız da yer kalmadı. O zaman bir çözüm ararken bu işi yapan bir şirket bizi buldu. Bu şirket müşterilerinin kayıtlarını sınır tanımadan devasa antrepolarda saklıyorlar ve güvenlik de sağlıyorlar. Bu adamların dev dolapları var ve genişleyebiliyor da. Her müşterileri için bir dolap açıyorlar. Ve her dolap bir VeriTabanı oluyor…

İşte böyle… SQL’e geri dönelim o zaman:

SQL Nedir, N’apar??

Yapısal bir sorgu dilidir. ANSI standartlarındadır. VeriTabanına erişiminizi sağlar Sorgu cümlecikleri ile kayıt eklememizi/değiştirmenizi/silmenizi sağlar. Ve daha nicesi…

Herhangi bir SQL destekleyen VeriTabanı yönetim sistemi ile standart SQL cümleciklerini kullanabilirsiniz. Peki bu cümlecikler neymiş?

Bir tablo üzerindeki kayıtlara uygulanabilecek genel işlemler.

SELECT (seç)
UPDATE (güncelle)
INSERT (ekle)
DELETE (sil)

VeriTabanı yönetmek için uygulanabilecek işlemlerden birkaçı.

CREATE DATABASE (VeriTabanı yarat)
USE (VeriTabanı kullan)
CREATE TABLE (Tablo yarat)

İşe başlayalım:

CREATE DATABASE VeriTabani;

dedik, VeriTabani adında bir VeriTabanımız oldu. Hemen üzerinde işlem yapmak için VeriTabanımızı seçelim.

USE VeriTabani;

CREATE TABLE Kimlik ( Kod CHAR(8) NOT_NULL, Ad VARCHAR (30), SoyAd VARCHAR (30), Yas NUMERIC(2) UNSIGNED );

İşte artık tablomuz da oldu. Şimdi bu konuda biraz “Turbo Yağlama” yapalım??

( Kod CHAR(8) NOT_NULL, Ad VARCHAR (30), SoyAd VARCHAR (30), Yas NUMERIC(2) UNSIGNED )
ifadesi bizim tabloda barındıracağımız veri tiplerini belirliyor. Önce alan adını veriyoruz (mesela Ad), sonra bu alanın tipini belirliyoruz (VARCHAR) ve daha sonra da alanın uzunluğu söylüyoruz ( (30) ). Bir de eğer alanımız sayısal ise ve negatif değerlere ihtiyacımız yoksa UNSIGNED diyoruz, ha bir de boş değere izin vermeyeceksek de NOT_NULL dememiz lazım.

Peki alan tipleri neler olabilir: (Genel olarak)

INTEGER (boyut) (Sayısal) Rakam sayısını boyut ile belirliyoruz.
Integer Max 4 Byte veri saklar unutmayın! Yani (2^8)^4-1=4294967295 maximum değerdir.
Tabi + ve - değerleri de düşününce değerlerimiz de: -2147483648 ile 2147483647 arasında.
INT (boyut) (Sayısal) Integer ile aynı
SMALLINT (boyut) (Sayısal) Rakam sayısını boyut ile belirliyoruz.
Max 2 Byte veri saklar unutmayın! Yani (2^8)^2-1=65535 maximum değerdir.
Tabi + ve - hesaba girince de -32768 ile 32767 arasında.
TINYINT (boyut) (Sayısal) Rakam sayısını boyut ile belirliyoruz.
TinyInt Max 1 Byte veri saklar unutmayın! Yani (2^8)-1=255 maximum değerdir.
Tabi + ve - hesaba girince de -128 ile 127 arasında.
DECIMAL (boyut, ondalik) (Sayısal) Rakam sayısını boyut ile, virgüllü sayılarda virgülün yerini de ondalik ile belirliyoruz.
Max 4 Byte veri saklayabiliyorsunuz...
NUMERIC (boyut, ondalik) (Sayısal) Decimal ile aynı
CHAR (boyut) (AlfaSayısal) Karakter sayısını boyut ile belirliyoruz.
VARCHAR (boyut) (AlfaSayısal) Karakter sayısını boyut ile belirliyoruz.
CHAR'dan farkı boşlukları kaydetmiyor.
DATE (DDMMYYYY) (Tarihsel) Tarih formatını biz veriyoruz. D:Gün M:Ay Y:Yıl
TEXT (AlfaSayısal) Max 4Kbyte olmak üzere istediğimiz şeyi kaydedebiliyoruz.

Evet kısaca tiplerimiz de böyle. Şimdi tablomuz da var artık kayıt ekleyebiliriz.

INSERT INTO Kimlik SET Kod="20030001", Ad="N. Can", SoyAd="KIRIK", Yas=21;

İşte artık bir kaydımız var. Şimdi birkaç kayıt daha ekleyelim.

INSERT INTO Kimlik SET Kod="20030002", Ad="M. Onur", SoyAd="YALAZI", Yas=21;
INSERT INTO Kimlik SET Kod="20030003", Ad="Mehmet", SoyAd="ACA";

Böylece kayıtlarımızı tamamladık… Ama gördüğünüz gibi Mehmet’in kaydını girerken yaş değeri vermedik. NOT_NULL demediğimiz alanlara değer vermek zorunda değiliz. Bir diğer ayrıntı da, CHAR-VARCHAR-TEXT gibi AlfaSayısal değerler için tırnak (“) kullanmalı, Sayısal değerlerde içinse kullanmamalıyız.

Şimdi de kayıtlarımızı görelim:

SELECT * FROM Kimlik;

Bu bize bütün kayıtları, bütün alanlarıyla verecektir. Biz belli bir kayıta bakıyorsak ne yapacağız;

SELECT * FROM Kimlik WHERE Kod="20030001";

Bize kodu 20030001 olan kayıtı getirecek. Peki bütün alanları istemiyorsak ne yapacağız? Mesela sadece Ad ve SoyAd’ı göstersin:

SELECT Ad, SoyAd FROM Kimlik;

Bu da bize bütün kayıtları getirecek ama sadece Ad ve SoyAd alanlarıyla. Biraz farklı bir örnek daha yapalım.

SELECT * FROM Kimlik WHERE Kod LIKE "%2003%";

Haydaaaa! LIKE da neyin nesi şimdi??? LIKE aramalarda esnek davranabilmemizi sağlıyor. Örnekte Kod alanında 2003 geçenleri getirecek… LIKE’la ilgili başka bir örnek

SELECT * FROM Kimlik WHERE Kod LIKE "__0%";

Hmmm… _ işareti tek bir karakter için geçerli aynı DOS’taki ? gibi. DOS’taki ? SQL’de _, * da % olarak kullanılıyor. Yani sonucumuz 3. karakteri 0 olan bütün kayıtlar olacak.

Bir diğer SELECT örneği;

SELECT * FROM Kimlik WHERE Kod LIKE "%2003%" AND Yas>20;

Bu sorgu bize kodun da 2003 geçenleri ve yaşı 20′den büyük olan kayıtları getirecek. Evet… SELECT’e aşina olduk artık… Kayıtları nasıl değiştireceğiz peki???

UPDATE Kimlik SET Kod="20031001";

Aman haa!!! Dikkat edin buna!! Bu bütün kayıtların Kodlarını 20030001 yapacak. Peki biz nasıl sadece bir kayıtta yapacaz bunu?

UPDATE Kimlik SET Kod="20031001" WHERE Kod="20030001";

Böylece daha güvenilir oldu. Daha doğrusu daha kontrollü. Bakın SELECT’te kullandığımız WHERE için geçerli olan herşey UPDATE’te de geçerli…

UPDATE Kimlik SET Kod="20031001", Ad="Can" WHERE Kod="20030001";

Şimdi görüyorsunuz sadece Kod’u değil Ad’ı da değiştirdik. INSERT’te nasılsa burda da öyle. Peki gereksiz kayıtlar nolacak?

DELETE FROM Kimlik WHERE Kod="20030002";

Hmm… 20030002 kodlu kaydı sildik! Aman haa dikkat edin… Aman

DELETE FROM Kimlik;

Bu cümleciği yazarsanız bütün kayıtları silersiniz. Bundan dikkat….

Yasin DEMİR