MySQL'e Giris Veritabani Nedir? Bir veritabani adindan da anlasilacagi gibi bilgilerin depolandigi hiyerarsik bir yapidir. Biz web uzerinde kullanici adi, sifresi, e-posta adresi gibi bilgileri bu veritabanlarinda saklariz. Ayni bilgileri bir dosyaya yazip gerektiginde dosyayi acip bilgileri okutmak da bir cozum gibi gorunse de bu islem hem daha karmasik ve zahmetli hem de daha yavastir. Aslinda az cok Ingilizce bilen birisi icin MySQL kullanmak pek zor olmayacaktir. Ben denemelerimi Linux altinda yaptigim icin bu belgede de anlatim o dogrultuda olacaktir. Fakat veritabanina baglandiktan sonra SQL komutlari (evet MySQL degil SQL. MySQL ile kullanilan komutlar bircok veritabani sorgulama dilindekilerle aynidir) arasinda bir fark yoktur. Sadece Linux isletim sistemi altinda buyuk-kucuk harf ayrimi vardir. Denemelerinizi yaptiginiz sunucu uzerinde kullanici adinizin kullanici ve parolanizin parola oldugunu varsayarak bolume basliyorum. Veritanina bir Linux terminalinden baglanmak icin $ mysql h localhost u kullanici p komut satirini kullanmaniz gerekli. En sondaki -p parametresi bizim kullanicimiz icin bir parola tanimli oldugunu ve yukaridaki komutu verdikten sonra bu parolayi girmemiz gerektigini anlatir. Eger bir sorun ile karsilasmadan veritabanina baglanabildiyseniz karsiniza asagidaki gibi bir ekran gelecektir. Bu ekran bizim SQL e dogru bir sekilde baglandigimizi gosterir. Bir veritabani hiyerarsisi icinde barindirdigi veritabanlarindan ve bu veritabalarinin iclerindeki tablolardan olusur. Linux altindaki MySQL kurulumlarinda test ve mysql isimli veritabanlari hazir olarak gelir. Bir veritabani hiyerarsisinde her kullanicinin kendine ait bir veritabani vardir ve islemlerini bu veritabani altinda gerceklestirir. Yani kendi veritabani altinda tablo olusturabilir, silebilir, tabloya bilgi ekleyip bilgi cikarabilir. Bunun disinda her kurulum ile gelen test veritabani tum kullanicilarin kullanimina aciktir, mysql veritabaninda ise kullanicilara ait bilgiler tutulur ve bu veritabanini sadece veritabani yoneticisi kullanabilir. Benim islemlerimi yapacagim hayali veritabinimin ismi base olacak. 1/6
$ mysql -h localhost -u kullanici -p Enter Password: show databases; Database mysql test 2 rows in set (0.00 sec) Yukarida sistemimizde mevcut veritabanlarini listesini show databases; komutu ile aliyoruz. MySQL de her komuttan sonra mutlaka ; karakteri kullanilmalidir. Asagida yeni bir veritabani olusturuyor ve onu kullanmaya basliyorum. create database base; show databases; Database mysql test base 3 rows in set (0.00 sec) use base; Database changed Yukarida base adli bir veritabani olusturdum (create database base;) ve use base; komutu ile islem yapacagim veritabanini belirledim. Burada dikkat edilmesi gereken husus bizim istedigimiz zaman bir veritabani olusturamayacagimizdir. Veritabani hiyerasisine kaydimiz yapilirken bize kullanim hakki verilen veritabanini olusturabilir ve kullanabiliriz. Yani ben kullanici kullanicisiyla herhangi adli bir veritabani olusturamam. MySQL de Tablolar 2/6
Bilgilerimizi saklamak icin veritabanlarini kullandigimizi daha once belirtmistim. Sakladigimiz bilgileri daha kolay bir sekilde isleyebilmek icin siniflandirmamiz gerekir. Bu siniflandirma islemi icin tablolari kullaniriz. Tablolar sutunlar ve satirlardan olusur. Asagida veritabaninda kayitli kullanicilar isimli bir tablo gorunuyor (Tablolarin nasil olusturulacagini ilerideki bolumlerde aklayacagim). select * from kullanicilar; +----+--------------+---------+------------------------+-------+ no Ad Soyad eposta bolum +----+--------------+---------+------------------------+-------+ 1 Fehmi Noyan ISI fni18444@gantep.edu.tr eee 2 Mehmet Korkmaz kormkaz@linux.org.tr pe 3 Adem Sarnici a_sarnici@yahoo.com pe 4 Seckin Fatih Solgun sf_solgun@freebsd.org me +----+--------------+---------+------------------------+-------+ 4 rows in set (0.05 sec) Yukaridaki tabloda dort sutun ve dort satir var. Tablodaki verileri ekrana basmak icin select * from kullanicilar; komutunu kullandim. Ayni komutu select Ad from kullanicilar; seklinde verince select Ad from kullanicilar; +--------------+ Ad +--------------+ Fehmi Noyan Mehmet Adem Seckin Fatih +--------------+ 4 rows in set (0.03 sec) Yukaridaki gibi bir tablo elde ederiz. MySQL ile MS-DOS ve UNIX isletim sistemlerinde oldugu gibi joker karakterler kullanilabilir. Ilk komut satirinda kullandigim * karakteri de bu joker karakterlere bir ornek. Ilk tablodaki no, Ad, Soyad ve eposta adli bolumler tablonun sutunlarinin isimlerini gosterir. Komut satirinda kullandigim * karakteri bu sutunlarin hepsinin goruntulenmesini istedigimi belirtir. Aslinda daha onceden komut satirindan islem yonetenler icin fazla yabanci bir ifade olmasa da ilk kez karsilasacaklar icin biraz karisiktir fakat zamanla kavranacaktir. Kisacasi veritabanindan bilgi almak icin select istenen_bilgi from tablo_adi; gibi bir kalip kullanilir. Veritabanindan alinan sorgu belli kosullari gerektirebilir. Mesela yukaridaki 3/6
kullanicilar adli tabloda ismi Mehmet olan kullanicilari ekrana goruntulemek istersem select Ad from kullanicilar where Ad= Mehmet ; gibi bir komut kullanmam gerekirdi. Ornekleri cogaltmak mumkun. Yapilan sorgu istege ve gereksinime gore degisik kosullar dahilinde gerceklestirilebilir. where kalibi ile olmasini istedigimiz bir ozelligi belirtiyoruz. Peki elimizdeki verilerde olmasini istemedigimiz bir bilgiyi nasil belirtecegiz? Bu is icin not kalibi kullanilir. select eposta from kullanicilar where not bolum= pe ; Yukaridaki sorgu kalibi kullanicilar adli tablodan bolum bilgisi pe olmayan tum kullanicilarin e-posta adreslerini ekrana basacaktir. not kalibi ile or kalibi da kullanilir. or kalibi cift istekli durumlarda not islecinin tam tersi islev gorur. Yani kullanicilar adli tablodan Ad bilgisi Mehmet olan ve bolumu eee olmayan kullanicilarin listesi icin kullanilmasi gereken SQL komutu asagidaki gibidir. select Ad from kullanicilar where not bolum= pe or Ad= Mehmet ; Buraya kadar hep tablolar uzerinde islemlerden bahsettim. Sira uzerinde islem yaptigimiz bu tablolari nasil olusturdugumuza geldi. SQL de tablo olusturma isi aynen veritabani olusturma gibidir. Sadece tablo olustururken tabloda tanimli alanlarin ozelliklerinin belirtilmesi gerekir. Yukarida tum orneklerimde kullandigim kullanicilar adli tabloyu olusturmak icin kullanilacak SQL satiri asagidaki gibidir. create table kullanicilar ->(no int auto_increment, Ad varchar(13), Soyad varchar(12), -> eposta varchar(25), bolum varchar(5), primary key(no)); Tabloda kullanilan sutunlarin veri tiplerini ve en fazla kac baytlik veri saklayabileceklerini belirttim. int terimi kullanilacak verinin sayisal bir deger olacagini simgeler, diger sutunlar icin kullandigim varchar terimi ise girilecek dizinin karakter kumesi oldugunu ve parantez icindeki sayisal deger ise bu kumenin maksimum alabilecegi karakter sayisini belirler. Eger girilen veri belirtilen maksimum degerden fazla ise belirtilen deger kadar karakter isleme alinir. Bunun icin tablo olustururken girilecek verilerin uzunlugunu goz onunde bulundurmanizda fayda vardir. Bunlarin disinda -> karakteri de dikkatinizi cekmistir. SQL de bir komutu ; ile sonlandirmadiginiz surece o komut ENTER tusun bassaniz bile bitmis sayilmaz ve sizden bitirici karakteri ( ; ya da \g) girmeniz beklenir. Komutu uc satir halinde yazmamin sebebi sadece uzun ve karmasik bir satir yazmaktan kacinmak icindi. Ayni komutu tek satir yazmaniz halinde de sonucta herhangi bir degisiklik olmayacaktir. no sutunu icin kullandigim auto_increment ve en sonda kullandigim primary key(no) kaliplari tabloda no ile belirtilen kismin otomatik olarak her veri girdiginde bir arttirilmasini saglar. Bu ozelligin kullanilabilmesi icin kullanilacak sutuna primary key ozelliginin atanmasi gerekir. Diyelim ki tablomuzu olusturduk ve web uzerinden bilgilerimizi kaydediyoruz. Bir gun, tablomuzu olustururken 4/6
kullandigimiz sutun ozelliklerini gormek istersek ne yapacagiz? Bunun icin describe komutu kullanilir. Komutun kullanimi describe tablo_adi; seklindedir. Simdi sira bos olarak olusturdugumuz kullanicilar adli tabloya bilgi girisinde. Bilgi girisi icin insert komutu kullanilir. insert into kullanicilar -> values (, Fehmi Noyan, ISI, -> fni18444@gantep.edu.tr, eee ); Yukaridaki komut kumesi kullanicilar adli tabloya belirtilen bilgileri sirasi ile girer. Bilgi girisi icin insert into tablo_adi values ("alan1_degeri", "alan2_degeri",..., "alann_degeri"); kalibi kullanilir. Ilk sutuna gelecek bolume sadece karakterlerini birakmam bu bolumun auto_increment ozelliginden dolayi SQL tarafindan otomatik olarak doldurulacak olmasindandir. Girilen her deger tirnak icinde yazilir ve birbirlerinden virgul ile ayrilir. Bazen bir tablodaki verileri herhangi bir sebepten dolayi yenilememiz gerekebilir. Mesela yukaridaki tabloda Fehmi Noyan adli kullanicinin e-posta adresi degismisse ve biz yeni adresi tablomuzda eski adresle degistirmek istiyorsak kullanacagimiz komut update komutudur. update kullanicilar set eposta= yeni_adresim@adres.com -> where no= 1 ; Yukaridaki SQL satiri kullanicilar adli tablodan no bilgisi 1 olan kullanicinin eposta bilgisini yeni_adresim@adres.com olarak degistirilmesi icin kullanilir. Komutun kullaniminda update tablo_adi set sutun_adi= yeni deger where kosul; kalibi uygulanir. where kosulundan sonra herhangi bir kosul satiri kullanilabilir (ben no bilgisini kullandim). Girilen bilgileri silmek icin delete komutu kullanilir. delete from kullanicilar where bolum= eee ; Yukaridaki SQL komutu kullanicilar tablosundaki bolum bilgisi eee olan tum kullanicilar ile ilgili satirlari silecektir. Komutun kullanimi delete from tablo_adi where kosul; 5/6
seklindedir. Son olarak da, MySQL den cikis icin quit komutu kullanilir. MySQL hakkinda yazacaklarim bu kadar. Tabi benim bu belgeye dahil etmedigim daha bircok komut ve kullanim mevcut. Fakat ben bir sonraki bolumde PHP ile tablo islemlerinde genelde bu komutlari (bilgi ekleme, bilgi silme, bilgi alma ve bilgi yenileme) kullanacagim icin sadece gerekli komutlari verdim. Tabii yapacaginiz calismanin amacina gore kullanacaginiz veritabanlarinin niteligi farkli olacaktir ama buradaki bilgilerin, en azindan, MySQL hakkinda hic bilgisi olmayan bir kullanici icin yarali olabilecegini dusunuyorum. Kaynak Site: Ismail KIRBAS ile Web Sitesi Tasarimi http:// Belge Adresi: www.kirbas.com/index.php?id=153 6/6