SQL Yapisal Sorgulama
Diline Giris - Bolum 1
SQL veya tam acilimi Structured Query Language,
iliskisel veritabani yonetim sistemleri ile, iletisime gecmek
icin kullanilan komut setlerinin tamamina verilen isimdir.
Veritabani veya tablo yaratilmasi, kayit etme veya silme islemleri
gibi butun veritabani gorevleri verilen SQL yapilari ile gerceklestirilir.
SQL'in yerine getirdigi islemlerin bazi veritabani sistemlerinde
farklilik gostermesi,o veritabani yonetim sistemini tasarlayan
yazilim sirketinden kaynaklanmaktadir.Temel fonksiyonlari
yerine getiren komut yapilari her zaman icin kalici ve butun
SQL veritabanlarinda aynidir.
SQL yapisal sorgulama diline giris bolumunde temel SQL yapilarini,
veri tiplerini, indeksleri, anahtarlari ve sorgulari gorecegiz.
Veri Tipleri :
Bir veritabani toblosu yarattiginiz zaman, tabloda yer alan
her alanin depolayacagi veri tipini ve boyutunu
(veri uzunlugunu) onceden belirlemeniz gerekmektedir.
Tablo alanlari PHP deki degiskenlere benzetilebilir.Buna tek
istisna bu alanlarin depolayacagi veri tipinin daha onceden
tanimlanmis tipte ve daha onceden tanimlanan veri uzunlugunda
olmasi gerekliligidir.PHP degiskenlerinde oldugu gibi burada
veritabani toblolarinin icindeki alanlara daha onceden ornegin
sayisal (numerik) tanimladiginiz bir alana duz yazi (string)
veri tipinde bir veri kesinlikle giremezsiniz.
Baslica 'uc' ana veri tipi MySQL veritabani tarafindan desteklenmektedir.
Bunlar : sayisal veri tipi , tarih/saat veri tipi ve karekter
veri tipidir.
Simdi bu uc ana grubun altinda yer alan alt gruplari inceleyelim.
Sayisal Veri Tipleri :
Veri Tipleri Aciklama Alabilecegi Aralik / Bicim
INT Normal boyutlu tamsayi (-231 den 231-1), veya (0 dan 232-1
e kadar)
TINYINT Cok kucuk boyutlu tamsayi (-27 den 27-1), veya (0
dan 28-1 e kadar)
SMALLINT Kucuk tamsayi (-215 den 215-1), veya (0 dan 28-1
e kadar)
MEDIUMINT Orta boyutta tamsayi (-223 den 223-1), veya (0 dan
224-1 e kadar)
BIGINT Genis boyutta tam sayi (-263 den 263-1), veya (0 dan
264-1 e kadar)
FLOAT Tek hassasiyetli kayan nokta +- 1.176x10-38 den +-3.403x1038
DOUBLE/REAL Cift hassasiyetli kayan nokta +-2.225x10-308 den
+-1.798x10308
DECIMAL Float, duz yazi olarak saklaniyor. DOUBLE ile sinirlari
ayni.
Tarih / Zaman Veri Tipleri :
Veri Tipleri Aciklama Alabilecegi Aralik / Bicim
DATE Bir tarih YYYY-AA-GG biciminde.1000-01-01 den 9999-12-31
e
DATETIME Bir tarih ve zaman YYYY-AA-GG ss:dd:ss biciminde.
1000-01-01 den 9999-12-31 23:59:59 kadar
TIMESTAMP Bir zaman damgasi YYYYAAGGssddss biciminde.19700101000000
dan 2037 yilina kadar.
TIME Bir zaman ss:dd:ss biciminde 838:59:59 dan 838:59:59
a kadar
YEAR Bir yil YYYY biciminde. 1900 den 2155 yilina kadar.
Karekter Veri Tipleri
Veri Tipleri Aciklama Alabilecegi Aralik / Bicim
CHAR Sabit uzunluklu string 0-255 karekter
VARCHAR Degisken uzunluklu string 0-255 Karekter
BLOB Binary genis nesne Binary veri 0-65535 byte uzunlukta
TINYBLOB Kucuk BLOB degeri Binary veri 0-255 byte uzunlukta
MEDIUMBLOB Orta boyutlu BLOB degeri Binary veri 0-16777215
byte
LONGBLOB Genis BLOB degeri Binary veri 0-4294967295 byte
TEXT Normal boyutlu yazi 0-65535 byte
TINYTEXT Kucuk boyutlu yazi alani 0-255 byte
MEDIUMTEXT Orta boyutlu yazi 0-16777215 byte
LONGTEXT Uzun boyutlu yazi 0-4294967295 byte
ENUM Siralamak Sutun degerleri listeden alinan bir deger olmalidir.
SET Degeri(leri) ayarla Sutun degerleri sifir veya listeden
alinan degerlerdir.
Not : CHAR ile VARCHAR arasindaki fark birinin sabit uzunlukta
olarak veriyi kaydetmesidir.Bunun anlami sudur, veritabanindaki
tabloya giren veri belirtilen sabit uzunlugun altindaysa bile
sen onu sana verdigim uzunlukla kaydet
Ornek vermek gerekirse :
char_alani : "serkan_____" //Bes tane bosluk sag tarafta
yer aliyor.
varchar_alani : "serkan" //Hic bosluk olmadan veritabaninda
sakliyor.
Varchar olarak alanlari tanimlamak goruldugu uzere bir miktar
disk alanini da kazanmanizi saglayacaktir.Bununla beraber
bazi performans hatirlatmalarini yeri gelmisken yapalim:
Her zaman icin CHAR tpinde saklanan verilerle MySQL daha hizli
calisacaktir.Bunun sebebi zaten uzunlugun her sart altinda
sabit kalmasidir.
Devamli olarak ayni veya benzer boyutlarda veri ile calisiyorsaniz
CHAR veri tipi mutlaka kullanilmalidir.
VARCHAR veri tipinde ek bir byte veri fazladan saklanir.Bu
bazen yukarida belirtilen disk alani kazanma avantajini irtadan
kaldirabilir.
Son olarak onemli bir notu eleyerek bu veri tipini aciklamaya
son verelim.
Eger tablonuz en az bir adet VARCHAR tipinde veri alani iceriyorsa
tablonun geri kalan butun karekter alanlari VARCHAR olacaktir.
Siz tersini isteseniz de yapmaya, calissaniz da sonuc degismez.
Indeksler ve Anahtarlar :
Bazi tecrubesiz veritabani tasarimcilari hazirladiklari veritabaninin
yavas olmasindan sikayet ederler. Bu problem genelde indeks'in
olmadigi durumlarda ortaya cikar. Indeks aslinda secilen alan(lar)in
ayri olarak siralanmasidir.Bir tabloya indeks eklendigi zaman
artan performansi, ancak indeks eklenmeden onceki olan olaylari
ayrintili anlatarak aciklayabiliriz.Simdi dusunelim bir tablo
temel olarak bir duz yazi dosyasi gibidir.Indeksleme yapilmadgi
zaman veritabani motoru tablonun icindeki verileri sirayla
arayacaktir.Satirlar belirli bir emre gore yerlestirilmeyecektir.Sunucu
butun verileri keyfi olarak tabloya ekleyecektir.Veritabani
motoru biz bir kayidi aramak istedigimizde dogal olarak -en
dogru sonuc icin- tablodaki butun satirlari teker teker kontrol
edecektir.
Simdide indekslenmis bir tablo dusunelim.Bu durumda veritabani
sunucusunun motoru istedigimiz kayitlari indekslere gore kontrol
edip bize daha hizli ulastiracaktir.Indeks veilerin sirali
listesi oldugu icin cok hizli olark sonucun donmesi normaldir.Butun
tablonun taranmasi gerekli degldir.ilgili kayitlar bulundugu
zaman cok cabuk olarak gerekli veri programa dondurulur.
Neden tablonun kendisini siralamiyoruz? Bu , pratikte bir
kac tane alan varsa mumkundur.Tabloyu bir kac alana gore bir
defada siralamak mumkun degildir.Bu nedenle en guzel cozum
tablodan ayri olan indeksler kullanmaktir.
Bu makale ayni zamanda Word (doc) formatinda da kullanima
sunulmustur...
http://www.turk-php.com/ornekler/sql_bolum1.doc
Kendinize iyi bakin,
Serkan Hadi Ceylani
serkan@turk-php.com
|