Giriş
Günümüzde masaüstü, web ya da mobil uygulamalar; içerik kaynaklarını veritabanı denilen özel depolama birimlerinde saklar. Veritabanı, dosya ve diğer veri saklama ünitelerine göre çok daha sağlam ve çok daha performanslıdır.
Veritabanı Nedir?
Öncelikle veritabanının tanımından başlayalım. Herhangi bir konuda birbiriyle ilişkili verilerin sistematik olarak bir arada tutulduğu yapıya veritabanı adı verilir. Tanımda altını çizdiğim kelimeler veritabanının tanımı için yeterli anahtar kelimelerdir. Birbirinden bağımsız (ilişkisiz) ve düzensiz verilerin veritabanında tutulması anlamsız olur.
İçinde bulunduğumuz bilgi çağında birçok veritabanını farkında olmadan kullanırız. Örneğin; alışverişinizi tamamlayıp ödeme için kasaya yönlendiğinizde, kasa görevlisi satın almak istediğiniz ürünleri barkod okuyucu ile okutarak ilgili ürünün barkod numarasını tespit eder ve programa aktarır.
Program veritabanından bu barkod numarasına denk gelen ilgili kaydı bulur ve istenen bilgiyi seçerek programa seçilen bu verileri geri döndürür.
Kavram olarak veritabanı ele alındığında şu işlemler gerçekleştirilir:
- Yeni veri ekleme
- İlgilenilen veriyi seçme
- Veriyi görüntüleme
- Veri üzerinde (gerektiğinde güncelleme) değişiklik yapma
- İhtiyaç duyulmayan (gereksiz) veriyi silme
Veritabanının Önemi
Günümüzde veritabanına her alanda ihtiyaç duyulmaktadır. Teknolojinin hızla ilerlemesinde tüm işlemlerin bilgisayar yardımıyla gerçekleştirilmesi, veritabanı ihtiyacını daha da fazla gerektirmektedir. Veritabanı ile işlerin hızlı ve pratik gerçekleştiğini söylemek, yerinde bir açıklama olur.
Şöyle ki; bir banka müşterisine ait tüm işlemleri kayıt altına alır ve veritabanında saklar. Müşteri ihtiyaç duyduğunda, dilediği tarihte hangi işlemleri gerçekleştirdiğini kolayca öğrenebilir. Eğer veritabanı denen yapı var olmasaydı, müşterinin yaptığı işlemler (kağıtlarda) yazılı olarak saklanacaktı ve müşterinin bu ihtiyacını gidermek için ilgili tarihe ait dosyaları bulmak çok zor ve oldukça zaman alıcı bir işlem olacaktı.
Veritabanı Kullanmanın Faydaları
Veritabanı kullanmanın sağladığı avantajlar nelerdir? Bu soruya verilebilecek en iyi yanıtlar şöyledir:
- Eski dosya sistemlerine göre daha hızlı ve daha güvenlidir.
- Veri bir bütün olarak yönetilir.
- Veri bütünlüğünü korumak için ilişkisel model kullanıldığından gereksiz veri tekrarını önler.
- Veri tekrarı önlendiğinden dolayı gereksiz hafıza tekrarını önler.
- Veri onarımı ve yedekleme işlemleri kolaydır.
Temel Kavramlar
Her alanda olduğu gibi veritabanında da bazı kavramlar yer almaktadır. Eğer veritabanı ile çalışmak istiyorsanız, bu kavramların neler olduğunu bilmelisiniz. Bir sorun ile karşılaştığınızda, sorunu ifade etmek için ya da sorunun çözümünün ne olduğunu anlamak için bu terimlerin anlamlarını bilmenizde fayda var. Aşağıda bilmenizi istediğim bazı kavramları ve anlamları yer almaktadır.
Yukarıda yer alan, kayıtların tutulduğu yapıya tablo adı verilir. Satır, bir kişiye ait kayıtların tutulduğu yatay kesitlerdir. Sütun, kayıtların özelliğini (örneğin; soyad
) temsil eden düşey kesitlerdir. Sadece ad
ve soyad
gibi özelliği temsil eden başlık bilgisine ise alan adı verilir
İlişkisel Yapı
Veritabanı kullanımının en önemli nedeni; veriler arasındaki ilişki kurabilme yeteneğidir. Veritabanı tasarımda birçok normalizasyon kuralları vardır. Bu kurallar, veritabanında tekrarları en aza ibdirgemek için geliştirilmiş bazı teroilerdir. Zaten bölümün başında veritabanının tanımını yaparken ilişkili verilerden söz etmiştim. Veriler arasındaki ilişki olmayan veritabanının, dosyalama sistemlerinden bir farkı kalmaz. İlişkisel yapıyı kısaca ifade etmek istiyorum.
Örneğin; yukarıda basit olarak kişisel yapı kurulmamış iki adet tablo yer almaktadır. Şimdi diyelim ki Tutorial KATEGORI'sinin adını değiştirerek Tutorials yaptığımızı düşünün. Bu durumda hem KATEGORI tablosunda bulunan başlık alanındaki Tutorial değeri değişecek hem de yayın tablosunda bulunan KATEGORI alanındaki Tutorial değerleri değiştirilecek. Ne kadar zahmetli değil mi? Hele ki veritabanının büyük ve daha fazla karmaşık olduğu düşünürsek bu hiç hoş bir durum değil.
Yayın tablosuna da dikkat ederseniz KATEGORI tablosunu referans gösterecek K_ID
alanını ekledik. Böylece artık KATEGORI tablosunda bulunan Tutorial değerlerini değiştirirken, YAYIN tablosunda değişiklik yapmaya gerek yok. Çünkü bu alanlar artık ilişkili durumda. Veritabanı içinde yer alan tablolar arasında ilişki PRIMARY KEY (birincil anahtar) ve FOREIGN KEY (yabancıl anahtar) ile sağlanmaktadır.
Serimin birinci yazısında Veritabanı ve MySQL sistemlerini blog tarzında açıklayarak anlatmıştım. Bu ikinci yazımda ise örneklerle biraz daha teknik kısımlara ineceğiz.
Veritabanı Oluşturma
Yeni bir veritabanı oluşturmak için CREATE DATABASE
komutu kullanılır. Bu komuttan hemen sonra oluşturulacak veritabanının ismi yazılır. Veritabanı oluştururken, veritabanının destekleyeceği karakter setleri de belirtilebilir.
CREATE DATABASE utopian
DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Yukarıda yer alan komut ile uygulama isimli yeni bir veritabanı başarıyla oluşturulur. Yeni bir veritabanı oluşturmak için CREATE DATABASE
komutundan sonra oluşturmak istenen veritabanı adı girilir. Veritabanına eklenen kayıtlarda, karakter sorunu yaşamamak için veritabanını kullanmakta olduğunuz dil ailesine göre ayarlamanız gerekmektedir. Bunun için DEFAULT CHARSET SET
komutu ve son olarak dil karakter seti tanımlaması için COLLATE
ile hangi karakter setinin kullanılacağı tanımlanır.
Genellikle veritabanı oluşturma işlemi, hizmet alınan firma tarafından verilen panel yardımıyla gerçekleştirilir. Bu işlem için kullanıcı tanımlanmasının yapılması ve kullanıcının veritabanını kullanma yetkisinin atanması için, bu işlemin hizmet alınan firmaya ait veritabanı arayüzü üzerinden gerçekleştirilmesi daha doğrudur.
imagesource
Kullanılacak Veritabanını Seçme
Bazen çok sayıda veritabanı ile çalışılır. Bu nedenle programa hangi veritabanı ile çalışacağını belirtmeniz gerekmektedir. Çalışmak istediğiniz veritabanını seçme için USE
komutu kullanılır. Komuttan hemen sonra çalışacak veritabanı ismi yazılır.
USE utopian;
Yukarıdaki komut ile uygulama isimli veritabanı ile çalışacağı belirtiliyor. Veritabanı havuzunda hangi isimde veritabanı olursa olsun, artık yapacağımız tüm işlemler uygulama isimli veritabanı için geçerli olacaktır.
PHP-MySQL ilişkisinde kullanılacak veritabanını USE
komutu ile seçmeye gerek yoktur. Zira, veritabanı bağlantısı esnasında MySQL kütüphanesinin sunmuş olduğu veritabanı seçici fonksiyon kullanılarak, işlem yapılacak veritabanı eklentiye tanıtılmaktadır.
Veritabanını Silme
Bir veritabanına artık ihtiyacınız yok ise ve silmek istiyorsanız DROP DATABASE
komutunu kullanmalısınız. Bu komuttan hemen sonra silinecek veritabanının ismini girmeniz yeterlidir.
DROP DATABASE utopian;
Yukarıdaki komutu çalıştırdığınızda uygulama isimli veritabanı tamamen silinecektir. Bir veritabanını kaldırdığınızda, veritabanı ile ilgili her şey (tablolar, veriler, index'ler vb.) silinir ve bu işlemin geri dönüşü yoktur.
Tablo Oluşturma
Veritabanı oluşturulduktan sonra veritabanında saklanacak veriler tabloların içlerinde saklanır. Yeni bir veritabanı oluşturmak için CRATE TABLE
komutu kullanılır. Yeni bir tablo oluşturmak için aşağıdaki yazım kalıbı kullanılır.
CREATE TABLE tablo_ismi
(
birinci_alan_ismi veri_tipi birinci_alan_ozellikleri,
ikinci_alan_ismi veri_tipi ikinci_alan_ozellikleri,
ucuncu_alan_ismi veri_tipi ucuncu_alan_ozellikleri
);
Buradaki yazım şeklinden de anlaşıldığı üzere CREATE TABLE
komutundan sonra oluşturulacak tablonun ismi girilir ve parantezler arasında tabloda bulunması istenilen alanlar tanımlanır. Alanlar tanımlanırken öncelikle alanın ismi, daha sonra alanın veri tipi ve son olarak alanın sahip olması beklenen diğer özellikleri yazlır. Tablolar birden fazla alanlardan oluştuğundan dolayı, alanların birbirinden ayırmak için aralarına virgül işareti konulur.
Tablo oluştururken alanlara atanacak veri tiplerini daha önceden belirtmiştik. Bu bölümde ise alanların hangi özelliklere sahip olacağını ifade edelim. Alanların alabileceği özellikler ve bu özelliklerin ne işe yaradığı aşağıdaki çizelgede yer almaktadır.
Yukarıda yer alan özellikler kullanılarak alanlara bazı kısıtlamalar ve ön tanımlayıcılar eklenir. Böylece alanlar daha dinamik hale dönüştürülür. Bir alan aynı anda birden fazla özelliğe sahip olabilirler. Örneğin; bir alan unsigned, not null
ve unique
özelliğine sahip olabilirler. Ama birbiri ile tersi durumlar oluşturan özellikler yan yana kullanılamaz. Örneğin; bir alan hem null
hem de not null
özelliklerine sahip olamaz, saçma olur.
Tablo Güncelleme
Tablolar üzerinde çeşitli güncellemeler yapılabilir. Bir tablonun adı değiştirilebilir, tabloda bulunan herhangi bir alanın adı veya özellikleri değiştirilebilir, tabloya yeni alan eklenebilir veya var olan alan tablodan çıkartılabilir. Şimdi sırasıyla bu işlemlerin nasıl gerçekleştirilebileceğini inceleyelim.
imagesource
Tablonun İsmini Değiştirme
Eeğr veritabanında var olan bir tablonun sadece adı değiştirilecekse RENAME TABLE
komutu kullanılmalıdır. Bu komuttan hemen sonra tablonun şuan ki **mevcut ismi ** yazılır ve TO
komutundan sonra tabloya verilecek yeni isim girilerek işlem onaylanmalıdır. Örneğin; veritabanında var olan kategori tablsonunun ismini kategori_yeni
olarak değiştirelim.
RENAME TABLE kategori TO kategori_yeni;
Tablodaki Bir Alanın Güncellenmesi
Eğer tablo içerisinde bulunan bir alanın (sütunun) adı değiştirilecek ise ALTER TABLE
komutu ve sonrasında değişiklik yapılacak tablonun ismi ve hemen sonrasında ise CHANGE
komutu kullanılmalıdır. Örneğin; icerik
tablosunda bulunan baslik
isimli sütunun ismini, baslik_yeni
olarak değiştirelim. Değişiklik işleminin geçerli olması için alanın tipide belirtilmek zorundadır. Tip değişikliği yapılmayacaksa eski veri tipi aynen kullanılabilir.
ALTER TABLE icerik CHANGE baslik baslik_yeni VARCHAR(50);
Tablodaki Bir Alanın Özelliklerinin Güncellenmesi
Tablodaki bir alanın veri tipini ve özelliklerini değiştirmek için tablo alan adının gğncellenmesi konusunda olduğu gibi bir yapı kullanılır, fakat burada CHANGE
yerine MODIFY
komutu kullanılmalıdır. MODIFY
komutundan hemen sonra değişiklik yapılacak alan adı yazılıp, veri tipi ve özellikler sıralanır.
ALTER TABLE icerik MODIFY baslik VARCHAR(100);
Yukarıdaki örnekte, icerik
tablosunda bulunan baslik
alanı üzerinde değişiklik işlemi gerçekleştirilmiştir. Alanın veri tipi öncesinde ne olursa olsun, artık 100
karakterlik varchar
olacaktır.
Tablodan Alan Silme
Tablodan bir alan silmek için ALTER TABLE
komutundan hemen sonra işlem yapılacak tablo ismi yazılır ve hemen sonrasında alan silineceğini belirten DROP
komutu kullanılır. Örneğin; kategori tablosundan steemit
alanını silmek için aşağıdaki komut uygulanmalıdır.
ALTER TABLE kategori DROP steemit
Tabloyu Boşaltma
Bir tabloda yer alan kayıtlarının tümünü silmek için TRUNCATE TABLE
komutu kullanılır. Bu komut bir tabloya uygulandığında tabloda yer alan tüm veriler silinerek tablo boşaltılır. Eğer boşaltılmak istenen tablo veritabanında mevcut değil ise hata oluşur. Bu işlemin geri dönüşü olmadığı için verileri gerçekten silmek istediğinizden emin olmalısınız. Örneğin; veritabanında bulunan icerik
tablosunun içerisinde bulunan tüm kayıtları silelim.
TRUNCATE TABLE icerik;
Tablo Silme
Oluşturulan tablo eğer hatalı veya artık ihtiyaç duyulmuyor ise silinebilir. Fakat dikkat etmeniz gereken bir nokta var ki, silinen bir tabloyu bir daha asla geri getiremezsiniz. Tablonun içerisinde bulunan tüm kayıtlarda tablo ile birlikte silineceğinden dolayı, bu tabloya ihtiyaç olmadığından emin olduğunuz zaman silme işlemini gerçekleştirin veya silmeden öne mutlaka tablonun yedeğini alın. Bir gün belki bu verilere ihtiyaç duyabilirsiniz.
Bir tabloyu silmek için MySQL komutlarından DROP TABLE
komutu kullanılır. Bu komuttan hemen sonra silinecek tablo adı yazılmalıdır. Eğer silmek istenen tablo veritabanında var ise işlem gerçekleştirilir, yok ise hata oluşur. Örneğin; veritabanında var olduğunu düşündüğünüz kategori ve içerik tablolarını silelim.
DROP TABLE kategori;
DROP TABLE icerik;
Yukarıdaki örneklerden de anlayabileceğimiz gibi, aynı anda DROP TABLE
komutu ile yalnızca bir adet tabloyu silebiliriz. Eğer birden fazla tabloyu silmek istiyorsanız, her tablo için ayrı ayrı DROP TABLE
komutu uygulayarak işlemi gerçekleştirebilirsiniz.
Katkılarından dolayı Sercan Çakır'a teşekkürler.
Serimizin birinci yazısında blog niteliğinde Veritabanı ve MySQL Sistemleri hakkında temel bilgileri edindik, ikinci ve son yazımızda ise daha teknik konuları işleyerek örnekler ile sonlandıracağız. Okuduğunuz için teşekkürler.
Series
Posted on Utopian.io - Rewarding Open Source Contributors
Çok açıklayıcı emekleriniz için çok teşekkür ederim hocam :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Ben teşekkür ederim okuma zahmetinde bulunduğunuz için :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Begendim hocam .elinize saglik
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Teşekkür ederim.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations! This post has been upvoted from the communal account, @minnowsupport, by sedatyildiz from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, theprophet0, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.
If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Thank you for the contribution. It has been approved.
You can contact us on Discord.
[utopian-moderator]
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Thank you.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Hey @sedatyildiz I am @utopian-io. I have just upvoted you!
Achievements
Suggestions
Get Noticed!
Community-Driven Witness!
I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!
Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit