You are on page 1of 66

BMB202.

Veritaban Ynetimi
Ders 7.
MySQL Giri
View(Grnm), Index (ndeks), Constraints (Kstlayclar)

Erdin Uzun
NK orlu Mhendislik Fakltesi
Bilgisayar Mhendislii Blm
Dersin Plan
MySQL
MySQL Connectors
Tarihe
my.ini / my.cnf
Command Line
Grafiksel Arayzler
MySQL Workbench
PHPMyAdmin
MyISAM vs InnoDB
Performans pular
View (Grnm) Kullanm
ndeksleme
Kstlayclar
MySQL
MySQL
oklu i parackl (multi-threaded)
ok kullancl (multi-user)
hzl ve salam (robust)
bir veritaban ynetim sistemidir.
MYSQL
Multi-Platform
UNIX
OS/2
Windows
OpenSource
Kaynak kodu ak olan MySQL'in pek ok platform
iin altrlabilir ikilik kod halindeki indirilebilir
srmleri de mevcuttur.
cretsiz (cretli aralar da var!)
MySQL - Programlama Dili
Web sunucularnda en ok kullanlan veritabandr,
asp/asp.net, php gibi birok web programlama dili ile
kullanlabilir.
Tm programlama dilleri ile haberleebilir.
ODBC srcleri de bulunduu iin birok gelitirme platformunda
rahatlkla kullanlabilir.
Connectorlarla daha hzl balant olana sunar.
ODBC
ODBC(Open Database Connectivity) veritaban
ynetim sistemlerine erimek iin standart bir
yazlm arayz salar.
ODBC arayznden birok VTYSye ve hatta
excele programla dili tarafndan balanmak ve
ilem yaptrmak mmkndr.
MySQL Connector
MySQL Connector, standart ODBCye ok daha hzl bir
veritaban balants salar. Kendisine ait bir ODBC
srcs de vardr.
ODBC Driver for MySQL (Connector/ODBC)
MySQL Connector programlama dillerine gre versiyonlar
vardr.
ADO.NET Driver for MySQL (Connector/NET)
JDBC Driver for MySQL (Connector/J)
Python Driver for MySQL (Connector/Python)
C++ Driver for MySQL (Connector/C++)
C Driver for MySQL (Connector/C)
C API for MySQL (mysqlclient)
https://www.mysql.com/products/connector/
MySQL Tarihe

1994, Michael Widenius Monty and David Axmark tarafndan


MySQL'in gelitirilmesine baland.
23 Mays 1995 lk MySQL srm yaynland.
2001 ylnda MySQL 3.23 yaynland.
2004 MySQL 4.1 beta srm, ve gerek srm Ekim 2004
ylnda yaynland. (R-trees and B-trees, subqueries, prepared
statements)
2008: MySQL 5.1 srm yaynland. (event scheduler,
partitioning, plugin API, row-based replication, server log
tables)
2008 Ocak: Sun Microsystems, bir milyar dolara MySQL'i satn
ald.
2009 Nisan: Oracle, Sun Microsystems'i satn ald. Oracle,
MySQL'i gelitirmeye devam edeceini duyurdu.
MySQL tercih edenler
Wikipedia
Google (Arama iin deil!)
Facebook
Twitter
Youtube
Flickr
ADYS :)
Kurulum
MySQL
http://www.mysql.com/

Eer PHP,Perl, Apache gibi zellikleri de


yklemeyi dnyorsanz.
XAMPP
https://www.apachefriends.org
WampServer
http://www.wampserver.com/en/
MySQL Ayarlar
MySQL kurulu olduu dizin iinde bin dizininde
my.ini veya my.cnf dosyasndan balang
ayarlar yaplabilir.
Bu dosyann yeri bazen deiebilir. Kurulum
dizininde veya Windows dizininde olabilir.
MySQL Ayarlar
Yorum yazma
#comment, ;comment
[group] zel bir gruba ayarlarn balatmada
kullanlr.
[client]
[mysqld]
[mysqladmin]
rnek bir MySQL ayar dosyas

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M
MySQL veritabanna balanma
Mysql.exe bulunduu
dizinde command satrna
mysql --user=user_name
--password=your_password
db_name
yazmanz yeterlidir.
En genel kullanc roottur.
Ve genelde balang ifresi
botur.
Veya kullanc ismi ve ifre
size daha nceden verilen
isim olabilir. (Kullanc
Ynetimi konusunda
anlatlacaktr.)
Veritabann seme ilk SQL sorgusu
Seim yapmak iin
use Veritaban smi
kullanlr.
Grafiksel Arayzler
Command Line ekranndan ynetim yapmak zordur. Bu sebepten
dolay ynetimi kolaylatrc web ve windows tabanl bir ok
grafiksel arayz gelitirilmitir:
MySQL Workbench
Adminer
DBEdit
HeidiSQL
LibreOffice Base
Navicat
OpenOffice.org
phpMyAdmin
Webmin
SQLBuddy
SQLyog
Toad for MySQL
MySQL Workbench
Bir MySQL veritaban
tasarm ve ynetim
aracdr.
RelationShip Model
destekler.
Srkle brak zellii
Reverse / Forward
Engineering destei
Query Browser
Rahat tablo tasarlama
imkan
PHPMyAdmin
phpMyAdmin, PHP ile yazlm ak
kaynak kodlu bir aratr.
Balca kullanm amac nternet
zerinden MySQL veritaban
ynetimidir. Veritaban oluturma ve
silme, tablo ekleme/deitirme/silme,
alan ekleme/deitirme/silme, SQL
sorgular altrma, kullanclar,
yetkileri ve alan anahtarlarn
ynetme gibi ilevleri yapabilen bir
bedava yazlmdr.
Halihazrda 62 farkl dili destekleyen
yazlm phpMyAdmin Projesi ats
altnda Olivier Mller, Marc Delisle,
Alexander M. Turek, Michal iha ve
Garvin Hicking tarafndan
yrtlmektedir.
Dier VTYS sistemlerdeki benzer uygulamalar
ok benzer bir ara olan phpPgAdmin,
PostgreSQL iin benzer zellikler sunar.
Balangta phpMyAdmin'in bir kaynak ikizi olan
bu ara u anda tmyle zgn bir yapya sahiptir.
Microsoft SQL Server ynetimi iin gelitirilmi
ara ise phpMSAdmin'dir. Bu rn, tasarm ilkeleri
itibariyle phpMyAdmin'e benzese de tmyle
zgn bir kaynak koduna sahiptir.
MySQL veritaban ynetimi iin bir ara olan
phpMinAdmin, phpMyAdmin'in tm nemli
zelliklerine sahip olmakla birlikte yalnzca bir PHP
dosyasndan oluur.
Reverse Engineering / Forward Engineering
Reverse Engineering zellii ile mevcut
veritabannzn emasn karma (InnoDB
kullanyorsanz foreign-key (yabanc anahtar)
tanmlarn alglayp diyagramda gsteriyor)
Forward Engineering ile tasarladnz ema ile
veritaban oluturuyor veya yaptnz
deiiklikleri veritabanna uyguluyor. (Gerekli
kontrolleri otomatik yapp ALTER scriptini
otomatik oluturuyor)
MySQLin destekledii Tablo Yaplar (Table
Structures)
MySQL, iki farkl tr tablo yapsn destekler.
Transaction Tablolar :
InnoDB
Berkeley DB
Atomik lem Tablolar :
MyISAM
HEAP
MERGE
ISAM
Transaction Tablolar vs Atomik lem
Tablolar
Transactionl tablo ile atomik ilemle alan
tablo arasndaki en byk fark performans
konusunda oluur.
Transactionl tablolar alrken daha fazla bellek,
daha fazla disk alan ve daha fazla ilemci gc
harcar.
InnoDB vs MyISAM
MyISAM
MYSQLin standart tablo yapsdr.
Transaction yaps olmad iin ok hzl INSERT eder
fakat veri says arttka ok yava SELECT yapar.
4GBlk veri boyutundan sonra select sorgularnda
verim ok fazla der.
Ayrca metin alanlarn indexlemek iin kullanlan full
text index yapsn kullanmak iin bu tablo yapsna
ihtiya duyarz.
Bu tablo yapsnn en gzel taraf da bizi LKE
komutunun hantallndan kurtarmasdr.
Mesela srekli log tutmak istiyorsak da MYISAM tablo
yapsna ihtiya duyarz.
MyISAM
Fakat bu kadar gzel olmasnn yansra bir ok kt zellie
sahiptir.
Bunladan biride yaplan her UPDATE komutu yapnn srasn
bozacaktr ve SELECT sorgularnda performans decektir.
MYISAM ile UPDATE yapmaktan kanmak gerekir.
Eer srekli UPDATE yapmamz gerekiyorsa INNODB
kullanmamz gerekir.
Eer MYISAM tablo yapsnda srar ediyorsak tabloyu srekli
REPEAR etmemiz gerekir.
Kt zelliklerden bir dieri de windows sunucuda alyorsa
ok gvenli olmaydr.
MyISAM, text bazl yapya sahip olduu iin server zerinde
oluabilecek aksaklklardan dolay tablo yapsnda bozulma
olasl yksektir.
INNODB
Kayt girilirken MyISAM gibi btn tabloyu kitlemezler.
Bu tip veritabanlar zel transaction fonksiyonlarnda
(basit olarak locking, begin ve commit olaylar)
altrmanz salar.
Srekli UPDATE ilemleri yaplacak projelerde ve veri
saysnn fazla olduu yerlerde performans art iin
kullanlr.
Bu durumlarda BERKELEYDB tablo yapsda
kullanlabilir.
Bu iki tablo yapsnn da transaction destei vardr.
yi ve performansl tablo yaplar olduu iin bu iki tablo
yapsn da ORACLE firmas satn alm ve kendi
bnyesinde gelitirmektedir.
MEMORY
Baz durumlarda verinin ok hzl gelmesi gerekir.
Mesela session bilgilerini veri abannda istiyorsak
tablo yapsn muhakkak MEMORY tanmlamamz
gerekir.
Ancak unutmamamz gereken bir nokta daha var
;MEMEORY tablo yaps veriyi RAM de
sakladndan ,fiziksel bellekle dorudan ba
olmadndan hzl bir ekilde alr.
Dikkat edilecek dier bir hususta oluturacamz
RAM miktardr.
Geerli RAM boyutu 16MBdr.Ama RAM miktar
my.ini dosyasndan ayarlanabilir.
Dier Tablo Yaplar
ARCHIVE
Adndanda anlalaca gibi Ariv nitelii tayan
bilgilerimizi tutmak iin kullanlr.
index destei yoktur.
MYISAM ve INNODB gibi standart gelen bir tablo
yaps deildir.
CSV
excel kullanm ile ilgili bir tablo yapsdr.
10dan fazla tablo yaps vardr. Bu blmde en
nemlileri anlatlmtr.
MySQL Veri Tipleri
MySQL Veri Tipleri
MySQL Veri Tipleri
Performans pular
Where
Where Blmndeki Sralama
SELECT sorgusu kullanlrken birden fazla WHERE art
kullanlacaksa bunlarn sras ok nemlidir. Mesela toplam
renci saysnn 300 olduu bir tablo varsayalm. Bu
tabloda Erkeklerin says 150 olsun.1.snfta ki renci says
ise 60 olsun. imdi bu renci kaytlarnn arasndan
cinsiyeti erkek ve 1.snfta okuyan rencileri isteyelim. lk
WHERE artnda 1.snf rencilerini,ikinci WHERE artnda
ise cinsiyetini istememiz daha performansl olur. Neden
derseniz ilk nce 300 kayt iinde 60 kayt bulacak daha
sonra 60 veri iinden erkekleri seecek. Yani(nce 300 kayt
iinden ,sonra 60 kayt iinden seecek). Dier trl 300
kayt iinden nce erkekleri seecek,daha sonra erkek olan
150 kayt iinden 1.snflar seecek. Yani(nce 300 kayt
iinden seecek,sonra 150 kayt iinden seecek). lk sorgu
daha performansl olur.
Performans pular
Inner Join
Inner Join: sadece eleen kaytlar iinize yarar.
Mesela,JOIN komutu kullanlacak tablolarn, tablolar
aras balanty kuran stunlarn veri tipleri ve veri
uzunluklar birbirinden farklysa JOIN kullanmak
sorguyu ok uzatr ve performans kayb yaarsnz.
Ne istediinizi bilmelisiniz. Asla ie yaramayacak
verileri istemeyin bilin ki en yaygn kullanlan JOIN tipi
olan INNER JOIN iki tabloyu birletirir ve sadece iki
tabloda da eleen kaytlar varsa getirir. Eer sadece
eleen kaytlar iinize yarayacaksa INNER JOIN
kullann.
Performans pular
Limit
Belirli durumlarda tek bir zgn sonu aryor
olabilirsiniz. Ya da sadece WHERE koullarna
uygun kaytlar olup olmadn kontrol ediyor
olabilirsiniz. Her iki durumda da LIMIT 1
kullanmak sorgu hzn arttrabilir.
SELECT * FROM user WHERE sehir = 'stanbul'
SELECT * FROM user WHERE sehir = 'Istanbul'
LIMIT 1
Performans pular
MySQL Partition
MySQL PARTITION zellii ne ie yarar derseniz u
ekilde aklayalm.
Mesela elinizde 1 milyon satr veri var diyelim ve bu
verilerin yllar baznda oluturulma tarihleri olsun.
Biz sadece 2013 ylna ait verileri istediimizde
normalde 1 milyon veri arasndan 2013 ylna ait
verileri getirir. Ancak MYSQL PARTITION zelliini
kullanrsak yllara gre sralayp 2013 ylnda 100
bin kayt varsa sadece 100 bin kayt arasndan
SELECT yaparz.
Bu da performans ve hz asndan iyidir. Ancak bu
zellii kullanrken ok iyi bir hakimiyetinizin olmas
gerekir.
Performans pular
PROCEDURE ANALYSE ( )
MySQLdeki Procedure Anlayse fonksiyonu ile bu
alanlarn baz betimsel istatistiklerini ve nerilen
trn renebilirsiniz.
SELECT *
FROM student
PROCEDURE ANALYSE ( )
Performans pular
View Kullanm
Sklkla kullandmz sorgular VIEW kullanarak
yaparsak daha performansl sonular elde
edebiliriz.
View Nedir?
Sorgular basitletirmek ,
sorgu srelerini ksaltmak ve
sistemin daha performansl almasn salamak iin
kullanlan sanal tablodur.
VIEW sanal bir tablo olarak ilem yapar,ancak bu
sanal tabloyu daha nceden oluturmamz
gerekir.
Sk kullandmz bir sorgu
//sk kullandmz bir sorgu
SELECT ogrenciler.ogrenci_adi,
ogrenciler.ogrenci_no,
fakulteler.fakulte_adi,
fakulteler.fakulte_id
FROM ogrenciler
LEFT JOIN fakulteler
ON fakulteler.fakulte_id=ogrenciler.fakulte_id
View oluturma
CREATE VIEW fakulte_ogrenci
AS SELECT ogrenciler.ogrenci_adi,
ogrenciler.ogrenci_no,
fakulteler.fakulte_adi,
fakulteler.fakulte_id
FROM ogrenciler
LEFT JOIN fakulteler
ON fakulteler.fakulte_id=ogrenciler.fakulte_id
Viewden bilgi ekme
ve Viewi silme
Viewden bilgi ekme
SELECT * FROM fakulte_ogrenci;
Viewi Silme
DROP VIEW fakulte_ogrenci;
ndeks (Index)
Bir indeks, veri taban ortamnda bir tablo ya da
bir view gibi bir nesnedir ve ilikili olarak
kullanld tablo ya da viewdeki satrlarn,
indeksleme alan (key field (anahtar alan)) olarak
kullanlan kolondaki verilere gre sralanm
biimde ileme sokulmasn (listeleme ya da
arama ilemi) salar.
Bir tablo, indekslenmi ise, bu tablo iinde
gerekletirilecek bir arama (search) ya da
koullu listeleme (SELECT komutu ile) ilemi ok
daha hzl biimde gerekletirilebilecektir.
Niye indeksleme
Genel olarak veritabanlarnda veri miktar
arttka, tm veriye ulamn maliyeti de benzer
oranda artar. Mesela ayn tablo iin 100 kaytla
almak ile 1 milyon kaytla almak arasnda
aradnz veriye ulam asndan ok buyuk
maliyet fark vardr. Bu maliyet genel olarak CPU
ve disk eriimi olarak karmza kacaktr. Eer
veritabannz baka bir makine zerinde ise buna
ilaveten bir de network kullanm maliyeti
eklenecektir.
ndekslemenin dezavantaj
ndeksleme, sabit diskte ekstra yer tutar. Verdii
performans artnn yannda karlatrlabilecek kadar
bile deildir ancak veritabannzdaki her tablonun her
stununda indeks oluturursanz, sabit diskinizin
umduunuzdan ok daha abuk dolduuna ahit
olabilirsiniz!
ndeksleme INSERT, UPDATE ve DELETE komutlarnn
altrlma srelerinde yavalamaya neden olur. Yine
bu yavalamann gzle grlr bir fark olduu
sylenemez, ama MySQLin tablolarda INSERT,
UPDATE ve DELETE ile gncelleme yaparken indeks
alanlarn da uygun ekilde gncellediini unutmamak
gerekir.
Yani her tablonun her stununu indekslememek gerekir!
ndeksleme karar nasl verilir?
Hangi stunda indeksleme yapacanza aslnda
sizin ihtiyalarnz yn veriyor. Sk sk yazdnz
sorgu cmleleri, aramalarda kullanlacak alanlar
genelde indeks iin uygun alanlar olurlar.
ndeksleme iin en gzel aday sorgu
cmlelerinde WHERE kelimesinden sonra
yazdnz alanlardr. Yazdnz sorgu
cmlelerinde bu ekilde ne kan bir stun varsa
o stun indeks oluturmak akllca olacaktr.
ndeksleme karar nasl verilir?
ndeksleme iin bir dier aday stunlar ise, ilerinde farkl
deerler tutan alanlardr. Yukardaki tablomuzu
dnrsek, cinsiyet alan indeksleme iin pek de uygun
saylmaz, nk tutabilecei iki farkl deer vardr, E
veya K. Bu alanda bir indeks oluturulsa bile MySQL
yine de toplam satrlarn yarsn taramak zorunda
kalacaktr, bize pek performans getirisi salamaz. Bunun
yerine hemen hemen her satrda farkl deerlerin
tutulduu stunlar indeksleme iin kullanl olabilirler.
ndekslemede arama maliyeti ile DML ilemleri sonras
indeksin gncellenme maliyeti arasnda karar veritaban
yneticisi verir.
Veritaban yneticisinin deneyimi ve tecrbesi bu noktada
nemli rol oynar.
ndekslenmemi durum
ndekslenmi durum ve ek maliyet
ndeksleme rnei
Tablo(isim, adres, telefon)
SELECT * FROM tablo WHERE isim='osman'
isim alan ok sk ekilde sorgulanan bir alan
olsun. Bu durumda bu alan indekslenebilir.
ALTER TABLE tablo_ismi
ADD INDEX index_ismi (index_stunu_ismi);
Yukardaki sorgu iin indeksleme
ALTER TABLE tablo ADD INDEX isim_indexi (isim);
ALTER TABLE tablo ADD INDEX isim_soyisim_yas
(isim, soyisim, yas);
Kstlayc (Constraint)
Veri zerindeki mantksal snrlamalara kst ad verilir.
Kstlarn genel olmas tercih edilen bir durumdur.
Kstlar, veri modellerinde btnlk salamak iin
kullanlr.
Kstlamalar, tablolarn tanmlanmasyla beraber oluan
elerdir.
Kstlamalar ile Rule (kural) ve Defaultlarn (varsaylan)
yapabilecei iler yaplabilir.
Constraintler tablo olutururken yani CREATE TABLE
komutuyla tanmlanabilir. Tablo oluturulmusa ALTER
TABLE komutuyla bu ilem gerekleir. ALTER TABLE
komutuyla kullanldnda stunlara girilen bilgilerin
dikkate alnmas gerekir.
Constraint (Kstlayc)Trleri
Primary Key Constraint
Unique Constraint
Not Null Kstlaycs
Foreign Key Constraint
Default Constraint
Check Constraint
Primary Key Kstlayc
Birincil anahtar kstlayc anlamndadr. Ayn
olmayan deerler girilmesini salar. Bu da her
kaydn farkl olmas demektir. Her tablonun en
fazla 1 adet Primary Key Constrainti olabilir.
Alter Table Cmleciinde Primary Key
Kstlaycs
Unique Constraint
Tekil alan kstlayc anlamndadr. Birincil anahtar
olan ve tablodaki dier alanlar iinde ayn ierie
sahip verilerin olmamas iin Unique Constraint
tanmlanr.
T.C.Kimlik Nu. primary key ve Okul Nu. Unique
eklinde bir tanmlama Unique Constrainte bir
rnektir.
Unique Kstlayc
UNIQUE ve PRIMARY KEY kstlayclarnn her
ikisi de benzer kaytlarn girilmesinin
engellenmesini salar.
Bir PRIMARY KEY kstlaycs tanmladnz
zaman otomatik olarak UNIQUE kstlaycsn da
tanmlam saylrsnz.
Dikkat edilecek husus,her tablo iin birok
UNIQUE kstlaycs olabilir fakat bir tablonun
sadece bir tane PRIMARY KEY kstlaycs
olabilir.
Unique Kstlayc
Not Null Kstlaycs
NOT Null kstlayc bir kolondaki verilerin bo
olmamasn salar.
Foreign Key(Yabanc Anahtar) Kstlaycs
Yabancl anahtar kstlayc anlamndadr. Bir
tablodaki bir stuna ait verilerin baka bir tablonun
belirli bir stunundan gelmesini denetler.
Foreign Key(Yabanc Anahtar) Kstlaycs
Foreign Key(Yabanc Anahtar) Kstlaycs
Check Kstlaycs
Kontrol kstlayc anlamndadr. Belirtilen formata
gre verilerin girilmesini salar. rnein,
T.C.Kimlik Nu. alanna 11 karakterin girilmesi
Check Constraint ile salanabilir.
Server/Client veya Web tabanl uygulamalarda
bu kontrol client tarafnda yaplmas tavsiye
edilir. (Javascript ve JQuery)
Check Kstlaycs
Check Kstlaycs
Default Kstlaycs
Varsaylan kstlayc anlamndadr. Tablodaki
herhangi bir alan iin girilmesi gereken bir
deerin atanmasdr.
INSERT komutu iin geerlidir. rnein, kii
bilgilerinin alnd bir tabloda kiinin uyruunun
girilmesi ileminde varsaylan deer olarak T.C.
atanabilir.
Default Kstlaycs
Default Kstlaycs
Kaynaklar
http://www.aydinmahmut.com/mysql-programlama-i
cin-performans-ipuclari/
http://bilal.im/blog/web/mysql/innodb-ile-myisam-a
rasindaki-farklar/
http://en.wikipedia.org/wiki/MySQL
http://www.dijitalders.com/icerik/13/990/sql_k
omutlarindan_index_olusturma_ve_faydalari_myad
minde_gosterimi.html#.U15tAPl_sa4
http://yazilimdunyam.com/category/veritabani-tasa
rimi-ve-yonetimi/sql

You might also like