Blog,  PROGRAM,  SQL

SQL Notları 2-Alter Table-AND-OR Kullanımı

ALTER TABLE

Giriş
SQL’de ALTER komutu, bir tablodaki sütunları veya kısıtlamaları değiştirmek için kullanılır.

Sözdizimi

  • ALTER TABLE [tablo_adı] ADD [sütun_adı] [veri_tipi]

Örnekler

Sütun Ekleme

Yukarıdaki sorgu, Employees tablosuna StartingDate ve DateOfBirth adında iki sütun ekler. StartingDate sütunu, boş olamaz (NOT NULL) ve varsayılan değeri mevcut tarih olurken (GETDATE()), DateOfBirth sütunu boş olabilir (NULL).

Sütun Silme

Bu komut, Employees tablosundaki Salary sütununu siler. Bu işlem sadece sütundaki verileri değil, sütunun kendisini de tablo yapısından kaldırır.

Kısıtlama (Constraint) Silme

Bu komut, Employees tablosundaki DefaultSalary adlı kısıtlamayı kaldırır.
Not: Bir sütunu silmeden önce, o sütuna bağlı kısıtlamaların da silindiğinden emin olun.

Kısıtlama Ekleme

Bu sorgu, Salary sütunu için varsayılan değeri 100 olarak belirleyen DefaultSalary adlı bir kısıtlama ekler.

Kısıtlama Türleri

  • Primary Key: Tabloya aynı kaydın eklenmesini engeller.
  • Foreign Key: Başka bir tablodaki birincil anahtara işaret eder.
  • Not Null: Sütuna boş değer girilmesini engeller.
  • Unique: Tablodaki her kaydı benzersiz olarak tanımlar.
  • Default: Varsayılan bir değer belirler.
  • Check: Bir sütuna girilebilecek değerleri sınırlar.

Daha fazla bilgi için Oracle dökümantasyonuna bakabilirsiniz.

Sütun Değiştirme

Bu sorgu, Employees tablosundaki StartingDate sütununun veri tipini DATETIME olarak değiştirir ve varsayılan değeri mevcut tarih yapar.

Birincil Anahtar Ekleme

Bu komut, Employees tablosundaki ID sütununu birincil anahtar (Primary Key) olarak belirler. Eğer birden fazla sütunu birincil anahtar yapmak isterseniz, parantez içinde sütun adlarını virgülle ayırarak belirtebilirsiniz. Bu durumda, bir kompozit birincil anahtar oluşturulmuş olur.

Bu anlatım, SQL’de ALTER TABLE komutunun temel kullanımını örneklerle açıklamaktadır. Kısıtlama ve sütun değişiklikleri gibi işlemleri nasıl gerçekleştirebileceğinizi gösterir.

Bölüm 3: AND ve OR Operatörleri

Sözdizimi

  1. SELECT * FROM tablo WHERE (koşul1) AND (koşul2);
  2. SELECT * FROM tablo WHERE (koşul1) OR (koşul2);

Örnekler

Bir tablonuz olduğunu varsayalım:

NameAgeCity
Bob10Paris
Mat20Berlin
Mary24Prag

Bu sorgu, yaşı 10’dan büyük ve şehri Prag olan kişilerin adlarını getirir. Sonuç olarak, sadece Mary döner.

Bu sorgu, yaşı 10 olan veya şehri Prag olan kişilerin adlarını getirir. Sonuç olarak, Bob ve Mary döner.

Daha fazla bilgi için AND ve OR Operatörleri sayfasına göz atabilirsiniz.

Bölüm 4: ON DELETE CASCADE

Örnekler

ON DELETE CASCADE
Bir oda yönetim uygulamanız olduğunu ve bu uygulamanın her müşteri (kiracı) için çalıştığını varsayalım. Veritabanınızda bir müşteri tablosu ve bir oda tablosu bulunuyor. Her müşteri N odaya sahip. Bu durumda, oda tablosunda müşteri tablosuna referans veren bir yabancı anahtar (foreign key) olmalıdır:

Bir müşteri başka bir yazılıma geçtiğinde, bu müşterinin verilerini silmeniz gerekecek. Ancak:

komutunu çalıştırdığınızda, hala odaları olan bir müşteriyi silemezsiniz ve bir yabancı anahtar ihlali alırsınız. Bu durumda, müşteriyi silmeden önce odalarını silen bir kod yazmanız gerekirdi. Gelecekte daha fazla yabancı anahtar bağımlılığı ekleneceği için uygulamanızın kodunda birçok değişiklik yapmanız gerekebilir.

Bu sorunu çözmenin daha iyi bir yolu, yabancı anahtarınıza ON DELETE CASCADE eklemektir.

komutunu çalıştırdığınızda, müşteri silindiğinde o müşteriye ait tüm odalar da otomatik olarak silinir. Bu şekilde sorunu çözmüş olursunuz ve uygulama kodunda herhangi bir değişiklik yapmanıza gerek kalmaz.

Dikkat Edilmesi Gerekenler:
Microsoft SQL-Server’da, kendisine referans veren bir tablo üzerinde ON DELETE CASCADE tanımlaması yapılamaz. Örneğin, döngüsel bir ağaç yapısı üzerinde ON DELETE CASCADE tanımlamaya çalışırsanız:

Bu işlem çalışmaz çünkü Microsoft SQL Server, döngüsel bir ağaç yapısında ON DELETE CASCADE tanımlamanıza izin vermez. Bunun nedeni, ağacın döngüsel olabilmesi ve bu durumda bir kilitlenmeye yol açabilmesidir. PostgreSQL ise bu işlemi yapabilir; ancak ağacın döngüsel olmaması gerekir. Eğer ağaç döngüsel ise, bir çalışma zamanı hatası alırsınız. Bu durumda, silme işlemini kendiniz uygulamanız gerekir.

Bir cevap yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir