ile

Veritabanı nedir? SQL-3 Veri girmek ve çekmek

Ana hedefimiz olan içerik yönetim sistemi yazmak için gereken veritabanını şu şekilde oluşturuyoruz.

CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) COLLATE utf8_turkish_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=1 ;


CREATE TABLE IF NOT EXISTS `files` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `filename` varchar(255) COLLATE utf8_turkish_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `posts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) COLLATE utf8_turkish_ci NOT NULL,
  `content` text COLLATE utf8_turkish_ci,
  `category_id` int(11) NOT NULL,
  `created` datetime NOT NULL,
  `updated` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=1 ;


Eğer eklemediysek merakli veritabanımıza bu alanları ekleyelim. Bir içerik yönetim sistemi ile ne yapılır? Öncelikle bunları düşünelim.

  1. Yazı eklemek
  2. Yazıları düzenlemek (Yazi içeriğini, başlığını ve kategorisini görüntülemek)
  3. Yazıları silmek
  4. Yazılara eklenecek dosyaları yönetmek. Silmek ve düzenlemek.
  5. Tüm yazıların başlıklarının olduğu bir liste göstermek.
  6. Kategori eklemek, silmek, düzenlemek.
  7. Kategori içindeki yazıları göstermek
  8. Ayrıca yazı başlıklarını gösterirken, sayfalama yapmak, her sayfada 20 yazı göstermek, 2. sayfada bir sonraki 20 yazıyı yani 20 ile 40 arası yazıları göstermek
  9. Arama yapmak

Bu kadar basit bir sistemde bile ne kadar çok işlem var değil mi? Korkmayın, hepsini adım adım ilerleyerek öğreneceğiz.

Veri eklemek

İlk işimiz sisteme yazı eklemek. Ancak yazı eklemeden önce kategorileri oluşturmalıyız. Kategorilerimiz PHP, jQuery, SQL, Diğer olsun. Bunlardan ilk kategori olan PHP yi ekleyelim. Bu işlem için gereken SQL kodu şöyle:

INSERT INTO  `merakli`.`categories` (`id` ,`title`) VALUES (NULL ,  'PHP');

Kodu incelediğimizde ID alanına bilgi olarak NULL, yani boş değer girdik. Çünkü veritabanı yönetim sistemi bu alanı bizim adımıza itinayla yönetiyor. AUTO INCREMENT özelliğinden dolayı id alanı otomatik artıyor. Bir satır silinse dahi o satırın id’si yeni eklenen veriye girilmiyor.

Screen Shot 2014-08-08 at 18.51.24

Bu SQL kodunu phpMyAdmin üzerindeki SQL giriş bölümüne, girip çalıştırıyoruz, ve şöyle bi sonuç karşımıza çıkıyor.

Screen Shot 2014-08-08 at 18.50.15

Gördüğümüz gibi, MySQL otomatik olarak 1 değerini id alanı için üretti. Şimdi de diğer kategorileri topluca giren kodu oluşturalım.

INSERT INTO  `merakli`.`categories` (`id` ,`title`) VALUES (NULL, 'jQuery'), (NULL, 'SQL'), (NULL, 'Diğer');

İşte birden fazla değeri aynı tabloya parantez ve aralarında virgül kullanarak kolayca ekledik. Hepsini eklediğimizde ortaya çıkan sonuç şöyle:

Screen Shot 2014-08-08 at 19.02.34

Gördüğümüz gibi tüm diğer kategoriler için id alanını, MySQL veritabanı yönetici programı otomatik olarak güncelledi.

Şimdi veri girişi yapmanın bir diğer yolunu, yani phpMyAdmin kullanarak giriş yapmayı deneyelim. Gireceğimiz veri bir yazı olsun ve PHP kategorisinde olsun. Ancak bir de ne görelim. Yazılar tablosuna yani posts içine içerik girmemize yarayacak içerik alanımız yok! Peki ne yapacağız? Tablo yapısını değiştirmemiz lazım:

 ALTER TABLE  `posts` ADD  `content` TEXT NULL AFTER  `title`

Burada MySQL’e söylediğimiz şey, title yani başlık alanından sonra text (metin) tipinde content yani içerik alanı ekleyeceğiz ve NULL yani boş değer alabilir. NULL yani boş değer verdiğimizde hata vermesini ve satırı eklememesini isteseydik NOT NULL kuralını eklemeliydik.

Bunu yaptıktan sonra bir yazı ekleyelim. Bunu da phpMyAdmin Kullanarak şu şekilde yapabiliriz;

Screen Shot 2014-08-08 at 20.46.27

Yazıyı ekledikten sonra phpMyAdmin’de tablomuza baktığımızda son durum şu şekilde:

Screen Shot 2014-08-08 at 20.52.45

 

Dikkat! phpMyAdmin’in tabloya bakarken ürettiği koda dikkat ettiniz mi?

Verileri okumak, listelemek

SELECT * FROM  `posts` LIMIT 0 , 30

Korkmak yok! Adım adım, parça pinçik bu kodu inceleyelim.

  1. SELECT: “Seç” demektir. Verinin sistemden çekileceğini belirtir.
  2. *: Tüm tablolar demektir. Eğer sadece title ve content alanlarını isteseydik, SELECT title,content demeliydik
  3. FROM: Hangi tablodan veri çekeceğimizi belirtir. Burada posts tablosundan veri çektiğimiz için FROM ‘posts’ yazmamız yeterli
  4. LIMIT: Sınırlamak demektir, burada 0 ile 30 id’si arasındaki satırları çekeceğimizi sisteme söyledik.

SELECT yani veri çekme ifadesinde başka önemli olan şeyler var. Bunları birtakım özel durumları inceleyerek açıklamaya çalışalım.

  1. WHERE: Yani koşul ifadesi, örneğin id’si 3 olan makaleyi sistemden çemek istersek SELECT * FROM posts WHERE id=3 dememiz gerek. Bence en önemli ifade bu veri çekerken.
  2. ASC/DESC: Örneğin fiyatları büyükten küçüğe ya da küçükten büyüğe sıralarken azalan artan koşulunu vermek için kullandığımız ifade. DESC azalarak yani büyükten küçüğe, ASC ise artarak yani küçükten büyüğe sıralamaya yarar.
  3. Bunun dışında ORDER BY, GROUP BY ifadeleri de mevcut ORDER BY ifadesi sıralama yaparken hangi alanı kullanacağımızı seçmeye yararken, GROUP by, bir alan seçtiğimizde o alanın aynı öğelerini gruplayarak tek bir satır elde etmemize yarar. Bu ifadeler biraz detay oldukları için girmiyorum. Zamanı geldiğinde kullanacağız zaten.

Dikkatimizi çekmesi gereken birşey daha var. Created ve Updated, yani yaratma ve güncelleme tarihlerini boş bıraktık. Bu alanlar null yani boş değer alabildikleri için, MySQL hata vermedi ancak, kendisi veritipine uygun birşekilde 0000-00-00 00:00:00 değerlerini üretip girdi.

Screen Shot 2014-08-09 at 13.35.14

Buradaki alanı düzenlemeliyiz. Bunun için phpMyAdmin’de edit ikonuna tıklayalım.

Screen Shot 2014-08-09 at 13.37.16

Kalem işaretine tıkladığımızda karşımıza satırı düzenleme ekranı çıkar.

Screen Shot 2014-08-09 at 13.37.06

Düzenleme ekranında created ve updated alanlarının en sonundaki takvim ikonuna tıkladığımızda istediğimiz tarihi seçebiliriz.

Screen Shot 2014-08-09 at 13.39.45

Buradan bugünün tarihini ve istediğimiz saati seçip Go butonuna basıp düzenleme işlemini tamamlayabiliriz. (İpucu olarak söyleyeyim, phpMyAdmin sistemi bu tarih seçme işlemleri için jQuery UI kütüphanesini kullanıyor.)

Screen Shot 2014-08-09 at 13.42.15

 

İşte phpMyAdmin bir satırı otomatik olarak düzenledi ve gereken SQL kodunu da üretti.

Veriyi düzenlemek

Veriyi düzenlerken kullandığımız kodu adım adım inceleyelim.

UPDATE  `merakli`.`posts` SET  `created` =  '2014-08-09 00:00:00', `updated` =  '2014-08-09 00:00:00' WHERE  `posts`.`id` =1;

UPDATE: Güncelle emrini sisteme veriyoruz. Her komuttan sonra MySQL bize soruyor: ‘Neyi güncelleyeyim?’ biz de yanına alan adını yazıyoruz. ‘posts’. Burada farklı bir ifade dikkatinizi çekmiştir. Farklı veritabanlarından da sorgu çekebildiğimiz için veritabanı ismini de başa ‘merakli’.’posts’ diye yazmamız mümkün.

SET: Ayarla, emrini veriyoruz. MySQL yine soruyor. “Neyi ayarlayayım?” Biz de created alanını ‘2014-08-09 00:00:00’, updated alaınını da ‘2014-08-09 00:00:00’ yapmasını söylüyoruz. Nerde (WHERE) diyor. Biz de id alanının 1’e eşit olduğu satırı seç diyoruz. Bu kadar basit.

Veriyi silmek

Bu yazı için son olarak bu satırı silelim. Bunun için satırın başındaki delete ikonuna tıklayalım. Girilmez levhası şeklinde olan ikona. Buna bu kadar uyarı ikonları vs konmasının sebebi, yanlışlıkla sileceğiniz satırı geri getiremeyeceğinizden. Screen Shot 2014-08-09 at 14.08.05

Zaten tıkladığımız anda bir uyarı penceresi çıkıyor ve gerçekten silme işleminden emin olmadığmızı soruyor. Ki boş bulunup verimizi kaybetmeyelim.

Screen Shot 2014-08-09 at 14.08.13

DELETE FROM posts WHERE id=1

Burada WHERE yani koşul ifadesinden sonra id=1 de diyebiliriz, ya da posts.id=1 diyerek alanın ait olduğu tabloyu da belirtebiliriz. Bu birden fazla tabloya aynı anda sorgu yapıyorsak, alan isimlerinin çakışmalarını önleyecektir.

Bu yazı için şimdilik bu kadar, veri girme, çekme, güncelleme, silme gibi en basit SQL işlemlerini öğrendik. Sıradaki yazıda içerik yönetim sistemimiz için ihtiyacımız olan işlemleri öğreneceğiz.

Yorumla

Yorum

  1. hocam PHP Workbench te meraklıyı yapmıyormuyduk, bu PHP My admin nerden çıktı şimdi allasen bywf