5 min read

SQL ile kayıt düzenleme : INSERT, UPDATE, DELETE

Bu yazıda veritabanına yeni kayıt ekleme, kayıt güncelleme ve kayıt silme işlemleri yapıyoruz.
SQL ile kayıt düzenleme : INSERT, UPDATE, DELETE

Daha önceki bir yazıda SQL SELECT ifadesi kullanarak veritabanındaki çeşitli kayıtları okumuştuk. Bu yazıyı hatırlamak isteyenler için:

SQL SELECT ile kayıt sorgulama
Bu yazıda yeni başlayanlar veya tekrar yapmak isteyenler için SQL ile çeşitli sorgulama örnekleri yazıyoruz.

Şimdi bir adım ileri giderek yeni kayıt ekleme, kayıt güncelleme ve kayıt silme işlemleri yapalım.

1.Yeni kayıt ekleme: INSERT

INSERT kelimesinin kullanımını bir formülle gösterecek olursak:

INSERT INTO [tablo] ([sütunlar]) 
VALUES([bu sütunlara denk gelen değerler])

Örneğin Northwind veritabanından devam ederek, müşteri tablosuna yeni bir kayıt ekleyelim.  Burada önemli olan tablonun sütunlarının veri tiplerini doğru şekilde doldurmaktır. Aksi halde bir sayı değeri bekleyen bir sütuna siz metin değeri giremezsiniz.

Bu yüzden INSERT ile kayıt eklemeden önce tablonun yapısını incelemekte yarar var. İlk olarak Nortwind.customers yani müşteri tablosunu inceleyelim.

Müşteri tablosunun veri tipleri
Tablo detaylarında da veri tiplerini görebilir, düzenleyebiliriz

Tablo yapısını yorumlarsak; sütunlarda şu veri tiplerini görebiliyoruz:

  • int
  • varchar
  • longtext
  • longblob

Bazılarında parantez içinde boyut sınırlaması da verilmiş.

Buradan şunları anlıyoruz:

  • Bu tabloya yeni kayıt eklemek isteyen biri şirket adını yazarken en fazla 50 karakterlik bir metin değeri girebilir.
  • Aynı şekilde adres bilgisine sınırsız uzunlukta metin girilebilir.
  • Kayıt numarası veritabanı tarafından otomatik verileceği için (AI: autoincrement) bunu biz vermeyeceğiz. Fakat bu değerin tamsayı olacağını biliyoruz.
  • Ayrıca id hariç hiç bir sütunda NOT NULL(kısaca NN) ifadesi geçerli olmadığından, bütün sütunlar boş bırakılabilir.

Bu bilgilere dayanarak yeni bir kayıt ekleyelim. Yeni kayıtta bir müşterinin adı, soyadı ve iş telefonu olsun.

INSERT ile yeni kayıt eklenmesi.

Görüldüğü üzere girilen yeni kayıt 30 numarası ile eklenmiş durumda. Değer vermediğimiz sütunların değeri NULL yani boş bırakılmış.

Aynı şekilde bir de sipariş kaydı ekleyelim. Bunun için sipariş tablosunu incelememiz gerekiyor.

Sipariş tablosunu buradan detaylı olarak inceleyebiliriz.
Sipariş tablosundaki veri tipleri

Burada daha önce bahsetmediğimiz veri tipleri mevcut:

  • datetime: tarih
  • decimal: kesirli sayı, çok küsüratlı hesap isteyen para değerleri vb. için kullanılır
  • double: kesirli sayı
  • tinyint: küçük sayı değeri

Bunları göze alarak yeni bir sipariş kaydı oluşturabiliriz. Siparişi biraz önce eklediğimiz müşteri tarafından yapıldığını belirtmek için bu müşterinin kayıt numarasını da ekleyerek bağlantıyı sağlayalım.

INSERT INTO northwind.orders (customer_id, order_date, ship_name, ship_city, shipping_fee)
VALUES (30, NOW(), "Jamie Lannister", "King's Landing", 100.99);
Yeni sipariş kaydı eklendiğini görebiliyoruz.

Bu şekilde yeni kayıt eklendiğinde, ardından yaptığımız SELECT sorgusuyla iki tablodaki kayıtları birleştirerek (JOIN) hem siparişin detayını, hem de gönderen kişinin bilgilerini tek kayıtta görebiliyoruz. Burada NOW() fonksiyonu sayesinde veritabanı sunucusu o anki tarihi kendisi atıyor.

2. Kayıt güncelleme: UPDATE

Varolan kayıtları herhangi bir şekilde değiştirmek için UPDATE kelimesi kullanmamız gerekir. Bu kelimeyi kullanırken değiştireceğimiz sütunların doğru seçmemiz ve uygun veri tipleri yazmamız şarttır. Güncelleme şartlı da olabilir, yani tek kayıt değiştirmek yerine belirli bir suruma uyan bütün kayıtları tek seferde de güncelleyebiliriz.

Öncelikle tek bir kaydı güncellemekle başlayalım. Biraz önce eklediğimiz siparişin ücretini değiştirerek bir de gönderileceği ülke bilgisini ekleyelim. Güncellenecek olan kaydı bir WHERE ifadesi ile kayıt numarasından tespit edebiliyoruz. Bu şekilde yapılan güncelleme sadece 82 no.lu kaydı etkileyecektir.

UPDATE ile kayıt güncelleme

Güncellenen kaydı görmek için SELECT ile sorgulama yaptığımızda sipariş ücretinin ve ülke bilgisinin doğru bir şekilde değişmiş olduğunu görüyoruz.

Birden fazla kaydı güncellemek istersek, o zaman yine where ile daha geniş bir kapsam belirtebiliriz.

Örneğin New York şehrinde yaşayan bütün müşterilere bir not ekleyerek, bunların VIP olduklarını belirtebiliriz. Bu durumda update işlemi city değeri "New York" olan bütün customers tablo kayıtları için geçerli olacaktır.

Update ile sadece New York şehrine ait kayıtlara not eklenmesi

3. Kayıt silme: DELETE

Veritabanından kayıt silmek için DELETE kelimesi kullanırız. Where kelimesi ile koşul belirterek sadece bazı kayıtları silmek mümkün. Eğer koşul verilmezse DELETE ifadesi tablodaki bütün kayıtları silecektir.

Örneğin müşterilere eklediğimiz yeni kaydı şimdi silmeyi deneyelim.

Kendisine bağlı başka kayıtlar olan bir kayıt silinemez

Burada bir hata alıyoruz. Hatanın sebebi bu işlemin kaydı silmesine engel olan başka kayıtların bulunması. Hatırlarsanız bu müşteri tarafından yapılan bir sipariş eklemiştik. Bu sipariş kaydı silinmedikçe, müşteri kaydını silmemiz mümkün değil.

Bu durumda önce bu müşteriye ait olan sipariş kayıtlarını bulup silelim:

DELETE ile 30 numaralı müşteriye ait olan sipariş kayıtlarının silinmesi

Görüldüğü gibi siparişin bulunduğu 82. kayıt silinmiş durumda. Şimdi bu siparişi veren müşterinin kaydını silmeyi tekrar deneyelim. Artık kendisine bağlı kayıt kalmadığından silmeyi gerçekleştirebilmemiz gerekiyor.

DELETE ile 30 numaralı müşteri kaydının silinmesi

Son söz.

Bu yazıda SQL INSERT, UPDATE ve DELETE kelimeleri kullanarak veritabanı kayıtlarına ekleme, güncelleme ve silme işlemleri yaptık. Siz de bu tür müdahaleler yaparken veri tiplerini ve foreign key dediğimiz referans anahtarlarını iyi takip etmeyi unutmayın. Aksi halde yapmak istediğimiz işlem başarısız olacaktır.

Bir sonraki yazıda daha detaylı sorgulamalar yapmak için bize yardımcı olacak count, max, avg, group by, exists vb. yeni kelimelerle devam edeceğiz. Şimdiden iyi çalışmalar diliyorum. Devam yazısında görüşmek üzere, hoşçakalın.

Yeni başlayanlar için SQL - 3
Bu yazıda karmaşık sorgular yazmaya yarayan count, sum, avg, max, group by, exists gibi ifadeleri örneklerle uyguluyoruz.