MySQL Gerekli bilgiler.

Bir (ilişkisel) veritabanı yönetim sistemidir.

Tüm verileri tek bir ambara yığmak yerine farklı tablolarda ve veritabanlarında düzenli bir biçimde saklar.

SQL adı verilen, veritabanlarına erişmek için kullanılan en yaygın ve standart dil ile işlemler yapıyor.

Çifte lisanslı bir yazılımdır. Hem Genel Kamu Lisansı'na (GPL) sahip özgür bir yazılım, hem de GPL'in kısıtladığı alanlarda kullanmak isteyenler için ayrı bir lisansa sahiptir.

MySQL AB isimli (eski ismi TCX) bir İsveç firması tarafından geliştiriliyor.

MySQL'in son kararlı sürümü 4.1.7, yeni geliştirilen henüz alfa olan sürümü 5.0.2

[b]MySQL AB NEDİR?[/b]
MySQL AB, MySQL kurucuları ve ana geliştiricileri tarafından oluşturulan ve yürütülen bir ticari firma. 'AB', İsveç dilinde Ltd.Şti., Inc., GmbH gibi kısaltmalara karşılık gelen kelime.

Firmanın ticari gelirinin önemli bir kısmı MySQL'i geliştirmeye harcanıyor.

Tüm MySQL geliştiricileri, MySQL firmasının birer ücretli çalışanı. Birçok ülkede çalışanı olan bir kuruluş.

MySQL yazılımı ilk baştan beri kendi kendini finanse ediyor, firma MySQL üzerine verdiği ticari hizmetlerden para kazanıyor. Bir ticari GPL yazılım geliştirme modeli örneği.

MySQL'İN GELİŞİMİ
İlk başta mSQL ile tablolarına kendi hızlı yordamları (ISAM) ile bağlanmak için işe girişmişler.

mSQL'in yeterince hızlı ve esnek olmadığı sonucuna varınca, mSQL ile aynı programlama arayüzüne (API) sahip yeni bir SQL arayüzü yazmışlar. mSQL API'sinin seçilmesinin nedeni piyasadaki kodların kolaylıkla kendi veritabanlarına aktarılabilmesi.

"My"SQL isminin nereden geldiği tam olarak bilinmiyor. MySQL'den önce de ekip kendi yazdıkları araçlara "my" takısını ekliyordu. Öte yandan MySQL'in yaratıcısı Michael "Monty" Widenius'un kızının adı da My.

MySQL'in sembolü olan yunusun adı 'Sakila'. İsim, dünya çapında yapılan 'Yunusa isim verin' yarışmasının sonucunda, gelen birçok önerinin arasından yazılımın geliştiricileri tarafından seçildi. Sakila, Afrika'da Swaziland'de konuşulan yerel dilden alınma bir kelime.

[b]Neden MySQL?[/b]
Çok hızlı, güvenilir ve kullanımı kolay.

MySQL'e Python'dan Java'ya kadar birçok programlama dili ile erişilebilir.

Apache ve PHP ile beraber web-veritabanı uygulamalarında çok yaygın olarak kullanılır. Apache-PHP-MySQL üçlüsü için hazırlanmış çok geniş bir yazılım yelpazesi bulunuyor.

Özellikle internet ortamında önem kazanan, çok esnek ve güçlü bir kullanıcı erişim kısıtlama/yetkilendirme sistemine sahip.

[b]MySQL'in Bazı Özellikleri[/b]
Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor.

Birden fazla CPU ile kolaylıkla çalışabiliyor.

60000'in üzerinde tablo, 5 milyarın üzerinde satır ile çalıştığı söylenen MySQL sistemler bulunuyor.

Transaction ve/ya atomik işlem kullanan çeşitli tablo tiplerini destekliyor.

Tabloların kontrolü, optimizasyonu ve tamiri hızlı bir biçimde yapılabiliyor.

Windows için ODBC desteği var, ODBC 2.5 komutları tamamen destekleniyor.

Farklı karakter setlerini (iso8859-9, ...) ve onlara göre sıralama yapılmasını destekliyor, farklı dillerde hata mesajları verebiliyor.

Özellikle internet ortamında önem kazanan, çok esnek ve güçlü bir kullanıcı erişim kısıtlama/yetkilendirme sistemine sahip.

[b]MySQL'in Eksikleri[/b]
Oracle SQL'de kullanılan SELECT ... INTO table ... komutunu desteklemiyor. Ancak Ansi SQL'de hemen hemen aynı işi gören INSERT INTO ... SELECT ... mevcut.

Stored procedure / trigger desteği bulunmuyor.

Kullanıcı kısıtlamak için kullanılan "view" özelliği yok. Ancak MySQL'in gelişmiş bir erişim kısıtlama sistemi olduğu için ihtiyaç duyulmuyor.
MySQL ve Diğer Veritabanı Sunucuları
MySQL gelişimi sırasında, veritabanı sunucularının yılların birikimi "gelenek"lerinin önemli bir kısmını yok saymıştır. "Olmazsa olmaz" denilen birçok özelliğin, aslında birçok durumda önemli olmadığını ortaya koymuştur.

MySQL çeşitli "pratik" çözümler için geliştirilirken, diğer veritabanı sunucuları akademik düzeyde belirli kurallar ve "veritabanı bilimi" ışığında geliştirilirler.

Veritabanı uygulamalarının %80'inin, SQL özelliklerinin sadece %20'lik bir kısmına gerek duyduğu ilkesi çerçevesinde geliştirilir.

MySQL size farklı tablo tipleri ve işleme türleri ile esneklik sağlar.

Eğer teknik olarak 'basit' bir projeniz varsa, MySQL sizin için biçilmiş kaftan olabilir.

Eğer teknik olarak 'karmaşık' bir projeniz varsa, geleneksel veritabanı sunucularında yer alan gelişmiş özelliklere ihtiyaç duyabilirsiniz.

[b]Atomik İşlem / Transaction[/b]
MySQL her iki tür işlemi de desteklediği için kullanıcı, uygulamasında atomik işlemlerin hızına mı transaction özelliklerine mi ihtiyacı olduğuna karar verebilir. Seçimler tablo bazında yapılabilir.

Transaction'lı tablo ile atomik işlemle çalışan tablo arasındaki en büyük fark performans konusunda oluşur. Transactionlı tablolar çalışırken daha fazla bellek, daha fazla disk alanı ve daha fazla işlemci gücü harcar.

Eğer uygulamalarınız kritik durumlarda COMMIT yapmaya değil de, ROLLBACK yapmaya göre yazıldıysa transaction kullanmak daha elverişli olabilir.

Çoğunlukla kritik transactionla çalışan güncellemeler, atomik olarak çalışacak şekilde tekrar yazılabilir. Transactionların çözdüğü tüm bütünlük problemleri LOCK TABLES, INSERT DELAYED ve benzeri yöntemlerle çözülebilir.
MySQL Tablo Tipleri
MySQL, iki farklı tür tablo yapısını destekler :
Transaction Tabloları :
- InnoDB
- Berkeley DB

Atomik İşlem Tabloları :
- MyISAM
- HEAP
- MERGE
- ISAM

Tablo tipleri, her tablo için farklı seçilebilir. Bir veritabanında iki ya da daha fazla tablo tipini bir arada kullanabilirsiniz.
InnoDB
%100 ACID uyumlu, commit, rollback ve göçmeden kurtarma özelliklerine sahip bir tablo yapısını size sağlar.

Satır seviyesinde kilitleme kullanır, Oracle-stili kilitleme olmaksızın SELECT işlemleri yapılmasını destekler.

Yabancı anahtar kısıtlamalarına uyar.

Veri ve indeksleri ana bellekte cache'lemek için kendi tampon havuzu vardır.

Tabloları ve indeksleri tablo alanı olarak tanımladığı sanal ciltte tutar.

Bir tablo alanı birçok dosya ya da disk bölümünden oluşabilir.

InnoDB, MySQL'in standart transaction destekli tablo tipidir.

MyISAM : MyISAM, MySQL'in "klasik" tablo tipidir. Çok hızlı, az kaynak harcayan ve verimli çalışmak için tasarlanmıştır.

MERGE : Birden fazla eş MyISAM tablosunun tek bir tablo gibi kullanılması için kullanılır. Özellikle çok büyük tabloların daha hızlı tarama yapılabilmesi için küçük eş tablolara bölunmesi durumunda işe yararlar.

HEAP : Hashlenmiş indeksler kullanırlar ve tüm veriler bellekte tutulur. Bu nedenle çok hızlı çalışırlar ama MySQL kapandığında tüm verileri kaybedersiniz. Geçici tablolar için çok yararlıdırlar.

Auto_increment
Auto_increment özelliği, yeni satırlar için biricik bir değer oluşturmak için kullanılabilir.

Yeni satır girilirken auto_increment kolonuna herhangi bir değer girilmediği takdirde, kolonda bulunan en yüksek değerin bir fazlası otomatik olarak atanacaktır.

last_insert_id() SQL fonksiyonu ile, son girilen satıra otomatik olarak atanan değerin ne olduğu alınabilir.

Bir tabloda sadece bir kolon auto_increment özelliğine sahip olabilir.

Indeksler
İndeksler, belirli bir değeri olan satırları daha hızlı bulmak için kullanılırlar.

İndeks olmazsa, MySQL birinci kayıttan başlayarak, ilgili kayıtları bulana kadar tablonun sonuna kadar gitmek zorunda kalır. Indeksler sayesinde rasgele tarama yapılabilir.

İstenirse, kolonun tamamı değil sadece belirli bir kısmı da indekslenebilir.

Text/Blob tipi alanların tamamı değil sadece bir kısmı indekslenebilir.

Text/Blob alanların tamamını indekslemek için fulltext isimli özel bir indeks tipi kullanılabilir.

Bir tabloda en fazla 32 kolonda indeks oluşturulabilir.

Bir indeks birden fazla kolonu kapsayacak şekilde de yapılabilir. Bir indeks en fazla 15 kolonu kapsayabilir. Çoklu indeks, içerdiği kolonları kapsayan AND işlemleri sırasında kullanılır.

MySQL'in indeksi kullanması tablonun %30'undan fazlasına erişmesini gerektirecekse, o zaman MySQL var olmasına karşın indeksi kullanmamayı tercih edecektir. Çünkü böyle bir sorguda, sıralı arama yapmak büyük olasılıkla rasgele aramadan daha hızlı olacaktır
Indekslerin Kullanıldığı Sorgular
WHERE ifadesine uyan satırları hızlıca bulmak

Belirli bir kolonun MAX() ve MIN() değerlerini bulmak

Sıralama ve gruplama işlemleri

Join işlemleri için diğer tablolardan satırları almak

Wildcard ile başlamayan LIKE ifadelerinde

Tüm Metinde Arama (Full-text Search)
Tabloda indeks olarak ayarlandığı kolon(lar)da doğal dil araması yapar. Tıpkı bir arama motoru gibi ilgili metinleri kelimelere ayırarak indeks oluşturur. Arama yapılan metinler ne kadar büyük olursa, o kadar verimli çalışır.

Tüm metinde arama özelliği sadece MyISAM tablo tipinde kullanılabilir. Standart bir indeks gibi, tablo yaratılırken ya da daha sonra oluşturulabilir.

FULLTEXT indeksleri; CHAR, VARCHAR ya da TEXT/BLOB veri tipleri için kullanılabilir.

Tüm metinde arama MATCH() fonksiyonu ile gerçekleştirilir.

FULLTEXT indeks, alanın tamamına uygulanmak zorundadır. Sadece belirli bir kısmına yapılamaz.

Sorgu Cache'i (Query Cache)
MySQL, bir kullanıcı tarafından yapılan bir SELECT sorgusunun metnini ve sorgunun sonucunu cache'ler. Aynı sorgu tekrar yapıldığında ise veritabanında tarama yapmak yerine cache'deki veriyi kullanıcıya gönderir.

Cache, bayat veri göndermez. Bir tablo güncellendiğinde, o tabloda yapılmış olan tüm sorgular cache'ten silinir.

Verilerin çok fazla okunduğu ancak nadiren güncellendiği uygulamalarda büyük kazanç sağlar.

Replikasyon
Tek yönlü replikasyon, hem sistemin sağlamlığını hem de hızını arttırmak için kullanılabilir.

Sağlamlık için, iki sisteminiz olabilir ve ana sunucuda problem çıktığında yedek olana geçebilirsiniz.

Hız için ise, güncelleme içermeyen sorguları yedek sunucuya yönlendirebilirsiniz.

Veritaban(lar)ının birkaç farklı fiziksel mekanda bulunması gerekiyorsa, replikasyon ile verilerin sürekli güncel olması sağlanabilir.

Replikasyon sırasında dikkat edilmesi gereken en önemli nokta, tüm güncelleme işlemlerinin ana sunucuda yapılmasıdır. Aksi takdirde dikkatli olunmadığında veri kaybına yol açılabilir
Hanci.org sizlere daha iyi hizmet sunmak için çerezleri kullanıyor.
Hanci.org sitesini kullanarak çerez politikamızı kabul etmiş olacaksınız.
Detaylı bilgi almak için Gizlilik ve Çerez Politikası metnimizi inceleyebilirsiniz.