Mysql trigger nasıl?

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
MercilessTurk
Üye
Mesajlar: 94
Kayıt: 28 Eki 2005 10:14

Mysql trigger nasıl?

Mesaj gönderen MercilessTurk »

http://dev.mysql.com/doc/refman/5.0/en/ ... igger.html bu adresteki makaleden yararlanalarak Mysql de trigger oluşturmaya çalışıyorum ama syntax hatası veriyor.
HATA:

Kod: Tümünü seç

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER |

CREATE TRIGGER testref BEFORE INSERT ON test1
  FOR EACH ROW BEG' at line 1
SORGU:

Kod: Tümünü seç

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
);

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 ;
Sorguyu phpmyadmin aracılığıyla Mysql 5.0.24a üzerinde deniyorum.

Sorun acaba mysql veriyonundan mı kaynaklanıyor? Bildiğim kadarıyla 5.0.2 den itibaren trigger desteği var.
Kullanıcı avatarı
MercilessTurk
Üye
Mesajlar: 94
Kayıt: 28 Eki 2005 10:14

Mesaj gönderen MercilessTurk »

Sorun sorgudan değilde phpmyadminden kaynaklanıyormuş. sorguyu sql dosyası olarak kaydedip

Kod: Tümünü seç

mysql -u dbuser -p dbname < /dosyayolu/db.sql
ile gerçekleştirdiğimde triggerı ekledi.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

phpmyadmin ilede alakalı değil tam. Mysql birden fazla komut içeren query'leri çalıştırmıyor. Delimineter hatası veriyor. DELIMITER komutu, komut ayracını değiştirmeye yarıyor. önce veri tabanına DELIMITER | komutunu gönderek bundan sonra komut sonlandırıcı olarak | kullanılacağını belirtiyor. Böylece trigger içine ; gönderebiliyor. Eğer delimiter komutunu kullanmazsanız trigger içinde geçen ; 'leri komut sonlandırıcı olarak algılardı.
Kullanıcı avatarı
MercilessTurk
Üye
Mesajlar: 94
Kayıt: 28 Eki 2005 10:14

Mesaj gönderen MercilessTurk »

Ama bu sorguyu dediğim gibi dosya.sql olarak kaydedip mysql veritabanına import ettiğimde sorunsuz çalışıyor. Sorguda yanlışlık varsa dosya ile yaptığımıızda da hata vermesi gerekmez miydi?
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

dosyadan komutları çalıştırırken kendisi otomatik olarak bölerek okuyor.
Cevapla