2013-03-08 85 views
2

我有以下触发声明触发前选择

DELIMITER // 
CREATE TRIGGER rating 
BEFORE SELECT 
ON `clinic` 
FOR EACH ROW 
BEGIN 
    SET NEW.OLD.`rate` = (SELECT AVG(`rate`) FROM `Review` WHERE `Clinic_id` = NEW.OLD.`id`); 
END// 

我试图按照这里http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html但得到语法错误的指示。我究竟做错了什么?

NB我已经在Review表上运行SELECT声明,它给出了没有任何问题的结果。

编辑:我意识到我不能在SELECT之前触发一个触发器,因此决定在应用程序层处理它。看到这个:http://forums.mysql.com/read.php?99,277396,277692#msg-277692

+3

您无法在SELECT上放置触发器。 http://stackoverflow.com/questions/6137935/can-i-launch-a-trigger-on-select-statement-in-mysql – AmazingDreams 2013-03-08 07:54:17

+0

哈哈,哇!我几乎读了那个链接中的所有东西,并没有注意到SELECT不是** trigger_event **!那么你建议我可以做什么? – mavili 2013-03-08 07:56:43

+0

我不知道你在努力达到什么目的。检查一个诊所平均“看到”多少? – AmazingDreams 2013-03-08 07:59:05

回答

1

trigger_event不能是一个select trigger_event = {INSERT |更新| DELETE}

CREATE 
[DEFINER = { user | CURRENT_USER }] 
TRIGGER trigger_name 
trigger_time trigger_event 
ON tbl_name FOR EACH ROW 
trigger_body 

trigger_time:{BEFORE | AFTER}

trigger_event:{INSERT |更新| DELETE}