Öncelikle bu dersimiz için ürün ve sipariş adında iki tablo oluşturalım.
CREATE TABLE Urun ( UrunID INT PRIMARY KEY IDENTITY(1,1), UrunAdi NVARCHAR(50), StokMiktari INT ) CREATE TABLE Siparis ( SiparisID INT PRIMARY KEY IDENTITY(1,1), UrunID INT, SiparisMiktari INT )
Şimdi de bu iki tablo arasındaki ilişkiyi belirtelim. Bu ilişki Sipariş kolonundaki UrunID ile Urun tablosundaki UrunID alanına referans vereceğini belirtelim.
ALTER TABLE Siparis ADD CONSTRAINT FK_Siparis_UrunID FOREIGN KEY(UrunID) REFERENCES Urun(UrunID)
Şimdi de Urun tablomuza birkaç veri girişi yapalım.
INSERT INTO Urun VALUES('Kitap',300) INSERT INTO Urun VALUES('Defter',300) INSERT INTO Urun VALUES('Silgi',300)
Şimdi de Siparis tablosuna insert yapalım. Ancak siparişi verirken, girmiş olduğumuz sipariş miktarı kadar, Urun tablosunda o ürün için tutulan StokMiktarı’nın da azalmasını istiyoruz. Bunun için bir trigger yazmamız gerekiyor. Data girişinin yapıldığı anda bu trigger tetiklenmesi için After kullanmalıyız.
CREATE TRIGGER trg_StokDusurme ON Siparis AFTER INSERT AS DECLARE @siparisMiktar INT DECLARE @urunId INT SELECT @urunId=UrunID,@siparisMiktar=SiparisMiktari FROM inserted UPDATE Urun SET StokMiktari=StokMiktari-@siparisMiktar WHERE UrunID=@urunId
Yazmış olduğumuz bu trigger ile sipariş tablosuna her insert girdiğimizde sipariş miktarı kadar stok miktarı azalma gösterecektir.
INSERT INTO Siparis VALUES(1,50)
Burada 50 adet sipariş verdik ve iki tabloda birbirinden etkilendiği için iki satır bundan etkilendi diye uyarı mesajımızı da aldık.
Şimdi Urun tablomuzun son durumunu görelim.
Görüldüğü gibi 300 adet kitap temin etmiştik. Bunun 50 sini sipariş verdik ve stok miktarı olarak 250 adet kitap ürünümüz elimizde kaldı.
Şimdi de Delete ile ilgili bir örnekle konuyu anlatalım. Çalışanlar ve işten ayrılanlar diye iki tablo oluşturalım. Calisan tablosundaki kişinin bilgileri işten ayrılınca IstenAyrilanlar tablosuna ayrıldığı günün tarihi ile eklensin istiyorum. Böylece geçmişte kimlerle çalıştığımı da unutmamış olurum.
CREATE TABLE Calisanlar ( CalisanID INT PRIMARY KEY IDENTITY(1,1), CalisanAdi NVARCHAR(50), ) CREATE TABLE IstenAyrilanlar ( CalisanIDID INT, CalisanAdi NVARCHAR(50), SilindigiTarih DATETIME )
Calisanlar tablomuza birkaç kişi ekleyelim.
insert Calisanlar values('Sümeyra Akbıyık') insert Calisanlar values('canan öz') insert Calisanlar values('Elif can')
Şimdi ise “Sümeyra Akbıyık” kayıtlı çalışanımızı işten çıkarmak istiyoruz. Calısanlar tablosundan silinip IstenAyrilanlar tablosuna eklensin istiyoruz. Şimdi bu olay için trigger’ımızı yazalım.
CREATE TRIGGER TRG_IstenAyrilanlar ON Calisanlar AFTER DELETE AS INSERT INTO IstenAyrilanlar SELECT *,GETDATE() FROM deleted
“Sümeyra Akbıyık” adlı çalışanımızın kaydını silelim.
DELETE Calisanlar WHERE CalisanAdi='Sümeyra Akbıyık'
Yine iki tablomuz da bundan etkilendiğini görüyoruz.Bu konumuzun da sonuna geldik. Bir sonraki konumuzda trigger’da instead of kullanımını anlatacağım.
2 yorum
Ezgi · Ekim 7, 2020 7:01 am tarihinde
Merhaba uzun süredir kodlama yapıyorum sitenize yeni denk geldim hem görsel hem içerik olarak harika bir iş çıkarmışsınız. Tebrik ediyorum ve Teşekkür Ediyorum artık bu blogu takipteyim.
Sümeyra Akbıyık · Ekim 14, 2020 10:26 am tarihinde
Teşekkür ederim İyi dilekleriniz için 🙂