MySQL’e Giriş
Önceki PHP ve MySQL ile Web Programlama Sonraki
MySQL’e Giriş
PHP, MySQL dışında birçok veritabanı yazılımı (PostgreSQL, MsSQL, Oracle, dBase...) ile birlikte sorunsuz çalışabilmesine rağmen en yüksek performans PHP+MySQL+Apache üçlüsünden elde edilmiştir (Bu belgeyi hazırladığım sırada Slackware Linux’un son sürümü olan 8.0 sürümünde PHP ile MySQL desteği gelmektedir, 7.1 sürümünde MySQL yerine PostgreSQL bulunmaktaydı!). Zaten Internet üzerinde bulabileceğiniz hazır PHP betikleri ya da yardım belgelerinin çoğu PHP’yi MySQL ile birlikte ele almaktadır. Benim bilgimde sadece MySQL dahilinde olduğu için, ben de bu belgede PHP+MySQL ikilisini anlatacağım.
Veritabanı Nedir?
Bir veritabanı adından da anlaşılacağı gibi bilgilerin depolandığı hiyerarşik bir yapıdır. Biz web üzerinde kullanıcı adı, şifresi, e-posta adresi gibi bilgileri bu veritabanlarında saklarız. Aynı bilgileri bir dosyaya yazıp gerektiğinde dosyayı açıp bilgileri okutmak da bir çözüm gibi görünse de bu işlem hem daha karmaşık ve zahmetli hem de daha yavaştır. Aslında az çok İngilizce bilen birisi için MySQL kullanmak pek zor olmayacaktır. Ben denemelerimi Linux altında yaptığım için bu belgede de anlatım o doğrultuda olacaktır. Fakat veritabanına bağlandıktan sonra SQL komutları (evet MySQL değil SQL. MySQL ile kullanılan komutlar birçok veritabanı sorgulama dilindekilerle aynıdır) arasında bir fark yoktur. Sadece Linux işletim sistemi altında büyük-küçük harf ayrımı vardır. Denemelerinizi yaptığınız sunucu üzerinde kullanıcı adınızın kullanici ve parolanızın parola olduğunu varsayarak bölüme başlıyorum. Veritanına bir Linux terminalinden bağlanmak için
$ mysql –h localhost –u kullanici –p
komut satırını kullanmanız gerekli. En sondaki -p parametresi bizim kullanıcımız için bir parola tanımlı olduğunu ve yukarıdaki komutu verdikten sonra bu parolayı girmemiz gerektiğini anlatır.
Eğer bir sorun ile karşılaşmadan veritabanına bağlanabildiyseniz karşınıza aşağıdaki gibi bir ekran gelecektir.
mysql>
Bu ekran bizim SQL’e doğru bir şekilde bağlandığımızı gösterir. Bir veritabanı hiyerarşisi içinde barındırdığı veritabanlarından ve bu veritabalarının içlerindeki tablolardan oluşur. Linux altındaki MySQL kurulumlarında “test” ve “mysql” isimli veritabanları hazır olarak gelir. Bir veritabanı hiyerarşisinde her kullanıcının kendine ait bir veritabanı vardır ve işlemlerini bu veritabanı altında gerçekleştirir. Yani kendi veritabanı altında tablo oluşturabilir, silebilir, tabloya bilgi ekleyip bilgi çıkarabilir. Bunun dışında her kurulum ile gelen “test” veritabanı tüm kullanıcıların kullanımına açıktır, “mysql” veritabanında ise kullanıcılara ait bilgiler tutulur ve bu veritabanını sadece veritabanı yöneticisi kullanabilir. Benim işlemlerimi yapacağım hayali veritabınımın ismi “base” olacak.
$ mysql -h localhost -u kullanici -p
Enter Password:

mysql> show databases;

+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.00 sec)

mysql>
Yukarıda sistemimizde mevcut veritabanlarını listesini show databases; komutu ile alıyoruz. MySQL’de her komuttan sonra mutlaka ; karakteri kullanılmalıdır. Aşağıda yeni bir veritabanı oluşturuyor ve onu kullanmaya başlıyorum.
mysql> create database base;

mysql> show databases;

+----------+
| Database |
+----------+
| mysql    |
| test     |
| base     |
+----------+
3 rows in set (0.00 sec)

mysql> use base;

Database changed
mysql>
Yukarıda base adlı bir veritabanı oluşturdum (create database base;) ve use base; komutu ile işlem yapacağım veritabanını belirledim. Burada dikkat edilmesi gereken husus bizim istediğimiz zaman bir veritabanı oluşturamayacağımızdır. Veritabanı hiyeraşisine kaydımız yapılırken bize kullanım hakkı verilen veritabanını oluşturabilir ve kullanabiliriz. Yani ben kullanici kullanıcısıyla herhangi adlı bir veritabanı oluşturamam.
MySQL’de Tablolar
Bilgilerimizi saklamak için veritabanlarını kullandığımızı daha önce belirtmiştim. Sakladığımız bilgileri daha kolay bir şekilde işleyebilmek için sınıflandırmamız gerekir. Bu sınıflandırma işlemi için tabloları kullanırız. Tablolar sütunlar ve satırlardan oluşur. Aşağıda veritabanında kayıtlı “kullanicilar” isimli bir tablo görünüyor (Tabloların nasıl oluşturulacağını ilerideki bölümlerde aklayacağım).
mysql> 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)

mysql>
Yukarıdaki tabloda dört sütun ve dört satır var. Tablodaki verileri ekrana basmak için select * from kullanicilar; komutunu kullandım. Aynı komutu select Ad from kullanicilar; şeklinde verince
mysql> select Ad from kullanicilar;

+--------------+
| Ad           |
+--------------+
| Fehmi Noyan  |
| Mehmet       |
| Adem         |
| Seckin Fatih |
+--------------+
4 rows in set (0.03 sec)

mysql>
Yukarıdaki gibi bir tablo elde ederiz. MySQL ile MS-DOS ve UNIX işletim sistemlerinde olduğu gibi joker karakterler kullanılabilir. İlk komut satırında kullandığım “*” karakteri de bu joker karakterlere bir örnek. İlk tablodaki no, Ad, Soyad ve eposta adlı bölümler tablonun sütunlarının isimlerini gösterir. Komut satırında kullandığım “*” karakteri bu sütunların hepsinin görüntülenmesini istediğimi belirtir. Aslında daha önceden komut satırından işlem yönetenler için fazla yabancı bir ifade olmasa da ilk kez karşılaşacaklar için biraz karışıktır fakat zamanla kavranacaktır. Kısacası veritabanından bilgi almak için
  select istenen_bilgi from tablo_adı;
gibi bir kalıp kullanılır. Veritabanından alınan sorgu belli koşulları gerektirebilir. Mesela yukarıdaki kullanicilar adlı tabloda ismi Mehmet olan kullanıcıları ekrana görüntülemek istersem
mysql> select Ad from kullanicilar where Ad=’Mehmet’;
gibi bir komut kullanmam gerekirdi.
Örnekleri çoğaltmak mümkün. Yapılan sorgu isteğe ve gereksinime göre değişik koşullar dahilinde gerçekleştirilebilir. where kalıbı ile olmasını istediğimiz bir özelliği belirtiyoruz. Peki elimizdeki verilerde olmasını istemediğimiz bir bilgiyi nasıl belirteceğiz? Bu iş için not kalıbı kullanılır.
mysql> select eposta from kullanicilar where not bolum=’pe’;
Yukarıdaki sorgu kalıbı kullanicilar adlı tablodan bolum bilgisi pe olmayan tüm kullanıcıların e-posta adreslerini ekrana basacaktır. not kalıbı ile or kalıbı da kullanılır. or kalıbı çift istekli durumlarda not işleçinin tam tersi işlev görür. Yani kullanicilar adlı tablodan Ad bilgisi Mehmet olan ve bölümü eee olmayan kullanıcıların listesi için kullanılması gereken SQL komutu aşağıdaki gibidir.
mysql> select Ad from kullanicilar where not bolum=’pe’ or Ad=’Mehmet’;
Buraya kadar hep tablolar üzerinde işlemlerden bahsettim. Sıra üzerinde işlem yaptığımız bu tabloları nasıl oluşturduğumuza geldi.
SQL’de tablo oluşturma işi aynen veritabanı oluşturma gibidir. Sadece tablo oluştururken tabloda tanımlı alanların özelliklerinin belirtilmesi gerekir. Yukarıda tüm örneklerimde kullandığım kullanicilar adlı tabloyu oluşturmak için kullanılacak SQL satırı aşağıdaki gibidir.
mysql> create table kullanicilar
->(no int auto_increment, Ad varchar(13), Soyad varchar(12),
-> eposta varchar(25), bolum varchar(5), primary key(no));

mysql>
Tabloda kullanılan sütunların veri tiplerini ve en fazla kaç baytlık veri saklayabileceklerini belirttim. int terimi kullanılacak verinin sayısal bir değer olacağını simgeler, diğer sütunlar için kullandığım varchar terimi ise girilecek dizinin karakter kümesi olduğunu ve parantez içindeki sayısal değer ise bu kümenin maksimum alabileceği karakter sayısını belirler. Eğer girilen veri belirtilen maksimum değerden fazla ise belirtilen değer kadar karakter işleme alınır. Bunun için tablo oluştururken girilecek verilerin uzunluğunu göz önünde bulundurmanızda fayda vardır. Bunların dışında -> karakteri de dikkatinizi çekmiştir. SQL’de bir komutu ; ile sonlandırmadığınız sürece o komut ENTER tuşun bassanız bile bitmiş sayılmaz ve sizden bitirici karakteri (“;” ya da \g) girmeniz beklenir. Komutu üç satır halinde yazmamın sebebi sadece uzun ve karmaşık bir satır yazmaktan kaçınmak içindi. Aynı komutu tek satır yazmanız halinde de sonuçta herhangi bir değişiklik olmayacaktır. no sütunu için kullandığım auto_increment ve en sonda kullandığım primary key(no) kalıpları tabloda no ile belirtilen kısmın otomatik olarak her veri girdiğinde bir arttırılmasını sağlar. Bu özelliğin kullanılabilmesi için kullanılacak sütuna primary key özelliğinin atanması gerekir.
Diyelim ki tablomuzu oluşturduk ve web üzerinden bilgilerimizi kaydediyoruz. Bir gün, tablomuzu oluştururken kullandığımız sütun özelliklerini görmek istersek ne yapacağız? Bunun için describe komutu kullanılır. Komutun kullanımı
  describe tablo_adi;
şeklindedir.
Şimdi sıra boş olarak oluşturduğumuz kullanicilar adlı tabloya bilgi girişinde. Bilgi girişi için insert komutu kullanılır.
mysql> insert into kullanicilar
-> values (“”,”Fehmi Noyan”,”ISI”,
-> “fni18444@gantep.edu.tr”,”eee”);
Yukarıdaki komut kümesi kullanicilar adlı tabloya belirtilen bilgileri sırası ile girer. Bilgi girişi için
  insert into tablo_adi values ("alan1_değeri", "alan2_değeri", ..., "alanN_değeri");
kalıbı kullanılır. İlk sütuna gelecek bolume sadece “” karakterlerini bırakmam bu bölümün auto_increment özelliğinden dolayı SQL tarafından otomatik olarak doldurulacak olmasındandır. Girilen her değer tırnak içinde yazılır ve birbirlerinden virgül ile ayrılır.
Bazen bir tablodaki verileri herhangi bir sebepten dolayı yenilememiz gerekebilir. Mesela yukarıdaki tabloda Fehmi Noyan adlı kullanıcının e-posta adresi değişmişse ve biz yeni adresi tablomuzda eski adresle değiştirmek istiyorsak kullanacağımız komut update komutudur.
mysql> update kullanicilar set eposta=’yeni_adresim@adres.com’
    -> where no=’1’;
Yukarıdaki SQL satırı kullanicilar adlı tablodan no bilgisi 1 olan kullanıcının eposta bilgisini yeni_adresim@adres.com olarak değiştirilmesi için kullanılır. Komutun kullanımında
  update tablo_adı set sütun_adı=’yeni değer’ where koşul;
kalıbı uygulanır. where koşulundan sonra herhangi bir koşul satırı kullanılabilir (ben no bilgisini kullandım).
Girilen bilgileri silmek için delete komutu kullanılır.
mysql> delete from kullanicilar where bolum=’eee’;
Yukarıdaki SQL komutu kullanicilar tablosundaki bolum bilgisi eee olan tüm kullanıcılar ile ilgili satırları silecektir. Komutun kullanımı
  delete from tablo_adı where koşul;
şeklindedir.
Son olarak da, MySQL’den çıkış için quit komutu kullanılır.
MySQL hakkında yazacaklarım bu kadar. Tabi benim bu belgeye dahil etmediğim daha birçok komut ve kullanım mevcut. Fakat ben bir sonraki bölümde PHP ile tablo işlemlerinde genelde bu komutları (bilgi ekleme, bilgi silme, bilgi alma ve bilgi yenileme) kullanacağım için sadece gerekli komutları verdim. Tabii yapacağınız çalışmanın amacına göre kullanacağınız veritabanlarının niteliği farklı olacaktır ama buradaki bilgilerin, en azından, MySQL hakkında hiç bilgisi olmayan bir kullanıcı için yaralı olabileceğini düşünüyorum.
Önceki Üst Ana Başlık Sonraki
PHP'ye Giriş Başlangıç PHP ile MySQL kullanmak
Bir Linux Kitaplığı Sayfası