2012-08-05 182 views
14

範圍:兩個表。當一個新的顧客被創建時,他們有一些關於他們的信息被存儲到第二個表中(這也是使用觸發器完成的,它按預期工作)。這是我的表格結構和關係的一個例子。MySQL觸發器:從表中刪除後刪除

表1->惠顧

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

表2 - >patron_info

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

管理員可以管理惠顧。當他們選擇移除顧客時,該顧客從表1patrons移除。在這一點上,表2patron_info沒有任何反應。

我只是試圖創建一個觸發器來刪除表2,當表1刪除了一個項目。以下是我已經試過......

起初,我嘗試,如果它的存在(只是清除空氣)下降觸發...

DROP TRIGGER IF EXISTS log_patron_delete; 

然後我嘗試之後創建觸發器。 ...

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

此時,我收到語法錯誤1046: Check syntax near END on line 6。我不知道這個錯誤是什麼。我嘗試了幾種不同的變化。另外,我需要在這裏使用分隔符嗎?

任何人都可以幫助恢復我的理智?

+0

你需要什麼幫助?你真正的問題是什麼? – 2012-08-05 17:06:06

+0

@vivek_jonam刪除觸發器不會觸發。它在第6行給我一個'END'的sytnax錯誤。另外,我是否將它包裝在'DELIMETER $$'中? – Ohgodwhy 2012-08-05 17:07:23

+1

@Ohgodwhy:只是關於memcache問題的一個說明 - 它只在我添加它後才被鏈接。在我做到這一點之前,「相關」是沒有的。 – zerkms 2014-05-13 02:16:29

回答

33

我認爲觸發代碼有錯誤。 當你想刪除的贊助人ID,刪除所有的行,你必須使用old.id(否則就刪除其他ID)

試試這個作爲新的觸發:

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

不要忘記「;」在刪除查詢上。 另外,如果您在控制檯窗口中輸入TRIGGER代碼,也可以使用分隔符。

+2

Maaaaaaaaaaaaaaaaaan。這一切都最終成爲我WHERE子句中的分號。我真是個傻瓜。感謝那個vivek,非常感謝! – Ohgodwhy 2012-08-05 17:28:47

+1

爲什麼只爲一個語句使用複合語句塊?在[CREATE TRIGGER'語法](http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html)中沒有要求這樣做。 – Air 2014-05-08 17:40:16

+0

不要忘記「;」 - 應該在BOLD – Ulterior 2014-08-08 09:52:19

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

爲什麼不在外鍵上設置級聯刪除patron_info .pid?

+0

我認爲,當我讀這... – 2016-12-03 03:00:42