Yeni Başlayanlar İçin MySQL

KaRa_HiL@L

Katılımcı Üye
19 Şub 2006
448
13
VaTaN BeKÇiSi
PHP ile programlamaya henüz başlıyorsanız büyük ihtimalle web yazılımınızın bir içerik yönetimi, bilgi saklanması ve kullanıcıya özgü bölümleri olmasını istiyorsunuz demektir. Web tasarımcılığının bir sonraki aşaması olan web programcılığı tabanda PHP gibi bir sunucu taraflı scripting dili ve bu dil ile MySQL, PostgreSQL gibi bir veritabanı sistemine erişimden ibarettir. MySQL, performansı, öğrenim sürecinin kısalığı ve standartlara uyumluluğu ile son günlerin en çok tercih edilen veritabanlarından birisi olmuştur. Bu yazımızda kısaca, özellikle PHP geliştiricilerince neredeyse standart kabul edilen MySQL' e kısa bir giriş yapmaya çalışacağız.

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.

ALINTIDIR !!!
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.