Tetikleyici

26
Tetikleyici

description

Tetikleyici. Nedir?. Bir tablo üzerinde Ekleme silme ve güncellemeye bağlı olarak tetiklenip çalışan SQL kodlarıdır. Genel amacı veri bütünlüğünü korumaktır. Tetikleyiciler. MYSQL tek bir tablo üzerinde maksimum 6 adet tetikleyiciyi destekler: Before Insert After Insert - PowerPoint PPT Presentation

Transcript of Tetikleyici

Page 1: Tetikleyici

Tetikleyici

Page 2: Tetikleyici

Nedir?

• Bir tablo üzerinde • Ekleme • silme ve • güncellemeye

bağlı olarak tetiklenip çalışan SQL kodlarıdır.

• Genel amacı veri bütünlüğünü korumaktır.

Page 3: Tetikleyici

Tetikleyiciler• MYSQL tek bir tablo üzerinde maksimum 6 adet tetikleyiciyi

destekler:• Before Insert• After Insert• Before Update• After Update• Before Delete• After Delete

Page 4: Tetikleyici

Tetikleyici Oluşturmak

CREATE TRIGGER triggername[BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tablenameFOR EACH ROW {statement}

Page 5: Tetikleyici

Örnek• Yeni bir çalışan kaydı girildiği anda son güncelleme alanını

güncelleyen bir tetikleyici için:

• Çalışanlar tablosu:

CREATE TABLE calisanlar (calisan_id int(11) NOT NULL,adi varchar(25) COLLATE utf8_turkish_ci DEFAULT NULL,soyadi varchar(25) COLLATE utf8_turkish_ci DEFAULT NULL,son_guncelleme datetime DEFAULT NULL,PRIMARY KEY (`calisan_id`)) E

Page 6: Tetikleyici

Örnek• CREATE TRIGGER calisan_son_guncelleme

BEFORE INSERT ON calisanlarFOR EACH ROW SET NEW.son_guncelleme = NOW();

Page 7: Tetikleyici

Örnek• Aynı isimde yeni bir tetikleyici oluşturulursa hata verir.

Page 8: Tetikleyici

Tetikleyici AliasBağlam New.field Old. Field

Before Insert Tüm alanlar Desteklemez

After Insert Desteklemez Ekledikten sonra «eski» kayıt yoktur.

Before Update Tüm alanlar Desteklemez

After Update Desteklemez «Eski» kayıtların hepsi yeni güncellenmiştir.

Before Delete Silmeden önce «yeni» kayıt yoktur

Desteklemez

After Delete Desteklemez Kayıtların «eski» değerleri silinmiştir

Page 9: Tetikleyici

Tetikleyiciyi kaldırmak• DROP TRIGGER calisan_son_guncelleme;

• Hata verirse:

• DROP TRIGGER IF EXISTS calisan_son_guncelleme;

Page 10: Tetikleyici

Çoklu SQL komutu• Eğer tetikleyici ile birden fazla SQl komutu çalıştırılacaksa

BEGIN……………..END

bloğu kullanılır

Page 11: Tetikleyici

INSERT• Örneğin ankete her girilen soruyu ve sorunun oluşturulma

tarih/saatini başka bir tabloya kaydeden bir tetikleyici oluşturmak için:

Page 12: Tetikleyici

INSERT

CREATE TABLE anket_sorular (Soruno int(10) primary key, Soru varchar(250));

CREATE TABLE yenisoru (Soru varchar(250),Tarihi datetime);

Page 13: Tetikleyici

INSERT

DELIMITER |CREATE TRIGGER before_anket_soru_girisiBEFORE INSERT ON anket_sorularFOR EACH ROW BEGIN

INSERT INTO yenisoru (soru, Tarihi) values (NEW.soru, NOW());END

Page 14: Tetikleyici

INSERT

INSERT INTO anket_sorular (Soruno, Soru) values (1, 'Türkiyenin başkenti neresidir?');

Page 15: Tetikleyici

UPDATE• Örneğin anketteki bir soru değiştirildiğinde eski soruyu başka

bir tabloya kaydeden bir tetikleyici oluşturmak için:

Page 16: Tetikleyici

UPDATE

CREATE TABLE eskisoru (Soruno int(10),Soru varchar(250));

Page 17: Tetikleyici

UPDATE

DELIMITER |CREATE TRIGGER update_anket_soru_girisiBEFORE UPDATE ON anket_sorularFOR EACH ROW BEGIN

INSERT INTO eskisoru (soruno, soru) values (OLD.soruno, OLD.soru);END

Page 18: Tetikleyici

UPDATE• UPDATE anket_sorular SET soru="Almanyanın başkenti

neresidir?" where soruno=1;

Page 19: Tetikleyici

DELETE• Örneğin anketten silinen soruların sayısını başka bir tabloya

kaydeden bir tetikleyici oluşturmak için:

Page 20: Tetikleyici

DELETE

CREATE TABLE silinensorular (adet int(10));

INSERT INTO silinensorular SET adet=0;

Page 21: Tetikleyici

DELETE

DELIMITER |CREATE TRIGGER delete_anket_soruBEFORE DELETE ON anket_sorularFOR EACH ROW BEGIN

UPDATE silinensorular SET adet=adet+1;END

Page 22: Tetikleyici

DELETE• DELETE FROM anket_sorular where soruno=1;

Page 23: Tetikleyici

Tetikleyiciyi değiştirme• Böyle bir eyleme MYsql izin vermez.• Bu nedenle tetikleyiciyi kaldırıp tekrar oluşturmanız gerekir.

Page 24: Tetikleyici

View- Tetikleyici• View’lar tetikleyicileri desteklemez

Page 25: Tetikleyici

Tetikleyicileri göstermek• Veritabanında bulunan tüm tetikliyicileri göstermek için:• SHOW triggers

Page 26: Tetikleyici

Tetikleyicilerin Saklandığı Konum• Xampp içindeki Mysql klasöründeki data klasörünün içindeki

çalıştığınız veritabanı klasöründe depolanırlar.

• TRN ve TRG uzantılıdır.• before_anket_soru_girisi.TRN-tetikleyici tanımı• anket_sorular.TRG--< ilişkili tablo