29
VERİ TABANI ve YÖNETİMİ Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü

VERİ TABANI ve YÖNETİMİ

Embed Size (px)

DESCRIPTION

VERİ TABANI ve YÖNETİMİ. Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü. BÖLÜM -12-. TETİKLEYİCİ (TRIGGER). Giriş. 3. BİL 301 - Veri Tabanı ve Yönetimi. Trigger’lar Trigger’lar Ne Zaman Kullanılmalıdır? Klasik Trigger’ların Özellikleri Trigger’lar Nasıl Çalışır? - PowerPoint PPT Presentation

Citation preview

Page 1: VERİ TABANI ve YÖNETİMİ

VERİ TABANI ve YÖNETİMİCelal Bayar ÜniversitesiYazılım Mühendisliği Bölümü

Page 2: VERİ TABANI ve YÖNETİMİ

BÖLÜM -12-

TETİKLEYİCİ (TRIGGER)

2

BİL 301 - Veri Tabanı ve Yönetimi

Page 3: VERİ TABANI ve YÖNETİMİ

Giriş

• Trigger’lar

• Trigger’lar Ne Zaman Kullanılmalıdır?

• Klasik Trigger’ların Özellikleri

• Trigger’lar Nasıl Çalışır?

• Trigger Oluşturmak

3

BİL 301 - Veri Tabanı ve Yönetimi

Page 4: VERİ TABANI ve YÖNETİMİ

12.1. Trigger’lar

• Trigger yani tetikleyici, ilişkisel veritabanı yönetim sistemlerinde bir tabloda belirli olaylar meydana geldiği zaman yani ekleme, güncelleme, silme işlemlerinden biri gerçekleşmeden önce veya sonra çalışan ve belirli işlemleri kodlandığı şekilde yerine getiren yordamdır.

• Tetikler veritabanında yapılan değişikliklerle birlikte otomatik olarak çalışan prosedürel program parçacıklarıdır.

4

BİL 301 - Veri Tabanı ve Yönetimi

Page 5: VERİ TABANI ve YÖNETİMİ

12.1. Trigger’lar (devam…)

• Trigger’lar, veri değişiminin hemen ardından log dosyalar üzerinden otomatik olarak devreye giren özel bir Stored Procedure’dür.

• Genellikle karmaşık iş kurallarını gerçekleştirmek için veya basamaklı veri bütünlüğünü programlamak için kullanılırlar.

5

BİL 301 - Veri Tabanı ve Yönetimi

Page 6: VERİ TABANI ve YÖNETİMİ

12.2. Trigger’lar Ne Zaman Kullanılmalıdır?

• Trigger’lar aşağıdaki amaçlara yönelik kullanılırlar.

−Değişiklikleri takip etmek için: Kritik kayıtlar üzerinde değişiklik yapan kişiler ve değişiklik miktarlarını ya da kayıtlarının takibini tutmak için kullanılırlar.

−Birincil anahtar üretmek için: IDENTITY( ) fonksiyonu birincil anahtar olarak sadece sayı üretebilmektedir. Bazı durumlarda birincil anahtarın belli harf ve rakamlardan oluşması gerekebilir. Böyle durumlarda yine trigger’lara başvurulabilmektedir.

6

BİL 301 - Veri Tabanı ve Yönetimi

Page 7: VERİ TABANI ve YÖNETİMİ

12.2. Trigger’lar Ne Zaman Kullanılmalıdır? (devam)

• Trigger’lar aşağıdaki amaçlara yönelik kullanılırlar.

−Karmaşık iş kurallarını gerçeklemek için: Bazen uygulama veritabanının dışında bir veritabanına karşı, yabancı anahtar geçerliliğini denetlemek gerekebilmektedir. Bu durumda sadece veritabanı içindeki işler denetlenebilmektedir. Fakat trigger’ lar ile diğer veritabanları da denetlenebilmektedir.

−Mail atmak gibi işleri otomatikleştirmek için: Örneğin herhangi bir sipariş verildiğinde müşteriye bilgilendirme mail göndermek için kullanılabilmektedir.

7

BİL 301 - Veri Tabanı ve Yönetimi

Page 8: VERİ TABANI ve YÖNETİMİ

12.2. Trigger’lar Ne Zaman Kullanılmalıdır? (devam)

• Bunların dışında;

−Standart hata mesajlarının dışında hata mesajı vermek için

−Veritabanı erişimlerini takibe almak için

−Yeni nesne oluşturma işlemlerini, sunucu veritabanlarının tutarlılıklarını sağlamak için

−Nesne değişikliklerini takip etmek ve engellemek için

kullanılabilmektedirler.

8

BİL 301 - Veri Tabanı ve Yönetimi

Page 9: VERİ TABANI ve YÖNETİMİ

12.3. Klasik Trigger’ların Özellikleri

• Bir trigger, birden fazla olayı gerçekleştirebilmektedir.

• Örneğin bir tabloya kayıt eklendiğinde devreye giren bir trigger bu kayıtları başka bir yere de ekledikten sonra başka bir tablo üzerinde de güncellemeler yapabilmektedir.

• Trigger, geçici tablo yada sistem tablosu oluşturamaz ama bu türden tablolara erişebilmektedir.

9

BİL 301 - Veri Tabanı ve Yönetimi

Page 10: VERİ TABANI ve YÖNETİMİ

12.3. Klasik Trigger’ların Özellikleri

• Temel olarak iki farklı trigger çeşidi vardır.

+ AFTER Trigger

− AFTER trigger’ı sadece tablolar üzerinde tanımlanabilmektedir.

+ INSTEAD OF Trigger

− INSTEAD OF trigger’ı hem tablolar hem de view’lar üstünde tanımlanmaktadır.

10

BİL 301 - Veri Tabanı ve Yönetimi

Page 11: VERİ TABANI ve YÖNETİMİ

12.3. Klasik Trigger’ların Özellikleri

• Bu iki trigger’ ın karşılaştırılması tabloda verilmektedir.

11

BİL 301 - Veri Tabanı ve Yönetimi

Page 12: VERİ TABANI ve YÖNETİMİ

12.4. Trigger’lar Nasıl Çalışır?

• Trigger’ı tetikleyen bir olayla karşılaşıldığında işlem ile trigger ikisi birlikte bir transaction bloğu olarak ele alınır.

• Trigger’lar çalıştığı zaman INSERTED ve DELETED tablolarını kullanırlar. Bu tabloların her ikisi de ana tabloyla yani trigger’ın tetiklediği tabloyla eşdeğer alanlara sahiptir.

• Bu tablolar mantıksal tablo şeklinde RAM’de bulunurlar. Gerçek tabloya bir kayıt eklendiği zaman trigger çalışırsa bu kayıt aynı zamanda Inserted tablosuna da eklenir. İstenildiğinde bu tablodaki kayıtlara erişilebilmektedir.

12

BİL 301 - Veri Tabanı ve Yönetimi

Page 13: VERİ TABANI ve YÖNETİMİ

12.4. Trigger’lar Nasıl Çalışır?

• Tablodan bir kayıt silindiğinde, silinen kayıt DELETED tablosunda saklanır.

• UPDATE işlemi ise, DELETE ve hemen ardından yapılmış olan bir INSERT işlemi olarak ele alınır.

• Bir kayıt UPDATE edildiğinde orijinal kayıt DELETED tablosuna eklenir.

• Değişen kayıtta INSERTED tablosuna eklenir.

13

BİL 301 - Veri Tabanı ve Yönetimi

Page 14: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak

• Genel olarak bir trigger oluşturma ifadesi şu şekildedir.

CREATE TRIGGER trigger_adıON tablo_adı {FOR AFTER/INSTEAT OF} {INSERT/UPDATE/DELETE}AS Çalışacak olan SQL ifadeleri

14

BİL 301 - Veri Tabanı ve Yönetimi

Page 15: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Örnek: Bir satış yapıldığı zaman stokta eğer ürün varsa otomatik olarak stoktan düşen, yoksa uyarı mesajı veren bir trigger yazalım.

• Bu işlem için öncelikle aşağıdaki tabloları oluşturmamız gerekir.

−Müşteriler

−Kitaplar

−Satışlar

• Bu tablolara ait nitelikler ve SQL ifadeleri şöyledir.

15

BİL 301 - Veri Tabanı ve Yönetimi

Page 16: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Müşteriler tablosu ve nitelikleri aşağıdaki SQL kodu ile birlikte verilmektedir. Bu kodları SQL Server’da bir Query oluşturarak yazıp derleriz.

16

BİL 301 - Veri Tabanı ve Yönetimi

Page 17: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Ürünler tablosu ve nitelikleri aşağıdaki SQL kodu ile birlikte verilmektedir. Bu kodları SQL Server’da bir Query oluşturarak yazıp derleriz.

17

BİL 301 - Veri Tabanı ve Yönetimi

Page 18: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Son olarak satışlar tablosu ve nitelikleri aşağıdaki SQL kodu ile birlikte verilmektedir. Bu kodları SQL Server’da bir Query oluşturarak yazıp derleriz.

18

BİL 301 - Veri Tabanı ve Yönetimi

Page 19: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Oluşturduğumuz bu tablolara aşağıdaki gibi kayıtlar ekleyelim.

19

BİL 301 - Veri Tabanı ve Yönetimi

Page 20: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Tüm gerekli işlemlerin ardından herhangi bir satış yapıldığında stok miktarına bağlı olarak gerekli işlemleri yapacak olan trigger’ımız şöyle olacaktır.

20

BİL 301 - Veri Tabanı ve Yönetimi

Page 21: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Burada müşteri numarası 1 olan kişi, 2 numaralı üründen 1 adet sipariş vermektedir. SQL ifadesi çalıştırıldığında önceki ve sonraki kayıtların durumu aşağıdaki gibi olacaktır.

21

BİL 301 - Veri Tabanı ve Yönetimi

Page 22: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Benzer şekilde satışlar tablosunda bir kayıt silindiğinde (iptal edildiğinde) çalışacak olan bir DELETE trigger’ı yazalım. DELETE trigger’ı için SQL ifademiz şöyle olacaktır.

22

BİL 301 - Veri Tabanı ve Yönetimi

Page 23: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Bu trigger ise satış sonrası fatura kesildikten sonra teslim edilen ürünleri silmek için kullanılabilir. Silinen kayıtlar daha önceden bahsettiğimiz gibi DELETED tablosunda tutulmaktadır.

• Ayrıca bu trigger iptal edilen (yani ürünler tablosundan silinen) ürün adedini tekrar ürünler tablosuna eklemektedir.

23

BİL 301 - Veri Tabanı ve Yönetimi

Page 24: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Bu trigger’ıda çalıştırmak için SQL ifademiz şöyle olacaktır.

24

BİL 301 - Veri Tabanı ve Yönetimi

Page 25: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Benzer şekilde UPDATE trigger’ı ise aşağıdaki gibi olacaktır.

25

BİL 301 - Veri Tabanı ve Yönetimi

Page 26: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Bir INSERT, UPDATE veya DELETE işlemi bir tabloya uygulandığında bu tablo üzerinde sırasıyla bir Instead Of INSERT, Instead Of UPDATE veya Instead Of DELETE Trigger’ı varsa bu işlem tablo üzerinde gerçekleşmez.

• Onun yerine tetikleyici içinde yazılı kodlar yapılır. Bu işlemleri gösterebilmek için bir tablo oluşturalım. Bu tabloya ait nitelikler aşağıda verilmektedir.

26

BİL 301 - Veri Tabanı ve Yönetimi

Page 27: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Instead Of DELETE örneğine ait trigger aşağıda verilmektedir. Herhangi bir silme işlemi denendiğinde bu silme işleminin ne zaman denendiğini belirten bir trigger oluşturalım.

27

BİL 301 - Veri Tabanı ve Yönetimi

Page 28: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Bu denemeye ilişkin SQL ifadeleri ve sonuçları aşağıda verilmektedir.

28

BİL 301 - Veri Tabanı ve Yönetimi

Page 29: VERİ TABANI ve YÖNETİMİ

12.5. Trigger Oluşturmak (devam)

• Bütün INSTEAD OF trigger’ ları benzer şekilde;

− Ekleme için Instead Of INSERT,

− Güncelleme için Instead Of UPDATE,

− Silme işlemi için ise Instead Of DELETE

olarak oluşturulmaktadır.

29

BİL 301 - Veri Tabanı ve Yönetimi