09 Ekim 2014, 04:28 | #1 | |
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0) | 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. Alıntıdır.
__________________ | |
|
Etiketler |
de, mysql, trigger |
Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| |
Benzer Konular | ||||
Konu | Konuyu Başlatan | Forum | Cevaplar | Son Mesaj |
MySQL Nedir ve MySQL C++ Builder Bağlantısı Nasıl Yapılır | Swat | MySQL | 0 | 01 Temmuz 2014 12:59 |
tuning-primer.sh mysql tuning scripti - mysql performans raporu | CeSaRCripS | MySQL | 0 | 16 Aralık 2012 15:11 |