2010-01-19 7 views
1

MySQL 트리거를 설정하려고하는데 정확히 원하는 것을 얻는 방법을 알 수 없습니다. MySQL @variable을 설정해야한다고 생각하지만 시도한 것은 제대로 작동하지 않아 좋은 리소스를 찾을 수 없었습니다. phpMyAdmin에서 구분 기호를 변경하고 아래의 주석은 실제 쿼리에서 사용되지 않습니다.MySQL @variable

CREATE TRIGGER coroner AFTER INSERT ON events 
FOR EACH ROW BEGIN 
UPDATE teams SET live = live-1 WHERE id = NEW.victim; 
UPDATE teams SET score = score+NEW.value WHERE id = NEW.shooter; 
UPDATE teams SET last_active = NEW.time WHERE id = NEW.shooter OR id = NEW.victim; 
// up to here all works fine 
IF (SELECT live FROM teams WHERE id = NEW.victim) = 0 THEN 
UPDATE teams SET slot = slot-1 WHERE slot > OLD.slot; 
ENDIF; 
END 

은 내가 실제로 여기서 뭘하고있어 원 안에 팀을 복용하고, 팀의 마지막 플레이어가 제거되었을 때, 나는 그것을없이 원을 폐쇄하고있다.

CREATE TRIGGER coroner AFTER INSERT ON events 
FOR EACH ROW BEGIN 
UPDATE teams SET live = live-1 WHERE id = NEW.victim; 
UPDATE teams SET score = score+NEW.value WHERE id = NEW.shooter; 
UPDATE teams SET last_active = NEW.time WHERE id = NEW.shooter OR id = NEW.victim; 
SET @pivot := (SELECT slot FROM teams WHERE id = NEW.victim); 
IF (SELECT live FROM teams WHERE id = NEW.victim) = 0 THEN 
UPDATE teams SET slot = slot+1 WHERE slot < @pivot; 
ENDIF; 
END 

오류 :

#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 '; END' at line 9

도움


새로운 시도에 대한

#1363 - There is no OLD row in on INSERT trigger

감사 : 여기

는 phpMyAdmin과에서 오류 메시지입니다

답변

1

트리거 언어에 ENDIF 키워드가 없습니다. 대신 END IF (공백 포함)을 사용하십시오.

IF Statement에 대한 구문 설명서를 검토 할 수 있습니다.