Forum
Merhaba arkadaşlar constraint lerle ilgili kafama takılan sorular var
mesala tablomda şöyle bir constraint tanımlıyorum
add constraint MyFK foreign key (numarasi) references dbo.TabloGenel(numarasi) ON UPDATE CASCADE
aslına bakarsanız bu kodun ne işe yaradığını örnek üzerinde deneyerek çözdüm
ancak
ON UPDATE CASCADE|Set DEFAULT|SET NULL|NO ACTION gibi 4 farklı şekildede kullana bilirim işte öğrenmek istediğim
1) ON UPDATE CASCADE tam olarak nedir?(Türkçesi nedir?)
2)ON UPDATE Set DEFAULT tam olarak nedir?
3)ON UPDATE SET NULL tam olarak nedir?
4)ON UPDATE NO ACTION tam olarak nedir?
tabi bide bunların başına ON DELETE koyabiliyoruz ozaman 8 farklı dizim oluyor
umarım derdimi anlatabilmişimdir
Foreign key de bildiğin gibi master tabloya detail tablo x bir column üzerinden bağlıdır.
Master tablodaki bağlı olan bu kolonun değişimi veya silinimi durumunda detay tabloda ilgili kolona sahip satırlara ne şekilde davranılmasını bu yukarıda bahsettiğin seçenekler ile bakarız.
Delete üzerine verilebilen 4 seçeneğe bakacak olursak
No action (Default) - Primary key silindiği zaman, bu key'e bağlı olan foreign key'in olduğu tabloda kayıt varsa bu silme işlemi hata verir.
Cascade - Primary key silindiği zaman, bu key'e bağlı olan foreign key'in olduğu tabloda da ilgili kayıtlar silinir.
Set Null- Primary key silindiği zaman, bu key'e bağlı olan foreign key'in olduğu tabloda ilgili kayıtlar silinmez, ilgili Foreign key kolonuna null atılır.
Set Default- Primary key silindiği zaman, bu key'e bağlı olan foreign key'in olduğu tabloda ilgili kayıtlar silinmez, ilgili Foreign key kolonuna default değer atılır.
Update için olanlarda bu mantıkta.
Aşağıdaki makaleyide okuyabilirsin. Detaylı açıklamış.
http://msdn.microsoft.com/en-us/library/ms186973(v=SQL.100).aspx
Hocam Çok açıklayıcı olmuş
Çok teşekkür ederim...
Hocam
Set Default la ilgili bi ornek verebilirmisiniz mesala 2 farklı tabloda 'numaralarim' adli 2 farkli stunda constraint belirliyorum ve on delete Set Default kullanıyorum
Sildiğim zaman default olarak foreign keyin odlugu tabloya 'NULL' atıyor ama ben mesala herhangibir şey yazdırmak istiyorum ne yapmam gerekiyor?
umarım anlaşılır olmuştur biraz şüpheliyim ama 😀
Teşekkürler...
Tabloyu dizayn modunda açın. Ve aşağıdaki column propertiesten default value alanına ne gelmesini istiyorsanız yazın.
Resimde işaretlediğim yer.
Default değer eğer siz bir alana birşey girmeziseniz verilen değerdir.
Set default cascade oalrak ayarladıgınızda eğerki primary key alanı silinirse foreign key alanına burada ayarladıgınız default değer yazılır.
Saygılar.
Ahmet hocam teşekkürler
Ama foreign key alanına default olarak Primarykey alanında buluna bilecek bir şey yazma zorunlulugu var dimi?
Mesala foreign key e sahip tablomda ki 'numarlar' stunu Primarykey tanımlı başka bir tablodan alıyor Primarykey li tablonun 'numaralar' stununda "111","222" var diyelim, e tabi foreign tanımladıgım tablomum 'numaralar' stunudandada "111" ve "222" den farklı giremem ve ben foring key li tabloma default olarak mesala "1234" girmesini istiyorum ancak primary keyli tablodan sildiğimde foring keyli tabloya "1234" girmesi mantık dışı olur çünki primary key li tabloda "1234" yok
Doğru anlamışmıyım?
Primary satırı zaten silnidği için diğer tabloda verilen değerin pek bir onemi yok.
Mesela şöyle düşünün bir hastane otomasyonu olsun, Ve taburcu olan hastalar primary tablosundan silinsin, referans oldugu tabloda da taburcular için 0000 kodu girilsin.
Çok basit bir örnek tabi bu. DB tasarımı ihtiyaca göre yapılandırılmalı.
Tabi primary key silindikten sonra select yaparken tüm kayıtların listelenmesini isterseniz left join ile baglamalısınız. sadece join yaparsanız örtüşmeyen satırlar gösterilmeyecektir.
Saygılar
Ahmet çok güzel açıklamış
Ahmet çok güzel açıklamış
Hocam Estağfurullah. Dilimiz döndüğünce.
Çok teşekkürler.