2012-08-05 2 views
14

범위 : 두 테이블. 새로운 후원자가 만들어지면 두 번째 테이블에 저장된 정보가 있습니다 (이는 트리거를 사용하여 수행 한 것으로 예상대로 작동 함). 다음은 내 테이블 구조 및 관계의 예입니다.MySQL 트리거 : 테이블에서 삭제 후 삭제

표 1>후원자

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

표 2-

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

관리자 patron_info>는 후원자를 관리 할 수 ​​있습니다. 그들이 후원자를 제거하기로 결정하면 후원자는 테이블 1patrons에서 제거됩니다. 이 시점에서 아무런 변화가 없습니다 표 2patron_info.

나는 표 1에서 삭제 된 항목이있을 때 표 2에서 삭제할 트리거를 만들려고합니다. 여기에

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

여기에 어떤 도움이 필요하십니까? 진짜 질문은 뭐니? –

+0

@vivek_jonam 삭제 트리거가 실행되지 않습니다. 그것은 나에게 줄 6에서 '끝'에 sytnax 오류를 준다. 또한 이것을 DELIMETER $$로 감싼다? – Ohgodwhy

+1

@Ohgodwhy : memcache 질문에 대한 메모 - 추가 한 후에 만 ​​링크되었습니다. 내가 그것을하기 전에 그것은 "관련"에서 아니오였습니다. – zerkms

답변

33

트리거 코드에 오류가 있다고 생각합니다.

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

말라 : 당신이 삭제 된 수호 ID로 모든 행을 삭제할으로 , 당신은

새로운 트리거로이 시도 (그렇지 않으면 다른 ID를 삭제할 것) old.id 사용해야합니다 잊지 ";" 삭제 쿼리에. 또한 콘솔 창에 TRIGGER 코드를 입력하는 경우 구분 기호도 사용하십시오.

+2

Maaaaaaaaaaaaaaaaaan. 그것은 모두 내 WHERE 절에서 세미콜론이되었습니다. 나는 바보 야. 그 vivek을 가져 주셔서 감사합니다. – Ohgodwhy

+1

하나의 명령문에 복합 문 블록을 사용해야하는 이유는 무엇입니까? [CREATE TRIGGER syntax] (http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html)에 그렇게 할 필요는 없습니다. – Air

+0

"잊지 마세요"; - 굵은 글씨로 표시되어야합니다. – Ulterior

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

외래 키에 ON CASCADE DELETE를 설정하지 않는 이유는 무엇입니까?.pid?

+0

나는 이것을 읽을 때 같은 생각을합니다 ... –

관련 문제