DEFINITIONS

Definitions More Info.
Definition ID524
TitleSQL
CategoryNOTES
DefinitionConstraint ON UPDATE CASCADE --COK ONEMLI
Definition Description/* Ana tabloda bir değişklik yaptıpımız zaman; bununla ilişkili olan yavru tablodaki kayıtların da ototmatik olarak değişmesini istiyorsak, CASCADE özelliğini dahil ederek ON UPDATE ifadesini kullanmamız gerekir.
ON UPDATE ifadesinin varsayılan özelliği NO ACTION dır.
Yani, Cascade No Action ile hiç yazmamak arasında bir fark yoktur.
Aşağıdaki örneğimizde, ilk kodumuzun sonuna on update cascade ifadesini ekledik.
Böylelikle ilk tabloda yapılan değişklik; otomatik olarak ikinci tabloya da etki edecektir.
*/

use yuksel2 go
ALTER TABLE MarketSatis
add constraint FK_Satis_UrunKod foreign key(UrunKod) references DepoGiris(UrunKod)
on update cascade go

/* Test etmek için; ana tablomuz olan DepoGirisi açarak, içindeki 1 nolu değere sahip ilk kaydı, 9 olarak değiştirelim ve kaydederek çıkalım. Bu işlem sonunda hiçbir hata mesajı ile karşılaşmadığınıza dikkat ediniz. */

update DepoGiris
set UrunKod=9
where UrunKod=1
go
select *
from DepoGiris

select *
from MarketSatis
--MarketSatış tablosundaki UrunNo 1 olan kayıtlar da 9 oldu.

/* Şimdi ana tablomuz olan DepoGiriş tablosunu açarak, 9 nolu kayıdı silmeye çalışalım.
Bu işlem sonunda, karşımıza gelen dialog kutusunda Yes butonuna tıkladığımızda; silme işleminin gerçekleşmediğini göreceğiz. Peki bunu nasıl yapacağız?? */

delete DepoGiris
where UrunKod=9
-- yapmadı
-- Aşağıdaki kodu yazarak oluşturduğumuz constraint silelim.

use yuksel2
go
alter table MarketSatis
drop constraint FK_Satis_UrunKod

/* Diğer bir CASECADE komutu DELETE komutudur.
Eğer bunu aktif hale getirisek; ana tabloda bir kaydı sildiğimiz zaman, yavru tablodaki bununla ilişkili tüm kayıtların, otomatik olarak silinmesini sağlarız.
Aşağıdaki kod ile hem update hem de delete ifadeleri için; CASCADE komutunu aktif hale getiriyoruz.
Delete için diğer bir parametre NO ACTION dır ve yazmamakla arasında hiçbir fark yoktur.
Yani varsayılan ayardır. */

alter table MarketSatis
add constraint FK_satis_UunKod Foreign Key(UrunKod) references DepoGiris(Urunkod)
on update cascade on delete cascade
go
/* Şimdi ana tablomuz olan DepoGiris i açıp; 9 numaralı urunkoduna sahip kaydı silerek, tablomuzu kapatalım.
Hiçbir hata mesajı ile karşılaşmadan işlemin gerçekleştiğini göreceğiz. */
delete DepoGiris
where UrunKod=9
go
select *
from DepoGiris
select *
from MarketSatis
go
-- ana tabloda da yavru tabloda da kayıtlar gitti
RecordBycunay
Record Date09-06-2014 14:42:42
Düzenle
Kopyala
Sil