Yeni Başlayanlar İçin MySQL
Yazımızda Linux gibi Unix tabanlı bir işletim sistemi
kullanıldığı varsayılmasına rağmen aşağı yukarı bütün
yazılanlar Windows sistemlerde de geçerlidir. Yazının
tamamını anlamak için az da olsa SQL(Structured Query
language) bilgisine gereksinim vardır. Gerekli olan
SQL statement' ları : insert into, select, delete ve
update' dir. Bunların haricinde gerekli olan temel
bilgilerden doküman içerisinde belirtilecektir.
Gerekli yazılımların kurulumu ve test edilmesi
MySQL veritabanı, GPL ile lisanslanmış ve ücretsiz
bir yazılımdır. İstediğiniz gibi kopyalayabilir,
yazılım geliştirmede istediğiniz şekilde
kullanabilirsiniz. MySQL' in resmi sitesi http://www.mysql.com
olup, en son versiyonuna yine buradan
erişilebilir. http://www.mysql.com/downloads/
adresinden yazilimi edindikten sıra MySQL' in
kurulumuna geldi.
- Windows kullanıcıları : MySQL' in Windows versiyonu her Windows yazılımı gibi bir setup programı ile birlikte gelir. Eğer konfigurasyon dosyaları ile uğraşmak ve istemci programı çalıştırdığınızda xxx portunda MySQL bulunamıyor gibi mesajlarla karşılaşmak istemiyorsanız kurulumu c:\MySQL dizinine yapmanızı tavsiye ederim.
- Debian GNU/Linux kullanıcıları : MySQL' in Debian' lar için hazırlanmış son sürümüne "apt-get install mysql-server mysql-client libmysqlclient10 mysql-common" komutunu vermeniz yeterlidir. Eğer makinenizde PHP ve MySQL iletişimi için gerekli modüller yüklü değilse apt-get satırına php-mysql' i de ekleyiniz.
- Red Hat Linux kullanıcıları : en son versiyon RPM dosyalarına yukarıda bahsi geçen URL' den erişebilirsiniz. Kurulum için rpm -i mysql-x.y.z.rpm komutunu vermeniz yeterlidir.
- Kaynak koddan derleyenler için : yukarıda bahsi geçen URL' den son versiyonu indirip beraberinde gelen INSTALL dosyasını okuyunuz.
MySQL' i sisteme kurduktan sonra test etmemiz gereklidir. komut satırından root kullanıcı olarak "mysql" komutunu verdiğinizde karşınıza :
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.23.39-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
yazan bir ekran çıkıp bir giriş yapmanız için
beklemesi gereklidir. Eğer Linux altında "bash:
mysql: command not found" çıktısını alıyorsanız
mysql-client programlarını makinenize yüklememişsiniz
demektir. Yine yukarıda bahsi geçen adresten
mysql-client paketini edinip sisteminize kurunuz.
Karşınıza yukarıdaki ekran çıktı ise hiç bir sorun
yoktur ve MySQL, sisteminiz üzerinde çalışmaya hazır
durumdadır. Hazır istemciyi açmışken bir iki komut
yazmış olalım diye aşağıdaki komutları sırası ile
verelim. Çıktıların ne manaya geldiklerini
önemesemeden sadece sistemin çalıştığını test etmeniz
şu aşama için yeterlidir.
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
12 rows in set (0.23 sec)
mysql>
yazdığımız komut bana sistemde yüklü olan
veritabanlarını göster anlamına gelmektedir.
Çıktısında ise iki tane veritabanı görünmekte, birisi
sistemi kullanmaya izinli kişileri, izinleri vb...
içeren mysql isimli veritabanı ve diğeri de yaz boz
tahtası olarak kullanmamız amaçlı gelen test isimli
veritabanı...
Şimdi test isimli veritabanını kullanmaya
başlayabiliriz.
mysql> use test;
Database changed
mysql> show tables;
Empty set (0.00 sec)
İlk olarak test veritabanını kullanacağımızı belirtip
ardından da show tables komutu ile bu veritabanının
içerisindeki tabloları bana göster dedik. Hali
hazırda hiç bir tablosu olmadığı için de bize Empty
set(boş küme) döndürdü.
Tablo ve veritabanı kavramları size uzak geliyorsa
bir veritabanı sistemi denildiğinde MySQL, Interbase,
Oracle, MS SQL gibi bir programı, veritabanı
denildiğinde dosya sistemlerindeki gibi bir
dizini(folder), tablo denildiğinde de dosya
sistemlerindeki dosyaları düşünebilirsiniz. Aynen bir
text (metin) dosyanın içerisini açıp da yazı yazar
gibi tabloların içerisine de kayıtlar girilir. Bu
kayıtlar aynen bir Excel dosyasındaki gibi satırlar
ve sütunlar ile organize edilmiş bir yapıya sahiptir.
Bu girilen kayıtlara bilgisayar terminolojisinde
record da denilir.
Eğer daha önce hiç veritabanı kullanmadıysanız, bir veritabanına neden gereksinim duyulduğunu merak ediyor olabilirsiniz. Çok çok kısa özetlemek gerekirse, bilgiye en hızlı şekilde ulaşmak, kolayca arama yapmak, organizasyonun otomatik sağlanması, kullanıcı bazlı haklar tanımlama olanakları ve kullanıcının muhatap olduğu yazılımı datadan ayırmak ve dolayısıyla ileride programa yapılacak eklentilerde yazılımın baştan yazılmasının engellenmesi olarak özetlenebilir. Eğer veritabanı kavramı halen bir şey ifade etmiyorsa bu konu ile ilgili bir kitap edinmenizi öneririm.
mysql komutunu vererek veritabanı istemcisine
bağlanırken ....
root@orion:~# mysql
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
şeklinde bir hata mesajı alırsanız MySQL sisteminde
root kullanıcının bir şifresi mevcut ve siz bu
şifreyi girmediniz demektir. Komutu şu şekilde
değiştirerek tekrar deneyiniz.
root@orion:~# mysql -u root -p
Enter password: (burada şifre giriliyor, ekrana bir çıktı gelmeyecektir)
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 3.23.39-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Yeni bir veritabanı yaratmak
Yeni bir veritabanı yaratmak için standart SQL
komutlarından faydalanıyoruz. Konsoldan "mysql"
komutunu vererek login olduktan sonra ...
mysql> create database hebelek;
Query OK, 1 row affected (0.00 sec)
ile yeni veritabanımızı yaratabiliriz.
Bir veritabanını silmek
mysql istemcisine bağlandıktan sonra drop database
komutu ile veritabanı ve içeriğindeki herşey, bütün
tablo ve veriler silinebilir. Bu komutu kullanırken
çok dikkatli olmalısınız, çünkü silinen verileri geri
getirmenin bir yolu yoktur.
mysql> drop database hebelek;
Query OK, 0 rows affected (0.00 sec)
Yeni bir tablo yaratmak
Bir veritabanı içerisinde yeni bir tablo yaratmadan
önce tablonun yapısını kafanızda oluşturmalısınız ve
olabildiğine efektif ve gelişmeye açık hale
getirmelisiniz. Bu işleme bilgisayar literatüründe
"normalizasyon" adı verilir. Normalizasyon kavramı
yazımızın amacını aşacağından dolayı bahsetmemiz
mümkün olmasa da bu konu hakkında ayrıntılı bir
doküman okumanızı tavsiye ediyorum. İyi tasarlanmış
bir veritabanı, tablo yapısı ileride doğması muhtemel
sorunları sıfıra indirmektedir. İyi programcı ile
kötü programcının farklarından bir tanesi de
budur.
MySQL standart SQL veritiplerinin yanında kendisine
has bazı veri tipleri de sunmaktadır. Aşağıda sık
kullanılan bazı veritiplerini bulabilirsiniz.
Ayrıntılı bir listesine MySQL' in ana sayfasından
erişilebilecek MySQL manual' den ulaşılabilir.
- date veri tipi, Örn : "2001-04-11"
- char(25) veri tipi, Örn : "To be or not to be"
- int veri tipi, Örn : 64000 , Sınır : -2147483648 ile 2147483647 arası
- tinyint veri tipi, örn : 210 , Sınır : -128 ile 127 arası
- bigint veri tipi, Örn : 987697697 , Sınır : -9223372036854775808 ile 9223372036854775807 arası
- blob veri tipi, içine binary veri veya herhangi bir şey atılabilir. , Sınır : 65535 karakter.
- longblob veri tipi, içine binary veri veya herhangi bir şey atılabilir., Sınır : 16M veri kaydedilebilir.
Şimdi yukarıdaki veritiplerinin karışımından oluşmuş bir tablo oluşturalım.
mysql> use hebelek;
Database changed
mysql> create table kullanicilar(
-> isim char(40),
-> soyisim char(40),
-> sicilno int,
-> dogumtarihi date,
-> adres char(255),
-> fotograf longblob);
Query OK, 0 rows affected (0.00 sec)
Yukarıdaki tablo içeriğindeki kayıtların sayısı
arttıkça performansından yitirmeye başlayabilir. Bu
nedenle index kullanılması mantıklıdır. Ayrıca MySQL'
in auto_increment özelliği, primary key tanımlanması
vb... imkanları da mevcuttur. Aşağıdaki örnekte, bir
tablo yaratılırken bilimum fonksiyonun aktif olduğu
durumu görüyoruz.
CREATE TABLE addressbooks (
addressbook_id int(10) unsigned NOT NULL auto_increment,
owner_user_id bigint(20) unsigned NOT NULL default '1',
addressbook_name varchar(255) NOT NULL default '',
addressbook_comment text,
addressbook_type tinyint(3) unsigned NOT NULL default '1',
parent_addressbook_id int(11) unsigned NOT NULL default '0',
is_default tinyint(3) unsigned NOT NULL default '0',
visible tinyint(4) NOT NULL default '1',
PRIMARY KEY (addressbook_id),
UNIQUE KEY addressbook_name (addressbook_name),
UNIQUE KEY addressbook_id_2 (addressbook_id),
KEY addressbook_id (addressbook_id)
) TYPE=MyISAM;
Yukarıdaki SQL kodunun büyük bir kısmı birşey ifade
etmiyorsa önemsemeyin, henüz veritabanlarına yeni
başladığınız için şimdilik pek çok fonksiyona
ihtiyacınız olmayacaktır.
Tabloya yeni veri girilmesi
Yeni kayıt girmek için yine standart SQL komutu
"insert into" kullanılmaktadır.
mysql> insert into kullanicilar values(
-> "Umut",
-> "Gokbayrak",
-> 2332323,
-> "1977-10-28",
-> "Et sut mahallesi hebelek apt. no:666 Bornova Izmir",
-> "Burada binary data girildigini varsayiyoruz."
-> );
Query OK, 1 row affected (0.00 sec)
Dikkat edildiyse string değişkenler çift tırnak ile
sayısal değerler de tırnaksız olarak girilmektedir.
Bu genel kural heryerde geçerlidir.
Tablodan Kayıt Silmek
Tablodaki verilerden bir kayıt silmek için bir
kritere ihtiyacımız vardır. Kriter demek, hangi
kayıtları sileceğimizi bilgisayara anlatabileceğimiz
bir matematiksel fonksiyon gibi bir şey manasına
gelir. Örneğin sicil numarası 10000 den küçük
kullanıcıları silmek istersek aşağıdaki komut işimizi
görecektir.
mysql> delete from kullanicilar where sicilno < 10000;
Query OK, 0 rows affected (0.00 sec)
Tablomuzda henüz sicil numarası 10000 den küçük
kullanıcı olmadığı için işlem 0 satırı
etkileyecektir. Eğer böyle bir kayıt olsaydı kaç tane
kayıdın etkilendiğini görebilecektik.
Tablodaki verileri Listelemek
Bu işlem için select komutu kullanılır. Select işlemi
görünüşte çok basit olmasına rağmen iyi tasarlanmış
bir veritabanının getirilerini sonuna kadar
kullanabilmemizi sağlar. Çok basit olarak
kullanicilar tablomuzdaki bütün kayıtları listelemek
istersek...
mysql> select * from kullanicilar;
komutunu vermemiz yeterli olacaktır. Eğer sadece
isimleri listelemek isteseydik...
mysql> select isim from kullanicilar;
komutu bizim için yeterli olacaktı.
Eğer sicil numarası 10000 den büyük kullanıcıların
isim ve soyisimlerini listelemek istersek ....
mysql> select isim,soyisim from kullanicilar where sicilno > 10000;
komutu işimizi görecektir. Eğer sizil numarası 10000
den büyük ve ismi "Umut" olan kullanıcıların doğum
tarihlerini listelemek istersek...
mysql> select dogumtarihi from kullanicilar where sicilno > 10000 and isim = "Umut";
Burada dikkat etmemiz gereken nokta büyük küçük harf
meselesidir. MySQL sistemi Windows altında büyük
küçük harf ayrımı yapmazken, Linux gibi Unix' ler
altında yapmaktadır. Bu nedenle platform bağımsız
çalışmak için "Etsut" kelimesinin "etsut" ile aynı
şey olmadığını unutmamalıyız.
Adresinin içinde "Et" kelimesi geçen kullanıcıların
bütün bilgilerini listelemek istersek...
mysql> select isim from kullanicilar where adres like "%Et%";
komutunu vermemiz gereklidir.
Bir tablodaki kayıtları değiştirmek
Bir kayıtta update(güncelleme) işlemi yaparken aynen
delete işlemi gibi bir kriter belirtilmesi
gereklidir. Örneğin ismi "Abdurrahman" olan kişiler
bir kriter olarak tanımlanabilir.
İsmi "Abdurrahman" olan kullanıcıların sicil
numaralarını (bizim tablomuzda sadece 1 kayıt)
3434543 olarak değiştirmek istiyorsak...
mysql> update kullanicilar set sicil_no = 3434543 where isim = "Abdurrahman";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Bir sonraki adım ne olmalı
Buraya kadar uygulananları eğer problemsiz olarak
uygualayabildiyseniz ve sistematiği anladıysanız
artık PHP ile MySQL uygulamaları geliştirmeye hemen
hemen hazırsınız demektir. Sitemizde yer alan PHP' ye
giriş dokümanlarından bir iki tanesini okuduğunuzda
artık ilk uygulamalarınızı hazırlayabilir
olacaksınız. Bu iş gerçekten de bu kadar basit.
Farkındaysanız bu dokümanda MySQL' in özelliklerinin
çok küçük bir kümesinden bahsettik ve işlemlerimizi
hep genelde uzak durmaya çalışılan konsol tabanlı
mysql istemcisinden yaptık. Eğer işlemlerinizi grafik
bir arayüz ile yapmak istiyorsanız bu iş için en
uygun çözüm bence phpMyAdmin adı verilen programdır.
phpMyAdmin http://www.phpwizard.net/projects/phpMyAdmin/
adresinden temin edilebilir. Grafik arayüz
kullanımı kullanıcıyı tembelliğe alıştırsa da
genelde hızdan büyük kazanç sağlamaktadır.
Veritabanı yapısını sonradan değiştirmek, tablo
içindeki verileri güncellemek gibi işlemlerde
özellikle bir grafik arayüz kullanımı oldukça
mantıklıdır.
Her başarılı web programcısı, iyi derecede veritabanı
tasarlayabilmelidir. Dolayısıyla normalizasyon
konusunda fikir sahibi olmalıdır. Bu konuda bir
doküman, yazılımlarınızın kalitesini büyük ölçüde
arttıracaktır.
Dokümanımızda bütün işlemler root kullanıcı olarak
gerçekleştirilmiş ve yeni kullanıcı tanımlanması,
bunlara hak verilmesi üzerinde hiç durulmamıştır. Bu
dokümandan sonraki referansınız http://www.php.org.tr/article.php?sid=29
adresindeki "MySQL Kullanıcı Yönetimi" başlıklı
makalemiz olmalıdır.
Bu yazı http://www.php.org.tr
adresinde yayınlanmıştır.