2012-02-13 5 views
0

방금 ​​업데이트 된 열을 가리 키도록이 트리거를 변경해야하므로 NEWSong_id를 어떻게 변경합니까? 감사!빠른 MySQL 트리거 업데이트

DROP TRIGGER IF EXISTS `ratings_update`// 
CREATE TRIGGER `ratings_update` AFTER UPDATE ON `ratings2` 
FOR EACH ROW update SONGS set 
rating_sum = rating_sum + NEW.rating, 
rating = rating_sum/rating_count 
where id = NEW.song_id 
// 

편집 VVV이 내 트리거 해낸 것입니다하지만 난 그것을 실행할 때 날이 오류를 던지고있다

DROP TRIGGER IF EXISTS `ratings_upd`// 
CREATE TRIGGER `ratings_upd` AFTER UPDATE ON `ratings2` 
FOR EACH ROW update SONGS set 
rating_sum = rating_sum + NEW.rating - OLD.rating, 
rating_count = rating_count, 
rating = rating_sum/rating_count 
where id = NEW.song_id 
// 

..

1064 - 당신은 오류가있다 귀하의 SQL 구문; 근처 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 한

+0

방금 ​​'업데이트 된 칼럼을 가리키며'란 무엇을 의미합니까? 'NEW'는 업데이트 후에 새로운 기록을 참조하는데, 당신이 묻고있는 것처럼 보이므로 어떤 종류의 대답을 찾고 있는지 잘 모르겠습니다. –

+0

알겠습니다.하지만 누군가가 이전 등급을 업데이트하면 업데이트 된 기존 평가에 액세스 할 수 있으므로 rating_sum = rating_sum - OLD.rating + NEW.rating을 계산할 수 있습니다. 감사. –

+0

글쎄, 네가 네 자신의 질문에 대답 한 것 같아. 'rating_sum = rating_sum - OLD.rating + NEW.rating'하지 않으시겠습니까? –

답변

0

OLD 업데이트하기 전에 값을 액세스 라인에서 'EACH ROW 업데이트에 대한 ratings2 ON UPDATE 후에 트리거 ratings_upd을 만들 //'와 NEW 값에 액세스 업데이트 후. http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html에서

:

당신은 별칭 OLD와 NEW를 사용하여 주제 테이블 (트리거와 관련된 테이블)의 열을 참조 할 수 있습니다. OLD.col_name은 업데이트되거나 삭제되기 전에 기존 행의 열을 나타냅니다. NEW.col_name은 삽입 될 새 행의 열 또는 업데이트 된 후 기존 행을 나타냅니다.
+0

설명 주셔서 감사합니다, 내 편집을 확인하고 내가 뭘 잘못하고 있는지 알고 있습니다 참조하십시오 –

+0

@ NickNelson 당신의 구분 기호 //? 어쨌든 코드의 구분 기호를 변경하지 않아도 //를 // 변경하십시오. –

+0

존재하는 부분이 있다면 방울을 제거했습니다. 도움을 주셔서 감사합니다. 정확히 지금 내가 원하는 방식으로 작동합니다. –