You are on page 1of 70

T.C.

MLL ETM BAKANLII

MEGEP
(MESLEK ETM VE RETM SSTEMNN GLENDRLMES PROJES)

BLM TEKNOLOJLER

INTERNET PROGRAMCILII - 5

ANKARA 2008

Milli Eitim Bakanl tarafndan gelitirilen modller; Talim ve Terbiye Kurulu Bakanlnn 02.06.2006 tarih ve 269 sayl Karar ile onaylanan, Mesleki ve Teknik Eitim Okul ve Kurumlarnda kademeli olarak yaygnlatrlan 42 alan ve 192 dala ait ereve retim programlarnda amalanan mesleki yeterlikleri kazandrmaya ynelik gelitirilmi renme materyalleridir (Ders Notlardr). Modller, bireylere mesleki yeterlik kazandrmak ve bireysel renmeye rehberlik etmek amacyla renme materyali olarak hazrlanm, denenmek ve gelitirilmek zere Mesleki ve Teknik Eitim Okul ve Kurumlarnda uygulanmaya balanmtr. Modller teknolojik gelimelere paralel olarak, amalanan yeterlii kazandrmak koulu ile eitim retim srasnda gelitirilebilir ve yaplmas nerilen deiiklikler Bakanlkta ilgili birime bildirilir. rgn ve yaygn eitim kurumlar, iletmeler ve kendi kendine mesleki yeterlik kazanmak isteyen bireyler modllere internet zerinden ulaabilirler. Baslm modller, eitim kurumlarnda rencilere cretsiz olarak datlr. Modller hibir ekilde ticari amala kullanlamaz ve cret karlnda satlamaz.

NDEKLER
AIKLAMALAR ....................................................................................................................ii GR ....................................................................................................................................... 1 RENME FAALYET-1 ..................................................................................................... 3 1. MYSQL VER TABANI YNETM................................................................................. 3 1.1. Veri Taban Oluturma (Create Database).................................................................... 3 1.1.1. MySQL Veri Taban Sunucusu ............................................................................. 5 1.1.2. MySQL Kurulumu................................................................................................. 5 1.1.3. MySQL Yazm Kurallar ....................................................................................... 5 1.1.4. MySQL Yeni Kullanc Oluturma........................................................................ 6 1.2. Tablo Oluturma (Create Table) ................................................................................... 8 1.3. Index Yaplar (Create Index) ..................................................................................... 12 1.4. Insert Kullanm .......................................................................................................... 14 1.5. Select Kullanm.......................................................................................................... 15 1.6. Delete Kullanm ......................................................................................................... 22 1.7. Update Kullanm........................................................................................................ 22 1.8. Alter Kullanm ........................................................................................................... 23 1.9. MySQL Fonksiyonlar ................................................................................................ 26 1.9.1. Standart Fonksiyonlar.......................................................................................... 26 1.9.2. Tarih ve Zaman Fonksiyonlar............................................................................. 27 1.9.3. Karlatrma Fonksiyon ve Operatrleri............................................................. 39 1.9.4. Mantksal Operatrler.......................................................................................... 40 1.9.5. Kontrol Mekanizmalar ve Karakter Fonksiyonlar............................................. 42 1.9.6. Aritmetik Operatrler .......................................................................................... 46 1.9.7. Matematiksel Fonksiyonlar ................................................................................. 47 UYGULAMA FAALYET .............................................................................................. 50 LME VE DEERLENDRME .................................................................................... 51 RENME FAALYET2 .................................................................................................. 53 2. PHP LE MySQL VER TABANINA ERMEK............................................................. 53 2.1. PHP le Veri Taban Etkileimleri .............................................................................. 53 2.2. MySQL Sunucusuna Balant..................................................................................... 55 2.3. Veri Taban Seimi ..................................................................................................... 55 2.4. Veri Tabann Sorgulamak .......................................................................................... 56 2.5. SQL Sunucu zerinde lemler .................................................................................. 56 2.6. MySQL Balantsn Kapatma.................................................................................... 57 UYGULAMA FAALYET .............................................................................................. 61 LME VE DEERLENDRME .................................................................................... 62 MODL DEERLENDRME .............................................................................................. 63 CEVAP ANAHTARLARI ..................................................................................................... 64 NERLEN KAYNAKLAR.................................................................................................. 65 KAYNAKA ......................................................................................................................... 66

AIKLAMALAR AIKLAMALAR
KOD ALAN DAL/MESLEK MODLN ADI MODLN TANIMI SRE N KOUL YETERLK 482BK0098 Biliim Teknolojileri Web Programcl Internet Programcl - 5 Gerekli ortam salandnda programlama komutlar yardmyla veri taban ilemleri yapma ile ilgili konularn anlatld renme materyalidir. 40/32 Internet Programcl - 4 modln baarm olmak Programlama iinde form ve nesneler kullanmak Genel Ama Gerekli ortam salandnda hazrlanan program ile veri taban ilemleri yapabileceksiniz. MODLN AMACI Amalar Veri taban programlama dilinin (MySQL) kullanmn renerek uygulamalar yapabileceksiniz. Veri taban programlama diliyle etkileimli web (php ile) uygulamalar gerekletirebileceksiniz. Ortam Biliim teknolojileri laboratuvar, iletme ortam, bilgisayar laboratuvar Donanm Projeksiyon, bilgisayar web programlama yazlmlarn altrabilecek yeterlikte bilgisayar, , internet balants Her faaliyet sonrasnda o faaliyetle ilgili deerlendirme sorular ile kendi kendinizi deerlendireceksiniz. retmen, modl sonunda size lme arac (uygulama, soru-cevap) uygulayarak modl uygulamalar ile kazandnz bilgi ve becerileri lerek deerlendirecektir.

ETM RETM ORTAMLARI VE DONANIMLARI

LME VE DEERLENDRME

ii

GR GR
Sevgili renci, Programlama ile birlikte insanlar tm verilerini bilgisayar ortamnda tutmak istemilerdir. Bunun iin hemen hemen tm programlama dillerinde dosyalama ilemi yaplabilmektedir. Bu ortamlardaki kstlamalar, her ey istenildii gibi yaplamadndan sadece veri kontrollerinde iyi olan programlama dilleri gelitirilmitir. Veri taban programlar; bir kurumun alanlarnn kimlik, adres, kurum vb. bilgilerinin tutulup ilendii ve bunlarla ilgili deiikliklerin yapld programlama dilleridir. MySQL Linux ve PHP ile ok iyi anlaabilen bir veri taban programlama dilidir. Gnmzde zaten web tasarmcs olan birisi, tasarmn bir veri tabanyla mutlaka birletirmelidir. nk artk insanlar ilerini web ortamna tamlardr. nternet zerinden alveri yapmak, okullara kayt yaptrmak veya bilgilerini grmek, uak veya otobs bileti almak gibi ilemlerde sizin bilgileriniz hep bu veri tabanlarnda tutulmaktadr. Internet ortamnda veri taban ilemi iin de baz web programlama dilleri, kendilerine uygun olan, anlaabilecei veri taban programlama dilini seer. PHP birok veri taban dilini destekler. MySQL de birok web programlama dilinde alr. Ama sanki PHP MySQL, MySQL de PHP iin gelitirilmitir gibidir. kisi de ak kod, ucuz veya bedava olan dillerdir.

RENME FAALYET1 RENME FAALYET-1


AMA
Veri taban programlama dilinin (MySQL) kullanmn renerek uygulamalar yapabileceksiniz.

ARATIRMA
Dnya apnda kullanlan veri taban programlarn aratrnz. MySQL ve dier veri tabanlarn avantaj ve dezavantaj olarak karlatrnz. Herhangi bir alveri web sitesinin nasl veri kayd yaptn aratrnz.

Aratrma ilemleri iin yelik gerektiren web sitelerinin yelik bilgilerinin nasl tutulduunu, alveri sitelerinin nasl hazrlandn dnerek byle birka web sitesini inceleyiniz.

1. MYSQL VER TABANI YNETM


1.1. Veri Taban Oluturma (Create Database)
Veri taban (database), verilerin bilgisayar ortamnda saklanmas olarak tanmlanabilir. Ayn tr bilgileri ieren veriler birka gruba ayrlr ve bu gruplarn her birine tablo (table) denir. Veri taban tablo veya tablolardan oluur. Tablolar da her bir bilginin sakland alanlardan (fields) oluur. VER TABANI

TABLO - 1
ALAN - 1 ALAN - 2

TABLO - 2
ALAN - 1 ALAN - 2

TABLO - 3
ALAN - 1 ALAN - 2

ALAN - n

ALAN - n

ALAN - n

ekil 1.1

Bir veri taban adndan da anlalaca gibi bilgilerin depoland hiyerarik bir yapdr. Biz web zerinde kullanc ad, ifresi, e-posta adresi gibi bilgileri bu veri tabanlarnda saklarz. Ayn bilgileri bir dosyaya yazp gerektiinde dosyay ap bilgileri okutmak da bir zm gibi grnse de bu ilem hem daha karmak ve zahmetli hem de daha yavatr. Aslnda az ok ngilizce bilen birisi iin MySQL kullanmak pek zor olmayacaktr. Veri tabanlarnda tutulacak bilgilerin doru olarak girilmesi, tekrarl kaytlarn olmamas, verilerin gvenlii gibi zellikler ancak bir veri taban yntemiyle salanmaktadr. Bunlar salayan birok veri taban sunucusu vardr. Progress, Oracle, Sybase, ProsgreSQL, MySQL, Access bunlardandr.

Resim 1.1: Dosyalama

MySQLde veri taban oluturmak olduka kolaydr. Bunun iin CREATE DATABASE komutu kullanlr. Kullanm: CREATE DATABASE veri taban_ad; veri taban_ad yerine oluturmak istediiniz veri tabannn adn yazmanz gerekir. rnek: Aadaki komutlarla ogrenci adl bir veri taban oluturulmutur.
mysql>create database ogrenci; Query OK,1row affected (0.03 sec)

Bu veri tabannzn kolaylkla oluturulduunu ve her eyin yolunda olduunu gsterir. 4

Veri Taban Silme (Drop) Artk ihtiyacnz olmadna inandnz bir veri tabann DROP DATABASE komutuyla silebilirsiniz. Bu komutu uygulamadan nce ok iyi dnmeli ve bu veri tabanna ihtiyacnzn olmadndan emin olmalsnz. nk bu sorgu ile tm tablolar, tm indexleri ve veri tabannn kendisini silmi olacaksnz. Yani kaytlar geri gelmeyecektir. Kullanm; DROP DATABASE veri taban_ad; veri taban_ad yerine silmek istediiniz veri tabannn adn yazmanz gerekir. rnek: Aadaki komutlarla ogrenci adl bir veri taban silinmitir.
mysql>drop database ogrenci; Query OK,1 row affected (0.03 sec)

Bu veri tabannzn kolaylkla silindiini gsterir.

1.1.1. MySQL Veri Taban Sunucusu


MySQL veri taban ve sunucusunun en byk zellii cretsiz oluudur. Eer ticari amala kullanlacaksa az miktar cret denmesi gerekebilir. MySQL sunucusunun en byk zelliklerinden birisi de PHP (web programlama dili) ile olduka iyi almasdr. Sanki iki rn de birbiri iin oluturulmu gibidir. MySQL sunucusu, iletim sisteminden bamsz olarak almaktadr.

1.1.2. MySQL Kurulumu


nternet Programcl 1 modlnde de anlatld gibi MySQL veri taban sunucusu http://www.mysql.com adresinden indirilebilir. ndirilen sktrlm dosyay herhangi bir bo klasre almaldr. Alan dosyalardan setup.exe program altrlr. MySQL windowsta standart olarak C:\mysql klasrne kurulacaktr.

1.1.3. MySQL Yazm Kurallar


MySQL komut satrnda dikkat edilmesi gereken kurallar unlardr: Komut satrnda yazlan ifadelerin bittiini belirtmek iin noktal virgl ( ; ) kullanlr.
mysql>show databases;

Baz durumlarda noktal virgl ( ; ) kullanlmaz.


mysql>quit

Komutlar byk veya kk harfle yazlabilir.


mysql>select current_time(); mysql>SELECT CURRENT_TIME();

Komutlar birden fazla satrda yazlabilir (sonuna noktal virgl konulan komutlar, kelimeler blnmemek kaydyla).

Doru yazm:
mysql> select > current_time(); +--------------+ |currnet time()| +--------------+ |20:23:56 | +--------------+ 1 row in set (0.00 sec) mysql>

Hatal yazm:
mysql>select current_ >time(); ERROR 1064: You have an error in your SQL syntax near () at line 2 mysql>

Komutlarda Trke karakterler (,,,,,,,,,,,) kullanlmaz.

1.1.4. MySQL Yeni Kullanc Oluturma


MySQL veri taban sistemi birok farkl veri taban destekleyebilir. Genellikle uygulama bana bir veri taban olacaktr. MySQLde en kolay ksmlarndan biri veri taban oluturmaktr. Bunun iinse MySQL sunucusunda tam yetkili bir kullanc olmanz gerekir. Kurlumu siz yaptysanz zaten yetkili sizsinizdir. Kurulum aamasndaki ifrenizi unutmaynz. imdi yeni bir yetkili kullanc eklemek iin aadaki komutlar kullanlr:
mysql>GRANT ALL PRIVILEGES ON *.* TO miho@localhost INDENTFIED BY mihoparola WITH GRANT OPTION;

MySQL sunucusuna okuma, ekleme, dzeltme ve silme hakk olan bir kullancy eklemek iin aadaki komutlar kullanlr:
mysql>insert into user >host, >user, >password, >Select_priv, >Insert_priv, >Update_priv,

>Delete_priv, >Create_priv, >Drop_priv, >Reload_priv, >Shutdown_priv, >Process_priv, >File_priv, >Grant_priv, >References_priv, >Index_priv, >Alter_priv) VALUES (#,ahmet,PASSWORD(3348),Y, Y, Y, Y,N, N, N, N, N, N, N, N, N, N);

Kullanc ad ahmet, ifresi 3348 olan tm yetkilere sahip bir kullanc oluturulur. Yeni kullanclarn tanmlarnn geerli olabilmesi iin MySQL sunucusunda klmal ve aadaki komut satr uygulanmaldr. MySQL sunucusunda database oluturma hakk olan bir kullanc Create database komutuyla yeni bir database oluturabilir. Kullanm: mysql>create database <veri taban ad>; rnek:
mysql> create database mezunlar; Query OK, 1 row affected (0.00 sec)

Veri tabann seme (use): Artk mezunlar diye bir veri taban oluturulmutur. Fakta bu veri tabann kullanabilmek iin sememiz gerekmektedir. Veri tabann semek iin use komutu kullanlr. Kullanm: mysql>use <database ad>; rnek:
mysql>use mezunlar; database changed

Mezunlar veri taban seilmi oldu.

1.2. Tablo Oluturma (Create Table)


Veri taban oluturmada bir sonraki adm, tablo oluturmaktr. Bunu, create table MySQL komutunu kullanarak yapabiliriz. Tablo oluturma ilemi yaplmadan nce mutlaka veri taban seilmelidir (use komutuyla). Bir create table ifadesinin genel formu yledir.

Resim 1.2

Kullanm:
Create Table <tablo ad> alan_ad veri_tr [Default ifade][alan_kstlamas], [tablo kstlamas]);

Tablo Ad Alan Ad Alan Veri Tr Default fade Alan Kstlamas Tablo Kstlamas

: : : : : :

Tabloya verilecek isim (rnek: mezunkayit) Tabloda yer alacak bilgi alanlarnn ad (rnek: ogr_no, adi, soyadi) O alana girilecek bilginin tr (say, metin, tarih) O alan belirtilmezse balangta atanacak deer O alanla ilgili kstlama (bo olmamas, o alana sadece E veya K girilmesi gibi kstlamalar) Her kaydn belirli alanlara gre kstlanmas (kaytlarn tek olmasn salamak, baka bir tabloyla ilikilendirmek)

MySQLde temel veri tipi vardr. Bunlar; saysal (numeric), tarih ve saat (date and time) ve karakter katardr (string). Bu kategorilerin her birinin iinde de pek ok tip bulunur. Her bir tipin hafzada eitli depolama boyutlar vardr. Veri trleri ve zellikleri aadaki tabloda grlmektedir.

Resim 1.3: rnek veri taban algoritmas

Veri Tr TINYINT [(m)][UNSIGNED] [ZEROFILL] SMALLINT [(m)][UNSIGNED] [ZEROFILL] MEDIUM (m)][UNSIGNED][ZERO FILL] INT[(m)][UNSIGNED][Z EROFILL] BIGINT [(m)][UNSIGNED][ZERO FILL] FLOAT FLOAT (m,n) DOUBLE PRECISION [(m,n)] REAL [(m,n)] DECIMAL [(m,n)] NUMERIC [(m,n)]

Alan Veri Trleri Saysal (Numeric) Veri Trleri Aralk -128 ile 127 arasnda

Kaplad Yer 1 byte

-32768 ile 32767 arasnda

2 byte

-8388608 ile 8388607 arasnda

3 byte

-2147483648 ile 2147483647 arasnda -9223372036854775808 ile 9223372036854775807 arasnda Virglden sonra 4 ya da 8 haneli aretli kk reel say aretli normal reel say Double ile ayndr. Double ile ayndr. Decimal ile ayndr. 9

4 byte 8 byte

4 byte 4 byte 8 byte 8 byte (m+n) byte (m+n) byte

Tarih ve Saat (Date and Time) Veri Trleri Aralk O andaki sistem zamann tutar (tarih ve saat) DATE YYYY-MM-DD,YY-MMDD,YYMMDD formatnda 0000-0-00 ile 9999-12-31 arasnda TIME HH:MM:SS,HHMMSS,HHMM,HH DATETIME YYYY-MM-DD HH:MM:SS Alfasaysal (Karakter-String) Veri Trleri Veri Tr Aralk CHAR (m)[BNIARY] M:1 ile 255 aras BINARY kullanlrsa aramalarda byk/kk harf ayrm vardr. VARCHAR (m) [BINRY] Char ile ayndr, fakat kaplad alan asndan farkldr. TINYTEXT(m),[BINARY Char ile ayndr, fakat kaplad yer ] asndan farkldr. TINYTEXT ve Varchar ile ayndr. Kk/byk harf TINYBLOB ayrm vardr. Uzunluk belirtilmez. TEXT ve BLOB Kk/byk harf ayrm vardr. Uzunluk belirtilmez. Max. 65535 karakter Veri Tr TIMESTAMP [(m)] MEDIUMTEXT ve MEDIUMBLOB LONGTEXT ve LONGBLOB ENUM(deer1,deer2, .,deern) SET (deer1, deer2,., deern) Kk/byk harf ayrm vardr. Uzunluk belirtilmez. Max. 16777216 karakter. Kk/byk harf ayrm vardr. Uzunluk belirtilmez. Max. 4294967295 karakter Verilen deerlerden bir tanesi mutlaka seilidir (Alan kstlamasnda kullanlr). Verilen deerlerden birden ok seilebilir.
Tablo 1.1: Alan veri tr

Kaplad Yer 4 byte 4 byte

3 byte 8 byte Kaplad Yer m byte

(Girilen uznlk+1) byte (Girilen uznlk+1) byte (Girilen uznlk+1) byte (Girilen uzunluk+2) byte (Girilen uznlk + 3) byte (Girilen uznlk+4) byte En fazla 2 byte 1-8 byte arasnda

rnek: Mezun olan renciler iin mezun bilgilerinin tutulaca bir tablo oluturalm. Bu tablo iin aadaki alan adlar bulunacaktr. Tablo adn kayit olarak kabul edelim. Alan ad- aklama adi : renci ad soyadi : renci soyad ogrno : renci Nu. Kayit tablosunun oluturulmas:
mysql> create table kayit ->( ad varchar(15) not null,

10

->soyad varchar(15)not null, ->ogrno smallint(5) unsigned, ->constraint ogrno_pk primary key (ogrno) ->); Query OK, 0 rows affected (0.08 sec)

rnek: Bir alveri sitesinde mteri bilgilerini tutacak bir tablo iin aadaki alanlar bulunacaktr. Tablo ad musteri olsun. Alan ad - aklama Musteri_id : Mteri numaras adsoyad : Mteri ad ve soyad adres : Mteri adresi sehir : ehir tlfon : Telefon Musteri tablosunu oluturulmas:
mysql> create table musteri ->(musteri_id int unsigned not null auto_increment primary key, ->adsoyad varchar(50) not null, ->adres varchar(100) not null, ->sehir varchar(15) not null, ->tlfon varchar(11) not null ->); Query OK, 0 rows affected (0.08 sec)

rnek: Bir sat sitesine konulacak rnlerin tutulaca urun adl tabloyu aadaki gibi oluturalm. Alan ad Urun_kodu Urun_markasi Urun_turu Urun_fiyati Aklama : Satlacak rn kodu : Satlacak rnn markas : Satlacak rn tr : Satlacak rnn fiyat

Urun tablosunun oluturulmas:


mysql> create table urun ->( urun_kodu integer(5) zerofill not null, ->urun_markasi varchar(20)not null default BELRSZ, ->urun_turu varchar(20)not null default BELRSZ, ->urun_fiyati bigint(10) unsigned, ->constraint urun_kodu_pk primary key (urun_kodu), ->); Query OK, 0 rows affected (0.07 sec)

11

Tablolar Silmek (Drop Table) Bazen bir tablonun tamamndan kurtulmak isteyebilirsiniz. Bunun iin DROP TABLE ifadesiyle yapabilirsiniz. Genel kullanm aadaki gibidir. Kullanm: DROP TABLE tablo_adi rnek: musteri tablosunu silmek iin aadaki ifade kullanlr.
mysql> drop table musteri;

Bu sorgu, tablodaki tm satrlar ve tablonun kendisini sileceinden kullanrken dikkatli olunmaldr.

1.3. Index Yaplar (Create Index)


Bir index, veri taban ortamnda tablo gibi bir nesnedir ve ilikili olarak kullanld tablonun indexleme alan (priamry key) olarak kullanlan kolondaki verilere gre sralanm biimde ileme sokulmasn salar. Bir tablo indexlenmi ise bu tablo iinde gerekletirilecek bir arama ya da koullu listeleme ilemi ok daha hzl biimde gerekletirilebilecektir. CREATE INDEX belirtilen bir tablo zerinden bir indeks oluturur. ndekslerin birincil kullanm amac, veri taban baarmn artrmaktr (ancak, uygunsuz kullanm baarnn dmesiyle sonulanr). ndeks iin anahtar alanlar stun isimleri olarak ya da parantez iinde yazlm ifadeler olarak belirtilir. ndeksleme yntemi, ok stunlu indeksleri destekliyorsa ok sayda alan belirtilebilir. Bir indeks alan, tablonun satrndaki bir veya daha fazla stun deerinden hesaplanan bir ifade olabilir. Bu zellik, baz temel veri dnmlerini temel alan veriye daha hzl eriim salamak iin kullanlabilir. Auto_increment, tam say stunlarnda kullanabileceiniz zel bir MySQL zelliidir. Tabloya satrlar eklerken ilgili alan bo braktmzda MySQL otomatik olarak benzersiz bir tanmlayc deer oluturacaktr. Bu deer, stundaki mevcut maksimum deerlerin bir fazla olacaktr. Her tabloda yalnzca bir tane bulunabilir. Auto_increment ieren stunlar indexlenmelidir. Bir stun adnn ardndan gelen primary key, bu stunun tablo iin birincil anahtar olduunu belirtir. Bu stuna yaplan girilerin benzersiz olmas gerekir (T.C. kimlik Nu., okuldaki renci Nu.gibi). MySQL bu stunu otomatik olarak indexler. Yukardaki mteri tablosundaki musteri_id ile birlikte kullanldnda Auto_increment ile birlikte grlr. Birincil anahtar zerindeki otomatik index, auto_increment iin gereken indexle ilgilenir. Bir stun adnn ardndan birincil anahtar (primary key) belirleme ilemi sadece tek stunluk birincil anahtarlar iin yaplabilir. Birincil anahtarlarn belirtilmesi, bu stunlarda indexlerin oluturulmasn salar.

12

Birincil anahtarlar ya da indexler olmadan da tablo oluturmak mmkndr. Yeni baayan MySQL kullanclarnn karlatklar sorunlardan biri ok hzl olduunu duymu olduklar bu veri tabanndan yeterli performans elde edememektir. Bu performans sorunuyla karlamalarnn nedeni, veri tabanlarnda hibir index oluturmam olmalardr. MySQL tarafndan otomatik olarak oluturulan indexler balang iin iimizi grecektir. Eer anahtar olmayan bir stunda ok fazla sorgu altrdnz fark ederseniz performans artrmak iin bu stuna bir index eklemek isteyebilirsiniz. Bunu CREATE INDEX ifadesini kullanarak yapabilirsiniz. Bu ifadenin genel formu aadadr. Kullanm: CREATE [ UNIQUE ] INDEX isim ON tablo [ USING yntem ] ( { stun | ( ifade ) } [ ile_snf ] [, ...] ) [ TABLESPACE tablo_alan ] [ WHERE dayanak ] Parametreler UNIQUE ndeks oluturulurken ve her veri ekleniinde tabloda birbirinin ayn deerler bulunmamas iin sistemin snama yapmasn salar. Girdilerin yinelenmesine sebep olacak bir veri girme veya gncelleme ileminin yaplmaya allmas bir hata retecektir. sim : Oluturulacak indeksin ismi (Burada ema nitelemeli isimler kullanlamaz. ndeks daima tabloyu ieren emada oluturulur.) Tablo : ndekslenecek tablonun ismi (ema nitelemeli olabilir.)

Yntem : ndeks iin kullanlacak yntemin ismi. Deer olarak, btree, hash, rtree ve gist verilebilir. btree ntanml yntemdir. Stun : Tablo stunun ismidir.

fade : Tablonun bir ya da daha fazla stnu ile ilintili bir ifade. fade, yukardaki sz diziminde gsterildii gibi parantez iinde yazlmaldr. Ancak, ifade bir ilev ars biimindeyse parantez iine alnmayabilir. ile_snf: Bir ile snfnn ismidir. Ayrntlar iin aaya baknz. tablo_alan: ndeksin oluturulaca tablo alandr. Belirtilmezse default_tablespace yaplandrma deikeninin deeri, bu deikene bir deer atanmamsa veri tabannn ntanml tablo alan kullanlr. Dayanak : Bir ksmi indeks iin kst ifadesi 13

rnekler: films tablosunun title stunu zerinde bir B-tree indeksi oluturmak iin:
mysql> CREATE UNIQUE INDEX title_idx ON films (title);

films tablosunun code stunu zerinde bir indeks oluturup bu indeksin indexspace tablo alannda kalmas iin:
mysql>CREATE INDEX code_idx ON films(code) TABLESPACE indexspace; mysql>CREATE INDEX namex ON "Depo.Dbf" (malz_adi)

letmede alan personeli brt maalarna gre azalan srada (yksek maatan dk maaa doru) listelemek istenirse brt alanna gre aadaki gibi index oluturmak gerekir:
mysql>CREATE INDEX per_maas ON personel (brut DESC);

Bir okuldaki rencileri ncelikle adlarna gre, ayn adda olanlar soyadlarna gre, hem ad hem soyad ayn olanlarn ortalamalarna gre srlanm olarak listelenmesi istenirse aadaki komutlar kullanlmaldr:
mysql>CREATE INDEX ogr_ad_soyad_ort ON ogrenci (ad,soyad,ort);

Mevcut Indexin Silinmesi (Index Drop) Bir tablo zerinde tanmlanm herhangi bir index, o tablonun veri tabanndan silinmesi ile otomatik olarak silinecektir. Tablo silinmeksizin o tablo zerinde oluturulan indek iinse DROP INDEX komutu kullanlr.
mysql>INDEX DROP ogr_ad_soyad_ort;

Bylece ogrenci tablosu zerinde oluturulmu ogr_ad_soyad_ort adl indeks, ogrenci tablosu veri tabannda kald hlde silinecektir.

1.4. Insert Kullanm


Bir veri taban ile ilem yapabilmek iin nce ona veri girmemiz gerekir. Bunu yapmann en yaygn yolu da MySQLin INSERT komutudur. Bir tablodaki her satr normalde gerek bir nesne veya ilikiyi tarif eder ve o satrn stun deerleri bu gerek nesne hakkndaki bilgileri depolar, INSERT ifadesini veri tabanna veri satrlar eklemek iin kullanabiliriz. Kullanm: INSERT INTO tablo [(kolon, kolon, ...)] VALUES (deer-1, deer-2, ...) ya da INSERT INTO tablo [(kolon, kolon, ...)] SELECT .... 14

Grld gibi tabloya iki trde veri nakledilebiliyor. rnek:


mysql>insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('zgr','Dnmez','Ar Koop.2/2 Batkent','Ankara','06130','03122560123'); mysql>insert into musteri values (null,ali er,12.cad no:3 Emek,Ankara,03123335566); mysql>INSERT INTO musteri (musteri_no,adsoyad,sehir) values(3,Davut ZTRK,Mersin); mysql>INSERT INTO iller (cod_il) VALUES (33); mysql>INSERT INTO eski_uyeler VALUES('M','Karabulut','mk@karya.net','1979-03-29' ); INSERT INTO musteri VALUES ("M. Selcuk Batal" , "61" , "Refahiye" , "Erzincan"); INSERT INTO mus_hesap VALUES ("1471" , "100" , {05/02/03});

Tablo yerine, iine veri girmek istediimiz gerek tablonun adn koyduumuza ve deerlerin yerine de gerek deerler girdiimize dikkat ediniz. Bu rneklerdeki deerlerin tm tek trnak iine alnmtr. MySQLdeki karakter katarlarnn her zaman ift veya tek trnak iinde olmas gerekir. Saylara ve tarihlere trnak gerekmez. Insert ile birlikte sadece birka varyasyon daha kullanlabilir. Insert szcnn sonuna LOW_PRIOROTY ya da DELAYED eklenebilir. LOW_PRIORITY anahtar szc, sistemin bekleyip verileri daha sonra tablodan okunmadklar srada girilebilecei anlamna gelir. DELAYED anahtar szc, girilen verilerinizin tampon bellee alnaca anlamna gelir. Sunucu megulse insert ileminin tamamlanmasn beklemek zorunda kalmadan sorgu altrmaya devam edebilirsiniz.

1.5. Select Kullanm


Bir veri tabanndan veri elde etmeyi (almay) tablonun belirli ltleriyle eleen satrlar seerek yaparz. Bu ii yapan MySQL komutu SELECT komutudur. SELECT ifadesinin kullanmnn birok seenei ve farkl yolu vardr. Bunlar aada verilmitir:
SELECT [ALL|DISTINCT] {*|alan_adi_listesi} [INTO{OUTFILE|DUMPFILE}dosya_adiexport_option] FROM tablo_adi [WHERE koul] [GROUP BY alan_adi1[,alan_adi2]] [HAVING search-condition] [ORDER BY siralama_alanalari]

eklinde bir ifadesi vardr.

15

imdi ncelikle istee bal cmlecii olmayan belirli bir tablodan seim yapan sorgulara bakalm. Tipik olarak bu geler, tablonun stunlardr (Her trl MySQL ifadesinin sonucu da olabilir.). Bu sorgu, musteri tablosundaki ad ve sehir stunlar ieriklerini listeler. mysql>select ad, sehir from musteri; Kodlar musteri tablosundaki ad ve sehir stunlarndaki bilgileri aadaki gibi listeleyecektir:
+--------------+---------------+ |ad |sehir | +--------------+---------------+ |Ahmet |Mersin | |Aye |Hatay | |Ahsen |anlurfa | +--------------+---------------+

Yukarda da grld gibi musteri tablosundan setiimiz (ad ve sehir) geleri ieren bir tablomuz oldu. Bu veri, musteri tablosundaki tm satrlar iin gsterilmektedir. Bir tablodan select anahtar szcnn ardndan listeleyerek istediiniz sayda stun belirtebilirsiniz. Baka baz geleri belirtmek de mmkndr. Bunlardan bir tanesi de joker karakter olan * iaretidir. Bu iaret belirtilmi tablodan ve tablolardaki tm stunlarla eleir. rnein, siparis adl bir tablodaki tm stunlar listelemek iin aadaki kodlar yazlr. mysql>select * from siparis; kodlar siparis tablosundaki tm stunlarndaki bilgileri aadaki gibi listeleyecektir:
+--------------+---------------+----------------+------+ |musteri_no |siparis_tar |urun | fiyat | +-------------+---------------+----------------+-------+ |001 |23.03.2007 |HDD |120YTL | |0034 |12.03.2007 |256MB RAM |85YTL| |003 |28.03.2007 |Power Supply |28YTL| +-------------+---------------+----------------+--------+

Bir tablonun alt kmelerine erimek iin (artl sorgulama yapmak iin) baz seim ltleri belirtmemiz gerekir. Bunu WHERE parametresi ile yapabiliriz. Kullanm: SELECT <alan_adi [alan_adi1,]> FROM <tablo_adi> WHERE <koullar>
mysql>select from musteri where adi=aye;

16

musteri tablosundan tm stunlar, ama sadece adi aye olan satrlar seecektir. Bunun kts:
+-------------+---------------+--------------- +------+ |ad |adres |ehir |telefon +-------------+---------------+--------------- +------+ |aye |orhaniye mh. |MULA |2143526 | |aye |emek cd. |ANKARA |5214556 | |aye |gneyli ky |MERSN |4522356 +-------------+---------------+--------------+----------+ |

WHERE belirli satrlar seerken kullanlan ltleri belirtir. Bu rnekte adi aye olan satrlar setik. Tek eittir iareti, eitlii kontrol etmek iin kullanld. Bunun PHPde farkl olduu ve bunlar birlikte kullanrken kartrlabilecekleri unutulmamaldr. MySQL eitlii, ek olarak operatrleri bu dzenli deyimlerin tmn destekler. WHERE cmlecikleri iinde kullanlan operatr ve deyimler aadaki tabloda verilmitir. WHERE Cmlecikleri iin Kullanl Karlatrma Operatrleri
OPERATRLER AD(varsa) RNEK AIKLAMA

= > < >=

Eittir Byktr. Kktr. Byktr veya eittir. Kktr veya eittir. Eit deildir.

ogrno=125 Fiyat>45 Nt<44 Nt>=45

<=

Nt<=44

!= veya <> IS NOT NULL IS NULL BETWEEN

Ad!=ahmet Adres is not null Adres is null Nt between 50 and 90

IN

Sehir in (mersin,mula) 17

ki deerin eit olup olmadn kontrol eder. Bir deerin dierinden byk olup olmadn kontrol eder. Bir deerin dierinden kk olup olmadn kontrol eder. Bir deerin dierinden byk ya da eit olup olmadn kontrol eder. Bir deerin dierinden kk ya da eit olup olmadn kontrol eder. ki deer eit deil mi diye bakar. Alann iinde deer bulunup bulunmadn kontrol eder. Alann iinde deer yok mu diye bakar. Bir deerin minimum deerden byk veya eit, maksimum deerden kk veya eit olup olmadn kontrol eder. Bir deerin belirli bir kmede olup olmadn kontrol eder.

NOT IN LIKE rnek eletirme

Sehir not in (ankara,istanbul) sim like (aye%)

NOT LIKE

rnek eletirme

sim not like(oya%)

Bir deer, bir kmede deil mi diye bakar. Basit SQL eletirme ilemini kullanarak bir deerin bir rnekle eleip elenemediini kontrol eder. Bir deer bir rnekle elemiyor mu diye bakar.

Tablo 1.2: WHERE cmlecikleri iin kullanl karlatrma operatrleri

Tablodaki son iki satr like ile ilgilidir. Bunlar rnek eletirme formlardr. Like basit sql rnek (pattern) eletirilmesi kullanlr. rnekler normal metin art herhangi bir saydaki karakter ile eleebilecek joker karakteri gsteren bir % karakterinden ve bir tek karakteri ile eleen _ (alt izi) karakterinden oluabilir. Birden fazla lt kontrol etmek iin basit operatrleri ve rnek eletirme sz dizimini kullanabilir ve bunlar and ve or ile daha karmak bir ltler hlinde birletirebilirsiniz. rnein:
mysql> Select * form musteri where adi=aye or adi=fatma;

Bu rnekte musteri tablosunda adi aye veya Fatma olanlar listeleyecektir. rnek: Ad, Halil veya Nural veya Ahmet olan retmenlerin adnn ve adreslerinin grntlenmesi iin aadaki ifade yazlr:
mysql>select adi, adres from ogretmen where in (Halil,Nural,Ahmet);

rnek: Soyad ATAK ve cinsiyeti E olan rencilerin ad ve numaralarnn grntlenmesi iin aadaki ifade kullanlr:
mysql>select cinseyti=E; ad, ogrno from ogrenci where soyad=ATAK and

rnek: Snavdan 45ten kk olan rencilerin ad ve numarasnn grntlenmesi iin aadaki ifade kullanlr:
mysql>select adi, ogrno from ogrenci where not1<45;

rnek: Snav notundan 70 ile 100 aras not alan rencilerin ad ve numarasnn grntlenmesi iin aadaki ifade kullanlr:
mysql>select adi, ogrno from ogrenci where not2 between 70 and 100;

18

rnek: Doum tarihi 30/03/1995 olan rencilerin ad ve numarasnn grntlenmesi iin aadaki ifade kullanlr:
mysql>select adi, ogrno from ogrenci where dogum_tarihi=1995/03/30;

rnek: Soyad ER ile balayan rencilerin ad ve numarasnn grntlenmesi iin aadaki ifade kullanlr:
mysql>select adi, ogrno from ogrenci where soyadi like ER%;

rnek: Soyad AN ile biten rencilerin ad ve numarasnn grntlenmesi iin aadaki ifade kullanlr:
mysql>select adi, ogrno from ogrenci where soyadi like %AN;

rnek: Adnn iinde M geen rencilerin ad ve numarasnn grntlenmesi iin aadaki ifade kullanlr:
mysql>select adi, ogrno from ogrenci where adi like %M%;

rnek: Adnn iinde M gemeyen rencilerin ad ve numarasnn grntlenmesi iin aadaki ifade kullanlr:
mysql>select adi, ogrno from ogrenci where adi not like %M%;

rnek: Adnn NULL (bo) olmayan rencilerin ad ve numarasnn grntlenmesi iin aadaki ifade kullanlr:
mysql>select adi, ogrno from ogrenci where adi is not null;

Bir tablo sorguland zaman sonular birincil anahtara (primary key) gre sral gelmektedir. Sonularn sralamasn deitirmek mmkndr. ORDER BY btn MySQL ifadelerinde kullanlr.

Kullanm:
Select <alan adi> from <tablo adi> [where <koullar>] [order by alan1[, alan2, ]{asc|desc}];

rnek: renci tablosundaki kaytlar rencilerin adna gre sralayarak adnn, soyadnn ve numarasnn grntlenmesini salayan aadaki gibi yazlr (Bu sralamada renci bilgileri, adna gre adan zye doru sralanr.).
mysql>select adi,soyadi, ogrno from ogrenci where order by adi;

19

rnek: renci tablosundaki kaytlar rencilerin adna gre tersten (bykten ke) sralayarak adnn, soyadnn ve numarasnn grntlenmesini salayan aadaki gibi yazlr (Bu sralamada renci bilgileri, adna gre zden aya doru sralanr.).
mysql>select adi, soyadi, ogrno from ogrenci where order by adi desc;

ki veya Daha Fazla Tablonun Beraber Sorgulanmas (JOIN) Birden fazla tablodan ayn anda bilgi getirilmesi (alnmas) gerektiinde ortak alanlar zerinden birletirme yaplr. Birletirme ilemi koullar blmnde yaplr, ortak olan alanlar eletirilir. MySQL ifadelerinde alan isimlerinin nne tablo ad yazlr. Tablo ad ile alan ad arasna . (nokta) konulur. Kullanm: SELECT alan1[,alan2,] FROM tablo1,tablo2[tablo3,] tablo1.alan1=tablo2.alan1 [AND tablo2.alan2=tablo2.alan2,]; WHERE

rnek: musteri ve siparis adl iki tablo bulunmaktadr. Mterilerin adlarnn ve sipari verdikleri rnlerin kodlarnn, fiyatnn ve tutarnn grntlenmesi iin aadaki ifade kullanlr:
mysql>SELECT musteri.adi,siparis.urunkodu,siparis.fiyat,siparis.tutar FROM musteri,siparis, WHERE musteri.musteri_no=siparismusteri_no;

rnek: ogrenci ve notlar adl iki tablodan Ahmet adl rencinin iki yazl bir szl notlarnn grntlenmesi iin aadaki ifade kullanlr:
mysql>SELECT ogrenci.adi, notlar.y1, notlar.y2, notlar.s1 FROM ogrenci,notlar, WHERE ogrenci_no=notlar_no AND ogrenci.adi=Ahmet;

Tablo Adlarna Takma Ad (Alias) Verme Tablolara baka isimlerle seslenmek ounlukla kullanl, bazen de gereklidir. Tablolarn dier adlarna lakap (alias) denir. Bunlar bir sorgunun dnda oluturabilir ve sonra da kullanmaya devam edebilirsiniz. ounlukla ksa yazlrlar ve tercihen tablo adlarnn ilk harfleri kullanlr. Kullanacamz tablolar tanmlarken ilgili tablonun lakabn tanmlamak iin AS cmlecii ekleyebiliriz. Takma ad (lakap) iin FROMdan sonra tablo ad, bir boluk ve takma ad azlr. Takma ad verildikten sonra bilgi alanlar nne bu takma ad yazlr. Takma ad ile alan ad arasna yine . karakteri konulur. rnek: Mterilerin adnn, vermi olduu siparilerin tarihlerinin ve tutarnn grntlenmesi iin aadaki ifade yazlr:
mysql>SELECT m.adi,s.urunkodu,s.fiyat,s.tutar FROM musteri m, siparis s, WHERE m.musteri_no=s.musteri_no;

20

Kaytlar Gruplama (GROUP BY) ounlukla belirli bir kmenin iine ka satrn dtn veya baz stunlarn ortalama deerlerini (rnein, renci not ortalamas gibi) bilmek istersiniz. MySQLde bu tip bir sorguyu yantlamada kullanlan bir dizi gruplama fonksiyonu bulunmaktadr. Bu gruplama fonksiyonlar bir tabloya veya bir tablo iindeki veri gruplarna uygulanabilir. Bu gruplar zerinde eitli ilemler yaplabilir. Listelenecek bilgi alanlar mutlaka GROUP BY ifadesinden sonra belirtilmelidir. SUM, COUNT, AVG, MIN, MAX gibi fonksiyonlarla kullanlan alanlar GROUP BYdan sonra belirtilmez. Kullanm: SELECT alan1[,alan2,] FROM tablo1 GROUP BY alan1[,alan2,]; rnek: Her mterinin mteri numaras ve yapm olduu siparilerin toplam tutarnn grntlenmesi iin aadaki ifade yazlr:
mysql>SELECT musteri_no; musteri_no, SUM (tutar) FROM siparis GROUP BY

rnek: Bir okuldaki kz ve erkek renci saysnn grntlenmesi iin aadaki ifade yazlr:
mysql>SELECT cinsiyeti, COUNT (*) FROM ongrenci GROUP BY cinsiyeti;

rnek: Bir okulun her snfnda kaar renci olduunun grntlenmesi iin aadaki ifade yazlr:
mysql>SELECT sinif, COUNT (*) FROM sinif GROUP BY sinif;

Gruplar zerinde Koullu Sorgulama (HAVING) Gruplanm veriler ierisinde belli koula uyanlar sorgulanacaksa MySQL cmlesinde HAVING ifadesi ile koullar yazlr. Bu tr SQL cmlelerinde WHERE ile yazlan koullar varsa ncelikle bunlar gz nne alnr, sonra gruplama ilemi yaplr. Gruplama sonunda da HAVING ile verilen koullara uygun kaytlar listelenir. HAVING ile verilecek koullar mutlaka GROUP BY yanna yazlan alanlar olmaldr. rnek: 5 ten az siparite bulunan mterilerin numarasnn grntlenmesi iin aadaki ifade yazlr:
mysql>SELECT musteri_no, COUNT(*)FROM siparis GROUP BY musteri_no HAVING count(*)<5;

21

1.6. Delete Kullanm


MySQL veri tabannda kayt silmek ok kolaydr. Girilen bilgileri silmek iin delete komutu kullanlr. Kullanm: DELETE [LOW_PRIORITY] [QUICK ] [IGNORE] FROM tablo_adi [WHERE koul] [ORDER BY satr_stun] [LIMIT sayi] rnek: Tablodaki tm verileri (satrlar) silmek iin aadaki ifadeyi yazmak yeterlidir. Tm veriler silineceinde dikkatli kullanlmaldr (musteri tablosundaki tm bilgiler silinir.).
mysql> delete * from musteri;

rnek: Aadaki SQL komutu kullanicilar tablosundaki bolum bilgisi bilgisayar olan tm kullanclar ile ilgili satrlar silecektir.
mysql> delete * from kullanicilar where bolum=bilgisayar;

rnek: Aadaki SQL komutu ogrenci tablosundaki ad bilgisi mesut olan tm renciler ile ilgili satrlar silecektir.
mysql> delete * from ogrenci where ad=mesut;

1.7. Update Kullanm


Veri tabanndan veri almann yan sra, ounlukla bu verileri deitirmek de isteriz. rnein renci veri tabanndaki renci veli adres bilgisini deitirmek isteye biliriz. Bu ve benzeri gncelleme (deitirme) ilemleri iin UPDATE ifadesi kullanlr. Kullanm: UPDATE tablo_adi SET ala1=deer1,[,alan2=deer2,] [WHERE koul cmlesi] ; Temel olarak tablo_adi adl tabloyu gncellemek, adlandrlan stunlarn her birini uygun deyime ayarlamaktr. Bir UPDATE, bir WHERE cmlecii kullanlarak belirli satrlarla snrlandrlabilir. NOT: Burada Where ifadesi kullanlmaz ise tablodaki btn kaytlar gncellenir, koul yazlrsa o koula uygun kaytlar gncellenir. Koul ksmna dikkat edilmesi gereklidir, nk istenmeyen sonular dourabilir. Bir kaytta dzeltme yapacanz yere btn kaytlarn ieriklerini deitirebilirsiniz. 22

rnek: Bir kitap sat yapan maaza, kitap fiyatlarn % 15 artrmak istiyor. Bunun iin kitap veri tabanndaki fiyat alan zerinde gncelleme yapmak gerekecektir.
mysql>update kitap set fiyat=fiyat*1.15;

rnek: renci numaras 127 olan rencinin doum tarihini 03/12/1997 olarak deitirecek MySQL kodu aadaki gibi olacaktr:
mysql>update ogrenci set dogum_tarihi=1995/03/12 mysql>where ogrno=127;

1.8. Alter Kullanm


Alter Table (Tablo Gncelleme) Alter Table, bir tablonun tanmn deitirir. Veri tabanndaki satrlar gncellemeye ek olarak, veri taban iindeki tablolarn yapsn da deitirmek gerekebilir. Bu ama iin ALTER TABLE ifadesi kullanlr. MySQL ile bir tabloda istediiniz kadar deiiklik yapabilirsiniz. Deitirme cmleciklerinin her biri tablonun farkl ynlerini deitirmek iin kullanlabilir. Alter Tablenin eitli alt kullanmlar vardr. Kullanm:
ALTER [IGNORE] TABLE tbl_name alter_specification [, alter_specification] ... alter_specification: table_option ... | ADD [COLUMN] column_definition [FIRST | AFTER col_name ] | ADD [COLUMN] (column_definition,...) | ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]]PRIMARY KEY [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]]UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]]FOREIGN KEY [index_name] (index_col_name,...)[reference_definition] | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} | CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name] | MODIFY [COLUMN] column_definition [FIRST | AFTER col_name] | DROP [COLUMN] col_name | DROP PRIMARY KEY | DROP {INDEX|KEY} index_name | DROP FOREIGN KEY fk_symbol | DISABLE KEYS | ENABLE KEYS

23

| | | | | |

RENAME [TO] new_tbl_name ORDER BY col_name [, col_name] ... CONVERT TO CHARACTER SET charset_name [COLLATE collation_name] [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name] DISCARD TABLESPACE IMPORT TABLESPACE

index_col_name: col_name [(length)] [ASC | DESC] index_type: USING {BTREE | HASH}

ALTER TABLE fadesiyle Yaplabilen Deiiklikler Sz Dizimi Aklama ADD [COLUMN] column_definition Belirtilen konuma yeni bir stun ekler. column_definitionn bir ad [FIRST | AFTER col_name ] ve tipe ihtiya duyar. ADD [COLUMN] Tablonun sonuna bir veya daha fazla (column_definition,...) stun ekler. ADD {INDEX|KEY} [index_name] Tabloda belirtilen stun veya stunlar [index_type] zerinde bir index oluturur. (index_col_name,...) ADD [CONSTRAINT [symbol]]PRIMARY KEY Belirtilen stun veya stunlar tablonun [index_type] birincil anahtar yapar. (index_col_name,...) ADD [CONSTRAINT [symbol]]UNIQUE [INDEX|KEY] Belirtilen stun ve stunlar zerinde [index_name] [index_type] tabloya benzersiz bir index ekler. (index_col_name,...) ADD [CONSTRAINT [symbol]]FOREIGN KEY Bir InnDB tablosuna yabanc bir anahtar [index_name] ekler. (index_col_name,...)[reference _definition] ALTER [COLUMN] col_name {SET Belirli bir stunun varsaylan deerini DEFAULT literal | DROP ekler veya kaldrr. DEFAULT} CHANGE [COLUMN] old_col_name Column adl stunu, listelenmi tanma column_definition [FIRST|AFTER sahip olacak ekilde listeler. col_name] MODIFY [COLUMN] CHANGE benzer. Adlar deil, stun column_definition [FIRST | tiplerini deitirmek iin kullanlr. AFTER col_name] DROP [COLUMN] col_name Belirtilen stunu siler. DROP PRIMARY KEY Birincil indexi siler. 24

DROP {INDEX|KEY} index_name DROP FOREIGN KEY fk_symbol DISABLE KEYS ENABLE KEYS RENAME [TO] new_tbl_name ORDER BY col_name [, col_name] CONVERT TO CHARACTER SET charset_name [COLLATE collation_name] [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name] DISCARD TABLESPACE IMPORT TABLESPACE

Belirtilen indexi siler. Yabanc anahtar siler. ndex gncelleme zelliinin etkinliini kaldrr. ndex gncelleme zelliini etkinletirir. Bir tabloyu yeniden adlandrr. Tabloyu satrlar belirli bir ekilde sralanm ekilde yeniden oluturur. Metin tabanl stunlarn hepsini belirtilen kmesine dntrr. Varsaylan karakter kmesini ayarlar. Bir InnDB dosyasnn temelini oluturan tablespace dosyasn siler. Bir InnDB dosyasnn temelini oluturan tablespace dosyasn yeniden oluturur.

Tablo 1.3: Alter Table ifadesiyle yaplabilen deiiklikler

rnek: Mteri tablosunda adlarn 25 karaktere kadar uzun olmasna izin verilmi olsun. Verileri almaya baladktan sonra baz isimlerin ok uzun olduu grlsn. Bu durum, stunu 50 karakter uzunluunda olacak ekilde deitirilerek dzeltilebilir.
mysql>alter table musteri modify ad char(50) not null;

ok sk ortaya kan bir durum, bir stun ekleme ihtiyacdr. rnek: Mteri tablosunda mterilerin e-mail adreslerini de almak istediimizi dnelim. tablomuzda byle bir stun nceden yoktu. Bu durumda yeni bir stun eklenecektir.
mysql>alter table musteri add email char(50) not null;

Eklenen bir stundan kurtulma istei de yine ok sk karlalan bir durumdur. Yukarda eklediimiz stunu aadaki gibi silebiliriz:
mysql>alter table musteri drop email;

rnek: renci kayt bilgileri iin oluturulmu olan ogrenci tablosunun adn, ogr olarak deitirmek iin u kodlar yazlr:
mysql>alter table ogrenci rename ogr;

25

rnek: Bir kirtasiye veri tabanndaki kitap adl alan adn book olarak deitirelim:
mysql>alter table kirtasiye change kitap book;

1.9. MySQL Fonksiyonlar


1.9.1. Standart Fonksiyonlar
AVG() Verilen alann aritmetik ortalamasn alr.
mysql>SELECT AVG(yas) FROM employee where bolum='Halkla likiler';

Yukardaki sorgu halkla ilikiler blmnde alan personelin ya ortalamasn verecetir. AVG() fonksiyonu, istenen alandaki verilerin aritmetik ortasn grntler.

SUM() Verilen alanlarn toplamn alr.


mysql>SELECT SUM(maas) FROM employee WHERE bolum='Bilgi lem';

Yukardaki sorgu, bilgi ilem blmnde alan tm personelin maalarnn toplamn grntler.

MIN() Verilen alann kaytlar arasndaki en kk deerini verir.


mysql>SELECT MIN(maas) AS enazmaas FROM employee WHERE bolum='Bilgi lem';

Yukardaki sorgu, bilgi ilem blmnda alan ve en dk maa alan personeli grntler.

MAX() Verilen alann kaytlar arasndaki en byk deerini verir.


mysql>SELECT MAX(maas) FROM employee WHERE bolum='Bilgi lem';

Yukardaki sorgu, bilgi ilem blmnda alan ve en yksek maa alan personelin maan grntler. 26

COUNT() Verilen alann kaytlar arasnda ka defa yazldn bulur.

Eer irketin basn yayn blmnde alan evli ve maa 500 YTLden az olan kiilerin saysn renmek istiyorsak aadaki sorgu iimizi grecektir.
mysql>SELECT COUNT(*) FROM employee medeni_hal='evli' AND bolum='Basn Yayn' WHERE maas<500 AND

ROUND () Verilen alann virglden sonraki deerini yuvarlar. Tam say ksmn verir.
mysql> select round(15.56); >16

1.9.2. Tarih ve Zaman Fonksiyonlar


ADDDATE Bu fonksiyon tarih hesaplama ilemleri iin kullanlr. Bu fonksiyonla ayn alan DATE_SUB() DATE_ADD() SUBDATE() fonksiyonlar vardr. ADDDATE() ve SUBDATE(), DATE_ADD() ve DATE_SUB() fonksiyonlarnn e anlamllardr. Bunu kullanmanz iin yazm formatnn sa tarafndaki tip DATE veya DATETIME olmaldr. Burada kullanlan tarih, DATETIME (tarihzaman) ya da DATE (tarih) deeridir. Bunlar balang deerini belirler. Yazm format INTERVAL deerini belirler.. Bu deer, balang deerine eklenir veya karlr.
Resim 1.4

Yazm format, bir iaretler grubudur. Bu negatif INTERVAL'ler iin '-' ile balayabilir. tip; ise bir anahtar kelimedir. Bu yazm formatnn nasl yorumlanacan gsterir. EXTRACT(tip FROM tarih) fonksiyonuyla INTERVAL tipini renebilirsiniz. Yazm formatnda gn, ay, yl, saat, dakika, saniye gibi deerleri ayrmada kullanlan iaretler yerine istediiniz noktalama iaretlerini kullanabilirsiniz. Aada verilen parametreler blmndeki yazm ekli nerilendir. 'Saatler: Dakikalar: Saniyeler' Yerine 'Saatler. Dakikalar. Saniyeler' veya 'Saatler, Dakikalar, Saniyeler' gibi kullanabilirsiniz. Fonksiyona girilen tarih deeri DATE ise ve hesaplamalarda kullandnz tip YEAR, MONTH ve DAY ise (yani TIME blmleri deilse); hesaplamalar sonucunda dndrlen deer DATE formatndadr. Bunun dndakilerde dndrlen deer TIME formatndadr. 27

Kullanm: ADDDATE(tarih,INTERVAL expr tip) ADDDATE(expr,gn) ADDDATE(tarih, INTERVAL yazm format tip) Bu fonksiyonla ayn alan dier fonksiyonlar DATE_SUB(tarih, INTERVAL yazm format tip) SUBDATE(tarih, INTERVAL yazm format tip) DATE_ADD (tarih, INTERVAL yazm format tip)
rnek:
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY); -> '1998-02-02' mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY); -> '1998-02-02'

Parametreler: Tip Ad MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QUARTER YEAR YAZIM FORMATI Mikrosaniyeler Saniyeler Dakikalar Saatler Gnler Haftalar Aylar eyrekler Yllar

SECOND_MICROSECOND Saniyeler.Mikrosaniyeler MINUTE_MICROSECOND Dakikalar.Mikrosaniyeler MINUTE_SECOND HOUR_MICROSECOND HOUR_SECOND HOUR_MINUTE DAY_MICROSECOND DAY_SECOND DAY_MINUTE DAY_HOUR YEAR_MONTH Dakikalar:Saniyeler Saatler.Mikrosaniyeler Saatler:Dakikalar:Saniyeler Saatler:Dakikalar Gnler.Mikrosaniyeler Gnler Saatler:Dakikalar:Saniyeler Gnler Saatler:Dakikalar Gnler Saatler Yllar-Aylar

Tablo 1.4: Tarih zaman parametreleri

28

rnek:
<?php $tarih = '2005-01-31'; $sql = mysql_query("SELECT ADDDATE('$tarih', INTERVAL 1 DAY) AS tari h"); $sonuc = mysql_fetch_object($sql); echo $sonuc->tarih; //Sonu: 2005-02-01 ?>

ADDTIME ADDTIME(expr,expr2) ADDTIME() fonksiyonu expr2 deerini expr deerine ekler ve sonucu dndrr. Kullanm: expr : TIME (zaman) ya da DATETIME (tarih, zaman) olabilir. expr2 : ise sadece TIME (zaman) dr. ADDTIME(expr,expr2)
rnek:
mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999', '1 1:1:1.000002'); -> '1998-01-02 01:01:01.000001' mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998'); -> '03:00:01.999997'

CURDATE Bu gnn tarihini 'YYY-MM-DD' veya 'YYYYMMDD' formatnda dndrr.


Kullanm:
mysql> SELECT CURDATE(); -> '1997-12-15' mysql> SELECT CURDATE() + 0; -> 19971215

CURRENT_DATE Bugnn tarihini 'YYYY-MM-DD' veya 'YYYYMMDD' formatnda verir. CURRENT_DATE ve CURRENT_DATE(), CURDATE() fonksiyonunun e anlamllardr.
Kullanm:
mysql> SELECT CURRENT_DATE(); -> '2005-10-03' mysql> SELECT CURRENT_DATE() + 0; -> 20051003

29

CURRENT_TIME CURRENT_TIME ve CURRENT_TIME() fonksiyonlar, CURTIME fonksiyonunun e anlamlsdr. CURRENT_TIMESTAMP CURRENT_TIMESTAMP ve CURRENT_TIMESTAMP(), NOW() fonksiyonunun e anlamllardr. Bunlar imdiki tarihi ve zaman verirler. Kullanm:
mysql>select CURRENT_TIMESTAMP(); ->2005-10-03 14:50:59 mysql>select CURRENT_TIMESTAMP; ->2005-10-03 14:50:59

CURTIME Geerli saati 'HH: MM: SS' veya 'HHMMSS formatnda dndrr. Kullanm:
mysql> SELECT CURDATE(); -> '1997-12-15' mysql> SELECT CURDATE() + 0; -> 19971215

DATE DATE (tarih) veya DATETIME (tarih, zaman) ifadesinden tarihi karr. Bu fonksiyon MySQL 4.1.1 de kullanlr. Kullanm:
mysql> SELECT DATE('2003-12-31 01:02:03'); -> '2003-12-31'

DATEDIFF ki tarih arasndaki fark alr. Kullanm:


mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30'); -> 1 mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31'); -> -31

DATE_ADD Bu fonksiyon tarih hesaplama ilemleri iin kullanlr. Bu fonksiyonla ayn alan DATE_SUB(), ADDDATE() ,SUBDATE() fonksiyonlar vardr. ADDDATE() ve SUBDATE(), DATE_ADD() ve DATE_SUB() fonksiyonlarnn e anlamllardr. Yazm format INTERVAL deerini belirler. Bu deer, balang deerine eklenir veya karlr. 30

Yazm formatnda gn, ay, yl, saat, dakika, saniye gibi deerleri ayrmada kullanlan iaretler yerine istediiniz noktalama iaretlerini kullanabilirsiniz. Aada verilen parametreler blmndeki yazm ekli nerilendir. 'Saatler: Dakikalar: Saniyeler' yerine 'Saatler. Dakikalar. Saniyeler' veya Saatler, Dakikalar, Saniyeler' gibi kullanabilirsiniz. Fonksiyona girilen tarih deeri DATE ise ve hesaplamalarda kullandnz tip YEAR, MONTH ve DAY ise hesaplamalar sonucunda dndrlen deer DATE formatndadr. Bunun dndakilerde dndrlen deer TIME formatndadr. DATE_ADD(date,INTERVAL expr type) DATE_ADD (tarih, INTERVAL yazm format tip) Bu fonksiyonla ayn alan dier fonksiyonlar DATE_SUB(tarih, INTERVAL yazm format tip) ADDDATE(tarih, INTERVAL yazm format tip) SUBDATE(tarih, INTERVAL yazm format tip) rnek: MySQLde tarih hesaplama ilemleri
<?php mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND; -> 1998-01-01 00:00:00 >Verilen DATETIME Deerine 1 Saniye Ekleniyor... mysql> SELECT INTERVAL 1 DAY + "1997-12-31"; -> 1998-01-01 -> Verilen DATE Deerine 1 Gn Ekleniyor mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND; -> 1997-12-31 23:59:59 > Verilen DATE veya DATETIME Deerine 1 Saniye Ekleniyor ve Sonucu DA TETIME Formatnda Veriyor. mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND); -> 1998-01-01 00:00:00 > Verilen DATETIME Deerine 1 Saniye Ekleniyor mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 DAY); -> 1998-01-01 23:59:59 ->Verilen DATETIME Deerine 1 Gn Ekleniyor mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL "1:1" MINUTE_SECOND); -> 1998-01-01 00:01:00 > Verilen DATETIME Deerine 1 Dakika 1 Saniye Ekleniyor mysql> SELECT DATE_SUB("1998-01-01 00:00:00", INTERVAL "1 1:1:1" DAY_SECOND); -> 1997-12-30 22:58:59 > Verilen DATETIME Deerinden 1 Gn 1 Saat:1Dakika:1 Saniye karlyor mysql> SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR); -> 1997-12-30 14:00:00 > Verilen DATETIME Deerinden 1 Gn, 1 Saat karlyor mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); -> 1997-12-02 -> Verilen DATE Deerinden 31 Gn karlyor

31

?>

rnek: DATE_ADD() kullanm rnekleri


<?php /* MySQL'deki tarih alan datetime olarak ayarlandn varsayarsak +---------------------+ | tarihalani | +---------------------+ | 2004-12-31 23:59:59 | +---------------------+ */ $sorgu = mysql_query("SELECT tarihalani + INTERVAL 1 SECOND"); //Ta rihe 1 Saniye Ekler // '2005-01-01 00:00:00' $sorgu = mysql_query("SELECT INTERVAL 1 DAY + tarihalani"); //Tarihe 1 Gn Ekler // '2005-01-01' $sorgu = mysql_query("SELECT tarihalani INTERVAL 1 SECOND; //Tarihten 1 Saniye karr // '2004-12-31 23:59:58' $sorgu = mysql_query("SELECT DATE_ADD(tarihalani,INTERVAL 1 SECON D); //Tarihe 1 Saniye Ekler // '2005-01-01 00:00:00' $sorgu = mysql_query("SELECT DATE_ADD(tarihalani,INTERVAL 1 DAY)") ; //Tarihe 1 Gn Ekler // '2005-01-01 23:59:59' $sorgu = mysql_query("SELECT DATE_ADD(tarihalani,INTERVAL '1:1' MINU TE_SECOND)");//Tarihe 1 Dakika 1 Saniye Ekler // '2005-01-01 00:01:00' $sorgu = mysql_query("SELECT DATE_ADD(tarihalani,INTERVAL '1 10' DAY_HOUR)"); //Tarihden 1 Gn 10 Saat karr // '2004-12-30 14:59:59' $sorgu = mysql_query("SELECT DATE_ADD('1992-1231 23:59:59.000002',INTERVAL '1.999999' SECOND_MICROSECOND)");//T arihden 1 Saniye 999999 Mikrosaniye Ekler // '1993-01-01 00:00:01.000001' ?>

DATE_FORMAT MySQL'de tarihleri dntrmek iin kullanlr. DATE_FORMAT() fonksiyonu PHP fonksiyonuna benzer ekilde alr, ancak farkl biimlendirme kodlar kullanr. MySQL'deki tarih ve saatler ISO 8601 biimi kullanlarak ilenir. ISO 8601'de tarihlerin, yl nce olacak ekilde girilmesi gerekir. YYYY-AA-GG SS:DD:SS rnek 2005'in Haziran ay 32

iin 2005-06-01 olarak girilmelidir. Bu ISO 8601 tarih formatn, GG.AA.YYYY ekline getirmek iin bu fonksiyondan yararlanabilirsiniz

Parametreler: %M : Ay, tm metin (January...December) %W : Gn ad, tm metin. (Sunday...Saturday) %D : Ayn gn, saysal, metin sonekiyle birlikte (rnein, 1st) %Y : Yl, saysal, 4-basamakl %y : Yl, saysal, 2-basamakl %a : Gn ad, 3-karakter (Sun...Sat) %d : Ayn gn, saysal, bata sfr var.. (00...31) %e : Ayn gn, saysal, bata sfr yok...(0...31) %m : Ay, saysal, bata sfr var.. (00...12) %c : Ay, saysal, bata sfr yok... (0...12) %b : Ay, metin, 3-karakter(Jan...Dec) %j : Yln gn, saysal..&amp;nbsp; %H : Saat, 24-saat, bata sfr var&amp;nbsp; %k : Saat, 24-saat, bata sfr yok&amp;nbsp; %h ya da %I : Saat, 12-saat, bata sfr var&amp;nbsp; %l : Saat, 12-saat, bata sfr yok..&amp;nbsp; %i : Dakika, saysal, bata sfr var.&amp;nbsp; %r : Zaman, 12-saat (hh:mm:ss [AM|PM])&amp;nbsp; %T : Zaman, 24-saat (hh:mm:ss)&amp;nbsp; %S ya da %s : Saniye, saysal, bata sfr var... (00...59) %p : AM veya PM&amp;nbsp; %w : Haftann gn, saysal, 0'dan (Sunday) 6'ya (Saturday) kadar... rnek: MySQL Tarih Biimini ekillendirme
<?php /* Dosyalar veri tabanndaki uyeler Tablosunu Kullandnz Varsayarsak +--------+---------------------+ | uyeadi | kayittarihi | +--------+---------------------+ | ali | 2005-05-14 15:20:00 | +--------+---------------------+ | veli | 2005-06-14 15:20:00 | +--------+---------------------+ */ $sorgu = mysql_query("SELECT DATE_FORMAT(kayittarihi, '%d.%m.%Y %H:%i:%s') AS kayittarihi FROM uyeler",$baglanti); //MySQL Tarih Alan Bi imlendiriliyor while($veri = mysql_fetch_array($sorgu) { echo $veri["kayittarihi"];

33

} //Sonu //14.05.2005 15:20:00 //14.06.2005 15:20:00 ?>

rnek: UNIXTIME Alann Dzenleme


<?php /* Dosyalar Klasrndeki uyeler Tablosunu Kullandnz Varsayarsak... +--------+---------------------+ | uyeadi | kayit_tarihi | +--------+---------------------+ | ali | 1116076800 | +--------+---------------------+ */ require("ayar.php"); require("baglan.php"); $sorgu = mysql_query("SELECT DATE_FORMAT(FROM_UNIXTIME(kayit_t arihi), '%d.%m.%Y %H:%i:%s') AS kayit_tarihi FROM uyeler"); //Unixtime Zaman Biimi Dzenleniyor $veri = mysql_fetch_array($sorgu) echo $veri["kayit_tarihi"]; //Sonu //14.05.2005 15:20:00 ?>

DATE_SUB Bu fonksiyon, tarih hesaplama ilemleri iin kullanlr. Bu fonksiyonla ayn alan DATE_ADD() ADDDATE() SUBDATE() fonksiyonlar vardr. ADDDATE() ve SUBDATE(), DATE_ADD() ve DATE_SUB() fonksiyonlarnn e anlamllardr. Burada kullanlan tarih, DATETIME (tarih,zaman) ya da DATE (tarih) deeridir. Bunlar balang deerini belirler. Yazm format INTERVAL deerini belirler. Bu deer balang deerine eklenir veya karlr. Kullanm: DATE_SUB(date,INTERVAL expr type) DATE_SUB(tarih, INTERVAL yazm format tip) Bu fonksiyonla ayn alan dier fonksiyonlar DATE_ADD (tarih, INTERVAL yazm format tip) ADDDATE(tarih, INTERVAL yazm format tip) SUBDATE(tarih, INTERVAL yazm format tip) 34

DAY Bu fonksiyon DAYOFMONTH() fonksiyonunun e anlamlsdr. DAYNAME Tarih iin hafta gnlerinin ismini verir ( ngilizce olarak ). DAYNAME(tarih)
mysql> select DAYNAME("2005-08-22"); -> 'Monday'

DAYOFMONTH Geerli tarih iin ayn gnn verir (1-31 aralnda). DAYOFMONTH(tarih)
mysql> select DAYOFMONTH('1998-02-03'); -> 3

DAYOFWEEK DAYOFWEEK(tarih) Haftann gnn dndrr. Geerli tarih iin: (1=Pazar, 2= Pazartesi, ......7= Cumartesi) Bu deerler, ODBC standardyla ayndr.
mysql> select DAYOFWEEK('1998-02-03'); -> 3

Kullanm:
mysql> select DAYOFWEEK('1998-02-03'); -> 3

DAYOFYEAR Geerli tarih iin yln gn saysn dndrr (1-366). DAYOFYEAR(tarih)


mysql> select DAYOFYEAR('1998-02-03'); -> 34

EXTRACT Bu fonksiyon, ayn DATE_ADD() ve DATE_SUB() fonksiyonlarndaki INTERVAL tiplerini kullanr. Yalnz tarih hesaplamalar yerine tarihten paylar karr.

EXTRACT(typ FROM tarih)


rnek: EXTRACT() Kullanm rnekleri

35

<?php $sql1 = mysql_query("SELECT EXTRACT(YEAR FROM '2005-1003') AS tarih"); $sonuc = mysql_fetch_object($sql1); echo $sonuc->tarih; //2005 $sql2 = mysql_query("SELECT EXTRACT(YEAR_MONTH FROM '2005-1003 15:25:00') AS tarih"); $sonuc = mysql_fetch_object($sql2); echo $sonuc->tarih; //200510 $sql3 = mysql_query("SELECT EXTRACT(DAY_MINUTE FROM '2005-1003 15:25:00') AS tarih"); $sonuc = mysql_fetch_object($sql3); echo $sonuc->tarih; //31525 ?>

HOUR Geerli zamann saatini dndrr (023 arasnda). HOUR(zaman)


mysql> select HOUR('10:05:03'); -> 10

MINUTE Geerli zaman iin dakikay verir (0-59). MINUTE(zaman)


mysql> select MINUTE('98-02-03 10:05:03'); -> 5

MONTH Datetime formatndaki tarihin ayn 1-12 eklinde dndrr. Kullanm: MONTH(tarih) mysql> SELECT MONTH('19980203'); -> 2 rnek: MONTH () Kullanm
<?php /* MySQL'deki tarih alan datetime olarak ayarlandn varsayarsak. +---------------------+ | tarihalani | +---------------------+ | 2005-06-14 15:20:00 | +---------------------+ */

36

$sorgu = mysql_query("SELECT MONTH(tarihalani) AS tarih_alani FROM t abloadi"); $sonuc = mysql_fetch_array($sorgu); echo $sonuc["tarih_alani"]; //kts 6 Olacaktr ?>

MONTHNAME Tarih iin aylarn ismini verir (ngilizce olarak). MONTHNAME(tarih)


mysql> select MONTHNAME("1998-02-05"); -> 'February'

NOW imdiki zaman 'YYYY-MM-DD HH:MM:SS' veya YYYYMMDDHHMMSS formatnda verir. NOW() rnek: NOW() Kullanm rnekleri
mysql> SELECT NOW(); -> '1997-12-15 23:50:26' mysql> SELECT NOW() + 0; -> 19971215235026

QUARTER Geerli tarih iin yln kanc eyrei olduunu (1-4) dndrr. QUARTER(tarih)
mysql> select QUARTER('98-04-01'); -> 2

SECOND Zaman iin saniyeyi verir (0-59). SECOND(zaman)


mysql> select SECOND('10:05:03'); -> 3

TIME_TO_SEC Fonksiyona verilen saat argmann saniyeye evirir. TIME_TO_SEC(saat)


mysql> SELECT TIME_TO_SEC('22:23:00'); -> 80580 mysql> SELECT TIME_TO_SEC('00:39:38'); -> 2378

37

WEEK Fonksiyon tek argmanla geerli tarihin kanc hafta olduunu verir (0-53 aralnda). (Baz yerlerde 53 haftann balangc da olabilir.) Baz yerlerde Pazar, haftann ilk gndr. kinci argmanla WEEK() fonksiyonunda haftann pazar veya pazartesi ile balayacan belirleyebilirsiniz. kinci argman sfr (0) olursa hafta pazar gnleri balar, 1 olursa pazartesi gnleri balar. WEEK(tarih), WEEK(tarih,ilkgn)
mysql> select -> 7 mysql> select -> 7 mysql> select -> 8 mysql> select -> 53 WEEK('1998-02-20'); WEEK('1998-02-20',0); WEEK('1998-02-20',1); WEEK('1998-12-31',1);

WEEKDAY Geerli tarih iin haftann gnn verir (0 = Pazartesi, 1= Sal, .....6= Pazar). WEEKDAY(tarih)
mysql> select WEEKDAY('19971004 22:23:00'); -> 5 mysql> select WEEKDAY('199711-05'); -> 2

YEAR Geerli tarihin yln dndrr (1000-9999). YEAR(tarih) mysql> select YEAR('98-02-03'); -> 1998 YEARWEEK Geerli tarihin yl ve hatfasn dndrr. kinci argman, WEEK() fonksiyonundaki ikinci argman ile ayn alr. (ikinci argman sfr (0) olursa hafta pazar gnleri balar, 1 olursa pazartesi gnleri balar) Dikkat edilmesi gereken, senenin ilk ve son haftasndaki yl, argmanda verilen tarihteki seneden farkl olabilir. YEARWEEK(tarih), YEARWEEK(tarih,ilk)
mysql> select YEARWEEK('1987-01-01'); -> 198653

38

1.9.3. Karlatrma Fonksiyon ve Operatrleri


Eittir
mysql> -> 0 mysql> -> 1 mysql> -> 0 mysql> -> 0 mysql> -> 1

=
SELECT 1 = 0; SELECT 0 = 0; SELECT 0.0 = 0; SELECT 0.01 = 0; SELECT .01 = 0.1 ;

Eit Deildir

<>, !=

mysql> SELECT .01 <> 0.01; -> 1 mysql> SELECT .01 <> 0.01; -> 0 mysql> SELECT zapp <> zappp; -> 1

Kktr veya Eittir

<=

mysql>SELECT 0.1 <= 2; -> 1

Kktr

<

mysql> SELECT 2 < 2; -> 1

Byktr veya eittir

>=

mysql> SELECT 2 >= 2; -> 1 mysql>SELECT 2 > 2; -> 1

Byktr

>

GREATEST(deer1,deer2,.......) ki veya daha fazla deer verildiinde en byk olan deeri seer. LEAST() komutuyla ayn ekilde kullanlr.
mysql>SELECT GREATEST (2 , 0); ->2 mysql>SELECT GREATEST (34.0 , 3.0 , 5.0 , 767.0); ->767.0

39

MySQL 5.0.13 ten nce, GREATEST() fonksiyonu sadece dier deerlerin hepsi geersiz duruma getiinde geersiz oluyordu. 5.0.13te deerlerden herhangi biri geersiz olduunda hemen geersiz oluyor. IN expr IN (deer,...) Verilen expr deerlerin herhangi birine eitse 1 deilse 0 verir.
mysql> SELECT 2 IN (0, 3, 5, 6); -> 0 mysql> SELECT wefwf IN (weee, wefwf, whfk); -> 1

INTERVAL (N,N1,N2,N3...) Eer N<N1 ise 0; eer N<N2 ise +1; eer N NULL ise -1 deerini alr ve alnan deerler toplanr. Fakat bu fonksiyonun doru olarak alabilmesi iin N1<N2<N3.....<Nn olmaldr.
mysql> SELECT INTERVAL ( 23, 1, 15, 17, 30, 44, 200 ); -> 3 mysql> SELECT INTERVAL ( 10, 1, 10, 100, 1000 ); -> 2 mysql> SELECT INTERVAL ( 22, 23, 30, 44, 200 ); ->0

LEAST (deer1, deer2) ki ya da daha fazla deerlikten en kk olann seer. Eer girilen deerler string ise harf srasna gre bulacaktr.
mysql> SELECT LEAST ( 2, 0 ); -> 0 mysql> SELECT LEAST ( 3.0, 34.0, 5.0, 767.0 ); -> 3.0 mysql> SELECT LEAST ( B, A, C ) -> A

1.9.4. Mantksal Operatrler


SQLde mantksal operatrler TRUE, FALSE VE NULL terimlerinden oluur. MySQLde ise 1(TRUE), 0(FALSE) ve NULL terimleri kullanlr.

40

NOT (DEL) ! Lojik DEL KAPISI na eittir. 1 girilirse k 0; 0 girilirse k 1 yapar.


mysql> SELECT -> 0 mysql> SELECT -> 1 mysql> SELECT -> NULL mysql> SELECT -> 0 mysql> SELECT -> 1 NOT 10 ; NOT 0 ; NOT NULL; NOT ! (1+1); NOT ! 1 + 1;

En son verilen rnekte sonu 1 dir, nk ( ! 1) + 1 deerine eittir. AND (VE) && Lojik VE KAPISIna eittir. Girilerden herhangi biri 0 ise k deerini 0 verir.
mysql> SELECT -> 1 mysql> SELECT -> 0 mysql> SELECT -> NULL mysql> SELECT -> 0 mysql> SELECT -> 0 1 && 1 ; 1 && 0 ; 1 && NULL ; 0 && NULL ; NULL && 0 ;

OR (VEYA) | | Lojik VEYA KAPISIna eittir. Girilerden herhangi birisi 1 olduunda k deerini 1 verir.
mysql> SELECT -> 1 mysql> SELECT -> 1 mysql> SELECT -> 0 mysql> SELECT -> NULL mysql> SELECT -> 1 1 || 1 ; 1 || 0 ; 0 || 0 ; 0 || NULL ; 1 || NULL ;

41

XOR (ZEL VEYA) Lojik olarak ZEL VEYA KAPISInn yapt ii grr. Giriler ayn olduunda k deerini 0; dier durumlarda 1 verir.
mysql> SELECT -> 0 mysql> SELECT -> 1 mysql> SELECT -> NULL mysql> SELECT -> 1 1 XOR 1 ; 1 XOR 0 ; 1 XOR NULL ; 1 XOR 1 XOR 1 ;

Matematiksel olarak ( a AND ( NOT b)) OR (( NOT a ) AND b) deerine eittir.

1.9.5. Kontrol Mekanizmalar ve Karakter Fonksiyonlar


1.CASE deer WHEN [ deeri karlatr ] THEN sonu [ WHEN [ deeri karlatr ] THEN sonu ...] [ELSE sonu ] END 2. CASE WHEN [ durum ] THEN sonu [when [ durum ] THEN sonu ...] [ELSE sonu ] Birincisinde eer deer karlatrlacak deere eitse sonuta sylenen durumu yapar. Eer deer karlatrlacak durumlara eit deilse ELSE komutu ile sylenen sonucu yaptrr. kincisinde ise, eer durum gerekleiyorsa sonuta syleneni yapar. Eer durum gereklemiyorsa yine ELSE komutundan sonra sylenen ii yapar.
mysql> SELECT CASE 1 WHEN 1 THEN one -> WHEN 2 THEN two ELSE more END; -> one mysql> SELECT CASE 1>0 THEN true ELSE false END; -> true mysql> SELECT CASE BINARY B -> WHEN a THEN 1 WHEN b THEN 2 END; -> NULL

42

IF(expr1, expr2, expr3)


Mysql> SELECT IF ( 1 > 2 , 1, 0); -> 0 mysql> SELECT IF ( 1 < 2, YES, NO ); -> YES mysql> SELECT IF (STRCMP(test, test1), no, yes ); -> no

expr1de yazan eer doruysa expr2; deilse exper3de yazan uygular. ASCII ( str ) Eer girilen deer null bir ifade deilse deerin asc kodunu verir( 0 255 ). BIN(N) Girilen sayy BINARY say sistemine evirir.
mysql> SELECT BIN ( 12 ); -> 1100

BIT_LENGHT (str) Girilen deerin ka bitlik olduunu bulur.


mysql> SELECT BIT_LENGHT (text) -> 32

CHAR (N,....) Girilen asc kodlar karakterlere dntrr.


mysql> SELECT CHAR ( 77, 121, 83, 81, 76 ); -> MySQL mysql> SELECT CHAR ( 77, 77.3, 77.3 ); -> MMM

CONCAT( str1, str2,... ) String toplama yapar. Eer deerlerden herhangi birisi null bir ifade ise null olan ifadeyi seer.
mysql> SELECT CONCAT ( My, S, QL ); -> MySQL mysql> SELECT CONCAT ( My, NULL, QL ); -> NULL mysql> SELECT CONCAT ( 14.3 ); - > 14.3

43

CONCAT_WS ( separator, str1, str2,...) Tpk CONCAT fonksiyonunda olduu gibi string toplama yapar, fakat bunun tek fark deerler arasna istediimiz bir karakter koyabilmemizdir. Eer deerlerin arasnda bir null deer varsa onu pas geer ve bir sonrakiyle birletirir.
mysql> SELECT CONCAT_WS ( , , First name, Second name, Last name ); -> First name, Second name, Last name mysql> SELECT CONCAT_WS ( , , First name, NULL, Last name ); -> First name, Last name

ELT ( N, str1, str2, strn,...) N=1 ise str1i, N=2 ise str2i, N=n ise strni seer. mysql> -> mysql> -> SELECT ELT ( 1, ej, der, alp); ej SELECT ELT ( 4, ej, der, alp); alp

FIELD ( str, str1, str2,str3,... ) Eer strdeki yaz dierlerinin iinde varsa ka numaral str de olduunu verir. Eer str dierlerinin iinde yoksa 0 verir. mysql> -> mysql> -> SELECT FIELD ( ej, hej, ej, foo); 2 SELECT FIELD ( ej, hej, lej, foo); 0

FIND_IN_SET ( str, strlist) Verilen strnin strlist iinde kanc srada olduunu bulur. mysql> SELECT FIND_IN_TEXT ( b, a, b, c, d); -> 2 FORMAT ( X, D ) #,###,###.## diye bir X saysnn olduunu varsayalm. D says bu saynn ondalkl ksmn yuvarlar veya 0 koyarak ondalkl ksmdaki D tane say olmasn salar. Eer D sfr ise ondalkl ksm kalkar. Mysql> -> mysql> -> mysql> -> SELECT FORMAT ( 12332.123456, 4 ); 12,332.1235 SELECT FORMAT ( 12332.1, 4); 12,332.1000 SELECT FORMAT ( 12332.2, 0); 12,332 44

INSERT(str,pos,len,newstr) Verilen metin ierisine istenilen posizyondan itibaren iareti iinde verilen deeri yazar.
mysql> SELECT INSERT('Quadratic', 3, 4, 'What'); -> 'QuWhattic' mysql> SELECT INSERT('Quadratic', -1, 4, 'What'); -> 'Quadratic' mysql> SELECT INSERT('Quadratic', 3, 100, 'What'); -> 'QuWhat'

LEFT(str,len) Parantez ierisinde verilen metnin, verilen karakter says kadarn soldan itibaren alr.
mysql> SELECT LEFT('foobarbar', 5); -> 'fooba'

LENGTH(str) (trnak) iinde verilen string ifadenin saysn verir.


mysql> SELECT LENGTH('text'); -> 4

LOWER(str) Byk harflerle yazlan string ifadeyi kk harflere evirir.


mysql> SELECT LOWER('QUADRATICALLY'); -> 'quadratically'

LTRIM(str) Yazlan string ifadenin solunda bulunan boluu siler.


mysql> SELECT LTRIM(' barbar'); -> 'barbar'

RTRIM(str) Yazlan string ifadenin sanda bulunan boluu siler.


mysql> SELECT LTRIM(barbar -> 'barbar' ');

MID(str,pos,len) Verilen string, soldan belirtilen pozisyonundan itibaren belirtilen kadar karakterini alr. REPEAT(str,count) Trnak iinde verilen karakteri istendii kadar yazdrr.
mysql> SELECT REPEAT('MySQL', 3); -> 'MySQLMySQLMySQL'

REVERSE(str) Verilen string ifadeyi tersinden yazdrr.


mysql> SELECT REVERSE('abc'); -> 'cba'

45

RIGHT(str,len) Verilen string iinden sadan verilen deer kadar olan karakteri alr.
mysql> SELECT RIGHT('foobarbar', 4); -> 'rbar'

SPACE(N) Verilen saysal deer kadar boluk verir.


mysql> SELECT SPACE(6); -> ' '

UPPER(str) Verilen string ifadeyi tamamen byk karakterlere evirir.


mysql> SELECT UPPER('Hej'); -> 'HEJ'

1.9.6. Aritmetik Operatrler


Toplama
mysql> SELECT 3+5; -> 8

karma
mysql> SELECT 3-5; -> -2

Negatif say (devamndaki sayy negatif yapar)


mysql> SELECT - 2; -> -2

arpma
mysql> SELECT 3*5; -> 15 mysql> SELECT 18014398509481984*18014398509481984.0; -> 324518553658426726783156020576256.0

Blme
mysql> SELECT 3/5; -> 0.60

Sfra blme hatas olduunda sonuta NULL deeri dner.


mysql> SELECT 102/(1-1); -> NULL

DIV Tam blme; blme ilemi sonunda virgl ksm atlr, tam ksm yazar.
mysql> SELECT 5 DIV 2; -> 2

46

N%M Kalan bulma; N bl M. ileminden kalan verir.

1.9.7. Matematiksel Fonksiyonlar


ABS(X) Verilen saysal deerin mutlak deerini verir.
mysql> SELECT ABS(2); -> 2 mysql> SELECT ABS(-32); -> 32

ACOS(X) Verilen deerin arc cosine deerini verir.


mysql> SELECT ACOS(1); -> 0 mysql> SELECT ACOS(1.0001); -> NULL mysql> SELECT ACOS(0); -> 1.5707963267949

ASIN(X) Verilen deerin arc sinus deerini verir.


mysql> SELECT ASIN(0.2); -> 0.20135792079033 mysql> SELECT ASIN('foo'); +-------------+ | ASIN('foo') | +-------------+ | 0| +-------------+ 1 row in set, 1 warning (0.00 sec) mysql> SHOW WARNINGS; +---------+------+-----------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------+ | Warning | 1292 | Truncated incorrect DOUBLE value: 'foo' | +---------+------+-----------------------------------------+

ATAN(X) Verilen deerin arc tangent deerini verir. mysql> SELECT ATAN(2); -> 1.1071487177941 mysql> SELECT ATAN(-2); -> -1.1071487177941

47

COS(X) Radians deeri verilen deerin cosinusini verir. mysql> SELECT COS(PI()); -> -1 COT(X) Verilen deerin cotangant deerini verir.
mysql> SELECT COT(12); -> -1.5726734063977 mysql> SELECT COT(0); -> NULL

DEGREES(X) Verilen deikenini deerini radyandan derceye dtrr.


mysql> SELECT DEGREES(PI()); -> 180 mysql> SELECT DEGREES(PI() / 2); -> 90

LN(X) LOG(X), LOG(B,X) X deiken deerinin doal logaritmasn verir.


mysql> SELECT LN(2); -> 0.69314718055995 mysql> SELECT LN(-2); -> NULL mysql> SELECT LOG(2); -> 0.69314718055995 mysql> SELECT LOG(-2); -> NULL

MOD(N,M), N % M, N MOD M N deerinin M. deerine blmnden kalann verir.


mysql> -> 4 mysql> -> 1 mysql> -> 2 mysql> -> 2 SELECT MOD(234, 10); SELECT 253 % 7; SELECT MOD(29,9); SELECT 29 MOD 9;

PI ( X) PI saysnn deerini verir.


mysql> SELECT PI(); -> 3.141593 mysql> SELECT PI()+0.000000000000000000; -> 3.141592653589793116

48

RADIANS(X) X deikenin deeri dereceden radyana dntrr.


mysql> SELECT RADIANS(90); -> 1.5707963267949

TAN(X) Radyan olarak verilen deerin tanjantn verir.


mysql> SELECT TAN(PI()); -> -1.2246063538224e-16 mysql> SELECT TAN(PI()+1); -> 1.5574077246549

SQRT(X) X deerinin karekkn verir (Negatif saylarn karekk olmaz.).


mysql> SELECT SQRT(4); -> 2 mysql> SELECT SQRT(20); -> 4.4721359549996 mysql> SELECT SQRT(-16); -> NULL

SIGN(X) Deikenlerin iaretlerini verir ( -1 say negatifse 0 sfr olduunda veya 1 say pozitif olduunda).
mysql> SELECT SIGN(-32); -> -1 mysql> SELECT SIGN(0); -> 0 mysql> SELECT SIGN(234); -> 1

SIN(X) Radyan olarak verilen deerin sinsn verir.


mysql> SELECT SIN(PI()); -> 1.2246063538224e-16 mysql> SELECT ROUND(SIN(PI())); -> 0

49

UYGULAMA FAALYET UYGULAMA FAALYET


MAGAZA

MUSTERI

URUN urun_no markasi urun_adi Urun_fiyat

SIPARIS
Musteri_no Siparis_tarihi Urun_kodu fiyat miktar tutar

Musteri_no adi soyadi kart_no zaman

ekil 1.2

lem Basamaklar Yukardaki ekle gre MAGAZA adl bir veri taban oluturunuz. musteri, urun ve siparis adl tablolar oluturunuz. Her tabloya beer kayt giriniz. Girilen kaytlardan urun fiyat 25YTL olan rnleri listeleyiniz. Mteri ad Mesut ve sipari tarihi 30/04/2007 olan kaytlar grntleyiniz. Girmi olduunuz mteri kaytlarndan ikisini siliniz. rnlerden bazlarnn fiyatlarn deitiriniz. rn fiyat en pahal olan rn hangisi? Tablolar siliniz. Magaza veri tabann siliniz. 50

neriler

Uygulamalar iin kaytlarda deerler girebilirsiniz (ayn fiyatlar ayn olan rnler gibi).

benzer isimli,

LME VE DEERLENDRME LME VE DEERLENDRME


LME SORULARI
Aada oktan semeli sorular bulunmaktadr. Sorular okuyarak doru bulduunuz seenei iaretleyiniz. 1. Aadakilerden hangisi bir veri taban programdr? A)Photoshop B) Dreamweaver C) MySQL MySQLde bir veri taban hangi komutla oluturulur? A) Select Database B) Create Datebase C) Create Table D) Create Index Oluturulan bir veri taban hangi komutla silinir? A)Drop B)Delete C) Del

D) Apache

2.

3.

D)Hibiri

4.

Aadaki MySQL komut uygulamas sonucunda hangisi hata verir? A) mysql>select sin(45); B) mysql>create table mteri; C) mysql>quit D) mysql>use ahmer Bir MySQL veri taban zerinde ilem yapabilmek iin o veri tabann semek gerekir. Byle bir veri tabann semek iin hangi komut kullanlr? A)use B) select C) create D) drop Aadakilerden veri trlerinden hangisi metin (karakter) veri trdr? A)Datetime B) Real C) Int MySQLde index ilemi ne amala yaplr? A)Veri tabannda veri aramak iin C)Veri tabndaki verileri sralamak iin

5.

6.

D) VarChar

7.

B)Veri tabanndan veri silmek iin D)Veri tabanna veri eklemek iin

8.
9.

Bir veri tabanndan veri almak (sorgulamak) iin hangi komut kullanlr? A)Select B) Update C) Insert D) Alter
mysql>select from okul where tur=meslek;

MySQL komut satr ne i yapar? A) Okul veri tabanda, tur deeri meslek olanlar listeler. B) Okul veri tabanda, tur deeri meslek olanlar siler. C) Okul veri tabanda, tur deeri meslek olanlar listeler. D) Okul veri tabanda, tur deeri meslek olanlar tablo oluturur. 10. Veri tabannda bir alann deerini deitirmek iin hangi MySQL komutu kullanlr? A)Update B) Alter C) Insert D) Hepsi 51

11.

Adnn iinde M geen rencilerin ad ve numarasnn grntlenmesi iin gerekli olan ifadeyi yaznz.

DEERLENDRME Cevaplarnz cevap anahtar ile karlatrnz. Test iinde cevaplandramadnz, yanl cevaplandrdnz veya kendinizi bilgi bakmndan eksik hissettiiniz sorular iin ilgili konulara tekrar dnnz.

52

RENME FAALYET2 RENME FAALYET2


AMA
Veri taban programlama gerekletirebileceksiniz. diliyle etkileimli web (php ile) uygulamalar

ARATIRMA
PHP ve MySQLle hazrlanm web sitelerini inceleyiniz. Internette veri gnderme hakknda bilgi toplaynz. nternette kullanclardan gelen bilgiler nereye, nasl kaydediliyor olabilir? Aratrnz.

2. PHP LE MYSQL VER TABANINA ERMEK


2.1. PHP le Veri Taban Etkileimleri
PHP iin imdiye kadar anlatlan konular, bundan sonra anlatlacak ilere yardmc olacak komutlar iermektedir. Bu ksmda anlatlacak konular, HTML ksmnda anlatlan formlarla da ilgili olduundan ncelikle o ksm tekrar gzden geirilmelidir. nternet zerinde birok sayfada form zerinden bilgi girii yaplmaktadr. rnein, bir mail okuma sayfasndan kullanc ad ve ifre girilen sayfa, bir arama motorunda bir konuyu ararken kullanlan sayfalar formlara rnek verilebilir. Bu tipte sayfalar, genelde bir veri tabanndan bilgi sorgular ve sorgulamann sonucunda yeni sonular dndrr. PHP bir script dili olduu iin srkle brak mantyla alan nesneleri yoktur. Bu yzden HTML nesneleri kullanlr. HTML formlarnda metin kutusu, onay kutusu, buton gibi nesneler vardr. Bu nesneler form nesneleri olarak kullanlacak ve gerekli bilgi giri ilemleri yaplmaktadr. HTML formlar iin iki yntem olduunu bir nceki modlde grmtnz. GET: Client (istemci) tarafndan gnderilen bilgiler web browsern adres satrnda grntlenir.

53

rnek:
<html> <FORM ACTION=formyolla.php METHOD=GET> Adnz: <input type=text name =ad ></br> Soyadnz: < input type=submit value=Gnder> </FORM> </html>

Bu rnek getform.html adyla kaydedilmeli ve web browsern adres satrnda http://localhost/webmagaza/getform.html yazlarak arlmaldr. lgili alanlar doldurduktan sonra Gnder butonuna baslr. Adres satrnda formda girilen bilgiler kark bir ekilde grlmektedir. ./formyolla.php?ad=halil&soyad=halepli&. Burada <form> tagnn action parametresiyle arlan php dosyasnn ad,input type ile tanmlanan nesnelerin adlarn ve browserden girilen deerler grlmektedir. Action parametresiyle gnderilen dosya adndan sonra ? daha sonra ilk nesnenin nameparametresiyle verilmi ad, deeri ve sonraki nesne adlarnve deerlerini birletirmek iin kullanlan& iaretleri grlr. POST : Client (istemci) tarafndan gnderilen bilgiler browsern adres satrnda grntlenmeden yollanr. rnek:
<html> <FORM ACTION= formyolla.php METHOD=POST> Adnz :<input type= text name=ad></br> Soyadnz : <input type= text name=soyad></br> <input type=Submit value=Gnder> </FORM> </html>

Bu rnek postform.html adyla kaydedilmeli ve web browsern adres satrnda http://localhost/webmagaza/postform.html yazlarak arlmaldr. lgili alanlar doldurduktan sonra Gnder butonuna baslr. Bu rnekte sadece arlan sayfann adresi grnmektedir (Deikenler ve girilen deerler grnmez.). http://localhost/webmagaza/formyolla.php grnr. eklinde adres satr

Yukardaki rnekler incelendiinde FORM tagnn ACTION parametresinin arlacak yeni PHP dosyasnn ad yer almaktadr.

54

Veri taban zerinde ilem yaparken PHPnin MySQL iin gerekli olan fonksiyonlar kullanlacaktr. Bu fonksiyonlardan en gereklileri devam eden konularda anlatlacaktr. PHP ile yazlacak kodlarda bir veri taban ilemi yaplyorsa zorunlu olarak srasyla unlar yaplmaldr: 1. 2. 3. 4. 5. 6. MySQL balants gerekletirilmelidir. MySQL sunucusundaki kullanlacak veri taban seilmelidir. Bir SQL (Structure Query Language) ifadesi yazlmaldr. Bu SQL ifadesi altrlmaldr. SQL ileminin sonucuna gre ilemler tamamlanmaldr. Balant kapatlmaldr.

Buradaki alt admn her birinde kullanlan komutlar aada rneklerle aklanmtr.

2.2. MySQL Sunucusuna Balant


PHP 5te MySQLe balanmak iin yeni bir ktphane bulunur. Bu ktphane mysqli adn tar (i harfi, improved, yani gelitirilmi anlamna gelir.). mysqli ktphanesi nesne ynelimli ya da prosedrel sz dizimi kullanlmasna imkn verir. Kullanm: $db=mysql_connect(<Sunucusu_adi>,<Kullanc_adi>,<Kullanc_sifre>); Balant parametreleri yazlarak bu ifade bir deikene aktarlr. rnek: $baglan=mysql_connect (localhost , root , manisa);

2.3. Veri Taban Seimi


MySQLi bir komut satr arabiriminden kullanrken yle bir komutla hangi veri tabann kullanmay planladnz sylemeniz gerekir. mysql>use kitaplar; Webden balanrken de bunu yapmamz gerekir. Kullanlacak olan veri taban, mysqli yaplandrcsndan ya da mysql_connect ( ) fonksiyonunun bir parameteri olarak belirtilir. Varsaylan veri tabann deitirmek istiyorsanz bunu mysqli_select_db ( ) fonksiyonu ile yapabilirsiniz.

55

Kullanm: mysql_select_db(<veri taban_adi>.<Balant_ad>); rnek:


$sec = mysql_select_db(magaza,$baglan); If ($sec) { print Veri taban Sizin in Seildi; else { print Veri taban Seilemedi;

2.4. Veri Tabann Sorgulamak


Sorguyu altrmak iin mysql_query ( ) fonksiyonunu kullanabilirsiniz. Oluturulan SQL ifadesinin hangi balant iin altrlaca belirtilerek bir deikene atanr. degisken=mysql_query(<sql_ifadesi>,<balati_adi>); rnek:
$sorgu=mysql_query($sql,$baglan);

rnek:
$query=(select * from kitap where yazar=Ali, $baglanti);

2.5. SQL Sunucu zerinde lemler


Sonu tanmlaycsndan sonularn farkl ekillerde elde edilmesini salayan pek ok farkl fonksiyon vardr. Sonu nesnesi ya da tanmlaycs, sorgu tarafndan dndrl, en satrlara eriim iin anahtar vazifesi grr. Burada dnen sonular, MySQL sunucu ynetiminden alnan SQL sonular gibi ekrana yazdrlmaz. PHP komutlar ile bunlar zerinde ilemler yaplr. Update, Insert ve Delete ilemleri geriye sonu dndrmez. Sadece Select ifadelerinde geriye sonular dner. Bu sonular zerinde ilem yapmak iin aadaki iki fonksiyondan yararlanlr. mysql_num_field(<calstrlan_sorgu_ad>) Bu komut SQL ifadesinde seilen bilgi alanlarnn saysn bulmak iin kullanlr. mysql_fetch_row(<calstrlan_sorgu_ad>) 56

Bu komut SQL ifadesi altrldktan sonra dnen aralar ierisinden bir tanesini armak iin kullanlr. Bu komut ikinci kez altrlr ise bir sonraki kayt arlr. Sonu, alan says kadar elemanl bir dizi oluturularak atlr. rnek;
<? $baglan=mysql_connect (localhost,root,); $sec = mysql_select_db(magaza,$baglan); If ($sec) { print Veri taban Seildi; $sql=select musteri_no,adi,soyadi,dogum_tarihi from musteri; $sorgu=mysql_guery($sql,$baglan); $alan_sayisi = mysql_num_fields($sorgu); //sonuc 4 $i=0; While ($satir = mysql_fetch_row($sorgu) ) { $i++; for ($s=1;$s<$alan _sayisi;$s++) { $dizi [$i] [$s] = $satir[$s] ; } for($i-1;$i<=count ($dizi);$i++) { print $dizi[$i][1].$dizi [$i][3].<br>; } } mysql_close($baglan); } else { print veri taban Seilemedi; return; } ?>

2.6. MySQL Balantsn Kapatma


Bir PHP uygulamasnda veri taban ile yaplacak ilemler tamamlandktan sonra veri taban balants kapatlmaldr. nk her veri tabanna yaplacak balant says snrldr. Balant saysn amamak iin ii biten kullancnn balants aadaki komut ile kapatlr: mysql_close(<baglanti_adi>);

57

rnek: mysql_close($baglanti); rnek Uygulama Aadaki uygulamada firmadaki kullanc internet zerinden mteri bilgilerini girebilecek ekilde hazrlanm bir web sayfasnn kodlar yazlmtr. Uygulama iki ksmdan olumaktadr. Kullanc Arayznn HTML Olarak Hazrlanmas (Dosya Ad Musteri. html)

<html> <head> <title>e_Maaza Mteri Sipari Takip otomasyonu</title> <meta http-equiv="Content-Type" content="text/html; charset="> </head> <body bgcolar="#FFFFFF" text="#000000"> <form name=" " method="get" action="musteri.php"> <table border="0"> <tr bgcolor="#FFCCCC"> <td colspan="6"> <div align="center"><b>Mteri Bilgi Girii</b></div></td> </tr> <tr bgcolor="#CCFFFF"> <td colspan="6">&nbsp;</td> </tr> <tr bgcolor="#FFCCCC"> <td width="169">Mteri No :</td> <td width="147" colspan="5" bgcolor="#FFCCCC"> <input type="text" name=" xmusteri_no" maxlength="5" size="10"> </td> </tr> <tr bgcolor="#FFCCCC"> <td width="169">Ad :</td> <td width="147" colspan="5"> <input type="text" name="xadi"> </td> </tr> <tr bgcolor="#FFCCCC"> <td width="169">Soyad :</td> <td width="147" colspan="5"> <input type="text" name="xsoyadi"> </td> </tr> <tr bgcolor="#FFCCCC"> <td width="169">Doum Tarihi :</td> <td width="147" colspan="5"> <input type="text" name="xdogum_tarihi" value="01/01/1900"> </td> </tr>

58

<tr bgcolor="#FFCCCC"> <td width="169">Cinsiyeti <tdwidth="147" colspan="5"> <input type="radio" name="xcinsiyeti" value="e"> Erkek <input type="radio" name="xcinsiyeti" value="k"> Kadn </td> </tr> <tr bgcolor="#FFCCCC"> <td width="169">Adresi :</td> <td width="147" colspan="5"> <input name="xadres" type="text" id="xadres" maxlength="50"> </td> </tr> <tr bgcolor="#FFCCCC"> <td with="169">Kredi kart no :</td> <td width="147" colspan="5"> <input type="text" name="xkartno" maxlength="16"> </td> </tr> <tr bgcolor="#FFCCCC"> <td colspan="6"> <div alingn="center"> <div align="center"> <input type="submit" name="xgiris" value="KAYDET"> <input type ="reset" name="xtemizle" value="TEMZLE" > </div> </div></td> </tr> </table> </form> </body> </html>

59

Resim 2.1: magaza.htm ekran

Kullanc Arayznde Girilen Bilgilerin Veri Tabanna Kaydedilmesi (Dosya Ad musteri. php)

<? $baglan = mysql_connect (localhost, root , Ankara); $sec = mysql_select_db (magaza, $baglan) : $xdogum_tarihi=tarihe_evir($xdogum_tarihi) : sql=insert inso mteri (mteri_no, ad, soyad, doum_tarihi, cinsiyeti, adres, kart_no) values $xmteri_no,$xad, $xsoyad, $zdoum_tarihi, $xcinsiyeti, $xadres, $xkart_no); $sorgu=mysql_query($sql, $baglan): if ($sorgu) print kayt baaryla girilmitir : else printltfen girdiiniz bilgileri kontrol ediniz: mysql_close ($baglan): } ?>

60

UYGULAMA FAALYET UYGULAMA FAALYET


Bir ktphaneye okuyucu kayd online olarak yaplmak istenmektedir. Bunun iin veri tabannda aadaki veri tabann oluturunuz ve PHP ile etkileimli hle getiriniz. Okuyucu veri taban tablosu tc_no soyadi adi bolum sube okul_no dogum_tarihi
Tablo 2.1

lem Basamaklar
Veri taban adn okuyucu olarak veriniz. okuyucu veri tabanna yukardaki deiken- lerden oluan bir oku tablosu oluturunuz. Uygulamann okuyucu.html adyla web (kullanc) arayzn hazrlaynz. Kullanc arayznde girilen bilgilerin veri tabanna kaydedilmesi iin okuma.php adl PHP dosyasn oluturunuz.

neriler

61

LME VE DEERLENDRME LME VE DEERLENDRME


LME SORULARI
Aada oktan semeli sorular bulunmaktadr. Sorular okuyarak doru bulduunuz seenei iaretleyiniz. 1. MySQL veri tabanna balanmak iin hangi fonksiyon kullanlr? A) mysql_connect B) myql_open C) mysql_baglan D) mysql_select Veri taban balantsn kapatmak iin hangi fonksiyon kullanlr? A) mysql_disconnect B) mysql_close C) mysql_kapat D) mysql_drop Mysql_query fonksiyonu ka tane parametre alr? A)2 B)3 C)4 D)5 use deneme ifadesinin anlam nedir? A) deneme balantsn kullan B) deneme sorgusunu kullan C) deneme veri tabann kullan D) deneme sunucusunu kullan

2.

3.

4.

DEERLENDRME Cevaplarnz cevap anahtar ile karlatrnz. Test iinde cevaplandramadnz, yanl cevaplandrdnz veya kendinizi bilgi bakmndan eksik hissettiiniz sorular iin ilgili konulara tekrar dnnz.

62

MODL DEERLENDRME MODL DEERLENDRME


Bir arkadanzla birlikte kendinizi deerlendiriniz, eksik ve hatal grdnz konularda renme faaliyetine dnerek konuyu tekrar ediniz.

PERFORMANS TEST (YETERLK LME)


DEERLENDRME LTLER ekil 1.2 ye gre MAGAZA adl bir veri taban oluturdunuz mu? musteri, urun ve siparis adl tablolar oluturdunuz mu? Her tabloya beer kayt girdiniz mi? Girilen kaytlardan urun fiyat 25YTL olan rnleri listelediniz mi? Mteri ad Mesut ve sipari tarihi 30/04/2007 olan kaytlar grntlediniz mi? Girmi olduunuz mteri kaytlarndan ikisini sildiniz mi? rnlerden bazlarnn fiyatlarn deitirdiniz mi? rn fiyat en pahal olan rn hangisidir, sorguladnz m? Tablolar sildiniz mi? Magaza veri tabann sildiniz mi? Tablo 2.1 i kullanarak veri tabann oluturdunuz mu? Tablo 2.1deki alanlardan oluan bir oku isimli bir tablo oluturdunuz mu? Uygulamann okuyucu.html adyla web (kullanc) arayzn hazrladnz m? Kullanc arayznde girilen bilgilerin veri tabanna kaydedilmesi iin okuma.php adl PHP dosyasn oluturdunuz mu? Evet Hayr

DEERLENDRME Yaptnz deerlendirme sonucunda eksikleriniz varsa renme faaliyetlerini tekrarlaynz. Modl tamamladnz, tebrik ederiz. retmeniniz size eitli lme aralar uygulayacaktr. retmeninizle iletiime geiniz.

63

CEVAP ANAHTARLARI CEVAP ANAHTARLARI


RENME FAALYET-1N CEVAP ANAHTARI 1 2 3 4 5 6 7 8 9 10 11 C B A B A D C A A A select adi, ogrno from ogrenci where adi not like %M%;

RENME FAALYET-2NN CEVAP ANAHTARI 1 2 3 4 A B A C

64

NERLEN KAYNAKLAR NERLEN KAYNAKLAR


AMLI Mehmet, PHP 5, stanbul, 2006. WELLING, Luke, PHP ve MYSQL Uzmanlar iin, stanbul, 2006. http://www.capraz.net http://www.ceviz.net http://www.mysql.com.tr http://programci.wordpress.com http://www.programlama.com

65

KAYNAKA KAYNAKA
ALTINKAYA Muhittin, Yahya DEMRCAN, Programlamaya Giri, AFEF , Ankara, 2005. MySQL ve PHP

KSEOLU Kerem, Veri Taban Mant, Pusula Yaynclk, 2005, stanbul. OTANER Kayra, PHP ve MySQL ile Web Yazlm Gelitirme, stanbul, 2002. WELLING Luke, Thomson LAURA, PHP ve MYSQL Uzmanlar iin, Alfa Yaynlar, stanbul, 2006. http://www.belgeler.org http://www.ceviz.net http://www.csharpnedir.com http://www.mysql.com http://www.trojan-tr.org

66

You might also like