29 Ekim 2016 Cumartesi

Mysql'de Tabloları İlişkilendirirken (Foreign Key) Cascade ve Restrict Farkı Nedir?

Biliyorsunuz Mysql'de tablolar arasında ilişki kurabiliyorsunuz. Bu ilişkilendirmeyi PhpMyAdmin benzeri bir arayüzden yada direk SQL kodu ile veritabanını oluştururken  yapabilirsiniz. Mysql'de ilişkilendirmenin nasıl yapılacağı hakkında çok bilgi vardır. Burada buna değinmeyeceğim. Benim bahsetmek istediğim bu ilişkilendirmeyi yaparken Cascade yada Restrict hangisini seçeceğimizdir?

  • Cascade (kademeli): Eğer ilişkili ana satır (parent row) silinirse yada güncellenirse bağlı olduğu alt satır (child row) da silinir yada güncellenir.
  • Restrict (sınırlama): Fakat Restrict kullanırsanız o zaman ana satır (parent row) silinirse yada güncellenirse bağlı olduğu alt satır (child row) silinmez yada güncellenmez. Bir hata mesajı (error) verir. Örneğin "Silmeye çalıştığınız satırdaki .... alanı başka bir tabloda kullanılıyor". Bu hata işlemini parent row silerseniz çıkar. Bağlı olduğu child row'u silseniz bir hata almazsınız ki olması gereken de budur.
  • Set Null (Boş): Parent row silinirse yada güncellenirse child row'a Boş (Null) değeri atanır.
  • No Action (Hiçbirşey yapma): Hiç bir işlem yapmaz. Yani parent row silinse de güncellense de child row da bir işlem yapılmaz.