MultiServis.Net //PHP El Kitabı

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>

PHP ve Veritabani Baglantilari - BOLUM 3 Yazar: Serkan Tarih: 01/03/02

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

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>