Veritabanı ve MySQL Sistemleri #1

in utopian-io •  7 years ago  (edited)

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


imagesource

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.

information-database1.png
imagesource

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.

tablo.png

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.

22222.png

Ö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.

3333.png

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.
mysql-backup.png
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.

1.png

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.
database-tables.gif
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

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Çok açıklayıcı emekleriniz için çok teşekkür ederim hocam :)

Ben teşekkür ederim okuma zahmetinde bulunduğunuz için :)

Begendim hocam .elinize saglik

Teşekkür ederim.

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.

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

Thank you.

Hey @sedatyildiz I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • Seems like you contribute quite often. AMAZING!

Suggestions

  • Contribute more often to get higher and higher rewards. I wish to see you often!
  • Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!

Get Noticed!

  • Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

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