27 Jul

Mysql de trigger

Trigger kelime anlamıyla tetikleyiciler, bir tabloya atanan ve o tablodaki istenen olay gerçekleştiğinde (insert,update veya delete)
server tarafında kendiliğinden çalışan bizim oluşturduğumuz
SQL kodlarıdır. MySql in sitesinde verdiği örnek ile açıklamaya çalışayım.
Önce tablolarımızı oluşturalım

CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(
a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0
);
bu da triggerimiz

delimiter $$
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;$$
delimiter;
verilerimizi eklyelim

INSERT INTO test3 (a3) VALUES
(NULL), (NULL), (NULL), (NULL), (NULL),
(NULL), (NULL), (NULL), (NULL), (NULL);INSERT INTO test4 (a4) VALUES
(0), (0), (0), (0), (0), (0), (0), (0), (0), (0);
INSERT INTO test1 VALUES (1), (3), (1), (7), (1), (8), (4), (4);
ve gidip tablolarımıza bakalım

mysql> SELECT * FROM test1;
+??+
| a1 |
+??+
| 1 |
| 3 |
| 1 |
| 7 |
| 1 |
| 8 |
| 4 |
| 4 |
+??+
8 rows in set (0.00 sec)mysql> SELECT * FROM test2;
+??+
| a2 |
+??+
| 1 |
| 3 |
| 1 |
| 7 |
| 1 |
| 8 |
| 4 |
| 4 |
+??+
8 rows in set (0.00 sec)
mysql> SELECT * FROM test3;
+?-+
| a3 |
+?-+
| 2 |
| 5 |
| 6 |
| 9 |
| 10 |
+?-+
5 rows in set (0.00 sec)
mysql> SELECT * FROM test4;
+?-+??+
| a4 | b4 |
+?-+??+
| 1 | 3 |
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 0 |
| 6 | 0 |
| 7 | 1 |
| 8 | 1 |
| 9 | 0 |
| 10 | 0 |
+?-+??+
10 rows in set (0.00 sec)
iyide ne oldu ne yaptın şimdi diyorsunuzdur belki. Anlatayım, zaten tablo oluşturma ve tabloya veri ekleme işlemlerini
bildiğinizi varsayarak trigger a geçiyorum.
Burada biz MySql e dedikki:
(Eyyy MySql )
eğer test1 tablosuna veri eklenirse bu eklemeden önce // CREATE TRIGGER testref BEFORE INSERT ON test1
test2 tablosundaki a2 alanını yeni eklenen veriyi ekle // INSERT INTO test2 SET a2 = NEW.a1;
test3 tablosundaki a3 alanınıdan yeni eklenen veriye denk gelen sütunu sil //DELETE FROM test3 WHERE a3 = NEW.a1;
test4 tablosundaki b4 alanına a4 alanının yeni eklenen veriyle eşleşen sütununu bir arttır // UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
(o da bizi kırmadı sağolsun yapıverdi işlemleri)
Burada bahsi geçen NEW anahtarı üzerinde işlem yapılan tabloya eklenen verilerdir, OLD kullanmış olsaydık o tablo üzerindeki eski verilere
işaret ediyor olacaktık.
Triggerları BEFORE ve AFTER anahtarlarını kullanarak o tablo üzerinde işlem gerçekleşmeden önce veya işlem gerçekleştikten sonra
çalışmasını sağlayabiliriz. Biz yukarıda BEFORE anahtarını kullanarak test1 tablosuna veriler eklenmeden önce işlemlerimizin gerçekleşmesini
istedik.Triggerin syntaxı

DELIMITER $$
CREATE TRIGGER ?trigger_ismi? ?trigger_event|INSERT|UPDATE|DELETE? ON ?tablo_ismi?
FOR EACH ROW BEGINSQL işlemleri
END;$$
DELIMITER;
hepsi bundan ibaret.

One thought on “Mysql de trigger

Comments are closed.