2012-08-05 22 views
14

Kapsam: İki tablo. Yeni bir kullanıcı oluşturulduğunda, 2. bir tabloya kaydedilenler hakkında bazı bilgileri vardır (Bu bir tetikleyici kullanılarak yapıldı, beklendiği gibi çalışır). İşte benim masa yapmamın ve ilişkimin bir örneği.MySQL Tetikleyici: Tablodan Sil SONRAKİ SAYFA

Tablo 1->müşterilerin

+-----+---------+-----+ 
+ id + name + val + 
+=====+=========+=====+ 
+ 37 + george + x + 
+-----+---------+-----+ 
+ 38 + sally + y + 
+-----+---------+-----+ 

Tablo 2 -

+----+-----+----------+ 
+ id + pid + name + 
+----+-----+----------+ 
+ 1 + 37 + george + 
+----+-----+----------+ 
+ 2 + 38 + sally + 
+----+-----+----------+ 

yönetici patron_info>müşterilerin yönetebilir. Bir kullanıcıyı kaldırmayı seçtiğinde, kullanıcı tablo 1patrons'dan kaldırılır. Bu noktada, hiçbir şey tablo 2patron_info'a gerçekleşir.

Tablo 1, silinen bir öğenin silindiği tablo 2'den silmek için bir tetikleyici oluşturmaya çalışıyorum. İşte

DROP TRIGGER IF EXISTS log_patron_delete; 

Sonra sonradan tetikleyici oluşturmak için denemek ... Ben (tıpkı havayı temizlemek için) varsa tetiği düşmesi deneyin Başlangıçta ... ne denedim

bu. .. Bu noktada

CREATE TRIGGER log_patron_delete AFTER DELETE on patrons 
FOR EACH ROW 
BEGIN 
DELETE FROM patron_info 
    WHERE patron_info.pid = patrons.id 
END 

, bir sözdizimi hatası 1046: Check syntax near END on line 6 olsun. Bu noktada hatanın ne olduğunu bilmiyorum. Birkaç farklı varyasyon denedim. Ayrıca, burada bir sınırlayıcı kullanmam gerekiyor mu?

Herkes aklımı kurtarmaya yardım edebilir mi?

+0

Burada hangi yardıma ihtiyacınız var? asıl sorunun nedir –

+0

@vivek_jonam Silme tetiği ateşlenmez. Bu satır 6'da 'END' üzerinde bir sytnax hatası veriyor. Ayrıca, bunu bir 'DELIMETER $$ 'olarak mı yükleyeceğim? – Ohgodwhy

+1

@Ohgodwhy: memcache sorusu hakkında sadece bir not - sadece ekledikten sonra bağlantı kuruldu. Yapmadan önce "İlgili" de yoktu. – zerkms

cevap

33

Tetik kodunda bir hata olduğunu düşünüyorum.

CREATE TRIGGER log_patron_delete AFTER DELETE on patrons 
FOR EACH ROW 
BEGIN 
DELETE FROM patron_info 
    WHERE patron_info.pid = old.id; 
END 

Dont: Sildiğiniz patron kimliğine sahip tüm satırları silmek istediğiniz gibi , sen

yeni tetikleyici olarak bu deneyin (Aksi takdirde diğer kimlikleri silmek olacaktır) old.id kullanmak zorunda ";" silme sorgusunda. Ayrıca konsol penceresinde TRIGGER kodunu giriyorsanız, ayrıca sınırlayıcılardan da faydalanın.

Yabancı anahtar patron_info pid üzerinde DELETE CASCADE ON ayarlanmamış Neden
+2

Maaaaaaaaaaaaaaaaaan. Her şey, WHERE maddesindeki noktalı virgül oldu. Ben tam bir aptalım. Bu vivek için teşekkürler, bu takdir! – Ohgodwhy

+1

Neden yalnızca bir deyim için bir bileşik deyim bloğu kullanıyorsunuz? Bunu yapmak için ['CREATE TRIGGER' sözdiziminde] gerek yoktur (http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html). – Air

+0

";" - BOLD – Ulterior

-1
create trigger doct_trigger 
after delete on doctor 
for each row 
delete from patient where patient.PrimaryDoctor_SSN=doctor.SSN ; 
5

?

+0

içinde olmalı. Bunu okurken aynı şeyi düşünüyorum ... –

İlgili konular