11 Mart 2010 Perşembe

MySQL'de CRUD İşlemleri

Merhaba Webkolog takipçileri! Web uygulamalarımızın vazgeçilmezi olan veritabanları konusundaki serimize devam ediyoruz. Bir önceki yazımda MySQL'e genel bir bakış atmış ve temel veritabanı işlemlerinden bahsetmiştim. Bugün ise veritabanı yönetiminin kalbi olan CRUD işlemlerini derinlemesine inceleyeceğiz. CRUD, Create (Oluşturma), Read (Okuma), Update (Güncelleme) ve Delete (Silme) kelimelerinin baş harflerinden oluşan bir kısaltmadır ve bir veritabanı üzerinde yapabileceğiniz temel operasyonları özetler.

Neden CRUD İşlemleri Hayati Önem Taşır?

Her web uygulamasında dinamik veri akışı bulunur. Bir kullanıcı kaydolduğunda veri oluşturulur (Create), profilini görüntülediğinde veri okunur (Read), e-posta adresini güncellediğinde veri güncellenir (Update) ve hesabını sildiğinde veri silinir (Delete). Bu döngüyü anlamak ve doğru bir şekilde uygulamak, kullanıcı dostu ve işlevsel bir uygulama geliştirmenin anahtarıdır. Haydi, bu dört temel operasyonu MySQL komutlarıyla tek tek inceleyelim!


Create: Veritabanı ve Tablo Oluşturma

Veritabanı oluşturmayı daha önceki yazımızda görmüştük. Şimdi ise bu veritabanının içine verilerimizi düzenleyeceğimiz tabloları nasıl oluşturacağımıza bakalım. Tablolar, verilerin satır ve sütunlar halinde organize edildiği yapılardır.

Tabloları Listeleme ve Sütunları Görüntüleme

Mevcut veritabanınızdaki tabloları görmek için SHOW TABLES; komutunu kullanabilirsiniz. Bir tablonun yapısını, yani hangi sütunlara sahip olduğunu ve bu sütunların özelliklerini görmek için ise SHOW COLUMNS FROM tablo_adi; komutunu kullanırız.


-- Tüm tabloları listele
SHOW TABLES;

-- 'customers' tablosunun sütunlarını listele
SHOW COLUMNS FROM customers;
Tablo Oluşturma

Yeni bir tablo oluştururken, tablonun adını, her bir sütunun adını, veri tipini ve ek özelliklerini belirtiriz. Aşağıdaki örnek, "insanlar" adında bir tablo oluşturmayı gösteriyor:


CREATE TABLE insanlar (
    id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    isim VARCHAR(255) NOT NULL,
    tc_kimlik VARCHAR(11) NOT NULL UNIQUE,
    dogum_tarihi DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
    meslek_id INT(11) NOT NULL,
    CONSTRAINT meslek_iliski FOREIGN KEY (meslek_id) REFERENCES meslek (id)
);
  • INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT: id sütunu bir tam sayı (11 basamak), boş bırakılamaz (NOT NULL), tablonun birincil anahtarı (PRIMARY KEY) ve her yeni kayıtta otomatik olarak artar (AUTO_INCREMENT).
  • VARCHAR(255) NOT NULL: isim sütunu 255 karaktere kadar metin saklayabilir ve boş bırakılamaz.
  • UNIQUE: tc_kimlik sütunundaki her değerin benzersiz olması gerektiğini belirtir.
  • DEFAULT '0000-00-00 00:00:00': dogum_tarihi belirtilmezse bu varsayılan değeri alır.
  • FOREIGN KEY (meslek_id) REFERENCES meslek (id): meslek_id sütunu, "meslek" tablosundaki "id" sütununa bir referans, yani bir dış anahtar ilişkisi kurar. Bu, veritabanı tutarlılığını sağlamak için önemlidir.
Tablo Yapısını Değiştirme (ALTER TABLE)

Tablo oluşturduktan sonra, zaman zaman yapısını değiştirmeniz gerekebilir. MySQL'de ALTER TABLE komutu bu iş için kullanılır.

  • Tablo İsmini Değiştirme:
  • 
    RENAME TABLE insanlar TO yeni_insanlar;
        
  • Sütun İsmini Değiştirme:
  • 
    ALTER TABLE insanlar CHANGE isim yeni_isim VARCHAR(50);
        
  • Sütun Özelliklerini Değiştirme:
  • 
    ALTER TABLE insanlar MODIFY isim VARCHAR(100) NOT NULL UNIQUE;
        
  • Tabloya Yeni Sütun Ekleme:
  • 
    ALTER TABLE insanlar ADD aciklama VARCHAR(100); -- Sona ekler
    ALTER TABLE insanlar ADD isim VARCHAR(100) FIRST; -- En başa ekler
    ALTER TABLE insanlar ADD soyad VARCHAR(100) AFTER isim; -- 'isim' sütunundan sonra ekler
        
  • Tabloya Birden Fazla Sütun Ekleme:
  • 
    ALTER TABLE insanlar ADD (
        aciklama VARCHAR(100),
        onay TINYINT NOT NULL DEFAULT 1
    );
        
  • Tablodan Sütun Silme:
  • 
    ALTER TABLE insanlar DROP onay;
        
Indexleme (ALTER TABLE ADD INDEX)

Büyük tablolarda veri aramayı hızlandırmak için indexler kullanırız. Indexler, kitaplardaki içindekiler bölümü gibidir; belirli verilere daha hızlı ulaşmanızı sağlar.


ALTER TABLE tablo ADD INDEX isim_soyisim_yas (isim, soyisim, yas);

Indexlemenin faydaları:

  • WHERE ifadelerine uyan satırları daha hızlı aramak için.
  • Sıralama (ORDER BY) ve gruplama (GROUP BY) işlemlerini organize etmek için.
  • Birleştirme işlemlerinde (JOIN) diğer tablolardan satır almak için.
  • Gruplama işlemlerinden MAX(), MIN() ve AVG() gibi değerleri hesaplamak için.
Tabloyu Boşaltma ve Onarma

-- Tablodaki tüm verileri siler ama tablo yapısını korur
TRUNCATE TABLE insanlar;

-- Bozuk tabloları onarmaya çalışır
REPAIR TABLE insanlar;
Tabloyu Silme

Bir tabloya tamamen ihtiyacınız kalmadığında, onu silebilirsiniz. Unutmayın, bu işlem geri alınamaz ve tablodaki tüm veriler kaybolur!


DROP TABLE insanlar;

Read: Veri Okuma (SELECT)

Veritabanından bilgi almak, yani okuma işlemi, SELECT komutu ile yapılır. Bu, muhtemelen en sık kullanacağınız SQL komutudur.


-- 'insanlar' tablosundaki tüm verileri ve tüm sütunları getir
SELECT * FROM insanlar;

-- 'insanlar' tablosundan sadece 'isim' ve 'yas' sütunlarını getir
SELECT isim, yas FROM insanlar;

-- 'insanlar' tablosundan yaşı 30'dan büyük olanları getir
SELECT * FROM insanlar WHERE yas > 30;

-- 'insanlar' tablosundan ismi 'Ali' olanları ve yaşı 30'dan küçük olanları getir
SELECT * FROM insanlar WHERE isim = 'Ali' AND yas < 30;

-- 'insanlar' tablosundan isimleri 'A' ile başlayanları getir
SELECT * FROM insanlar WHERE isim LIKE 'A%';

-- 'insanlar' tablosundan ilk 5 kaydı getir
SELECT * FROM insanlar LIMIT 5;

-- 'insanlar' tablosundaki kayıtları isme göre alfabetik sırala
SELECT * FROM insanlar ORDER BY isim ASC; -- ASC: Artan (varsayılan)
SELECT * FROM insanlar ORDER BY yas DESC; -- DESC: Azalan

Update: Veri Güncelleme

Mevcut bir kayıttaki bilgileri değiştirmek için UPDATE komutunu kullanırız. Genellikle WHERE koşulu ile belirli kayıtları hedefleriz.


-- id'si 1 olan kişinin ismini 'Webkolog' olarak güncelle
UPDATE insanlar SET isim = 'Webkolog' WHERE id = 1;

-- id'si 1 olan kişinin puanını 1 artır
UPDATE tablo SET puan = puan + 1 WHERE id = 1;

-- Birden fazla tablodan veri birleştirerek güncelleme (daha karmaşık senaryolar için)
UPDATE tA a
JOIN tB b ON a.jc = b.jc AND a.ca = b.cb
JOIN tC c ON a.id = c.a_id -- (örnek bir koşul)
SET a.cc = a.cc + 1
WHERE b.some_column = 'some_value';

-- Şartlı güncelleme (CASE WHEN)
UPDATE mytable
SET title = CASE
    WHEN id = 1 THEN 'A'
    WHEN id = 2 THEN 'B'
    ELSE title -- Diğer ID'ler için title sütununu değiştirmeden bırak
END
WHERE id IN (1, 2, 3); -- Sadece belirli ID'lere uygula (opsiyonel)

Delete: Veri Silme

Veritabanından kayıtları silmek için DELETE FROM komutunu kullanırız. Yine, WHERE koşulu ile hangi kayıtların silineceğini belirtmek çok önemlidir. WHERE koşulu kullanmazsanız, tablodaki tüm kayıtlar silinir!


-- id'si 1 olan kişiyi 'insanlar' tablosundan sil
DELETE FROM insanlar WHERE id = 1;

-- id'leri 4, 5, 6 veya 7 olan kayıtları sil
DELETE FROM tablo WHERE id IN (4, 5, 6, 7);

-- Birden fazla tablodan ilişkili verileri silme (ilişkisel silme)
-- Önce veri_veriler, sonra kategoriler, daha sonra da veri_ortak tablosundaki ilgili data silinir
DELETE ver, kat, verort
FROM kategoriler AS kat
LEFT JOIN veri_ortak AS verort ON kat.id = verort.kategori_id
LEFT JOIN veri_veriler AS ver ON verort.veri_id = ver.id
WHERE kat.id = 1;

İşte bu kadar! MySQL'de verilerinizi yönetmek için kullanacağınız temel CRUD işlemlerini öğrendiniz. Bu komutları kavramak, web geliştirme serüveninizde size büyük bir avantaj sağlayacak. Unutmayın, en iyi öğrenme yöntemi bol bol pratik yapmaktır!

Webkolog'u takipte kalın!

Hepinize bol kodlu ve başarılı projeler dilerim!

0 yorum:

Yorum Gönder