Create or replace Trigger t1 AFTER INSERT ON feedback
FOR EACH ROW
BEGIN
IF new.rating = 1 THEN update count SET count=count+1 WHERE scale="one";
ELSE IF new.rating = 2 THEN UPDATE count SET count=count+1 WHERE scale="two";
ELSE IF new.rating = 3 THEN UPDATE count SET count=count+1 WHERE scale="three";
ELSE IF new.rating = 4 THEN UPDATE count SET count=count+1 WHERE scale="four";
ELSE IF new.rating = 5 THEN UPDATE count SET count=count+1 WHERE scale="five";
END IF;
END
//
我想根据反馈中的新插入值编写更新表计数中的count值的触发器。 例如如果我在'反馈'表中插入等级值为3,那么它将自动将'计数表'中'三'的计数值更新为1.并且假设我在'反馈'表中插入等级值为5然后它将自动将“计数表”中“五”的计数值更新为1。
上述代码语法错误
答案 0 :(得分:0)
这个
Create Trigger <trigger_name> AFTER INSERT OR UPDATE ON <FIRST_TABLE_NAME>
FOR EACH ROW
BEGIN
//update statement
END;
//
来源:https://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html
答案 1 :(得分:0)
此处触发器写在反馈表和计数器更新的内部触发值中,这在另一个计数表中是不可能的。当您编写触发器时,您应该更新表中仅存在触发器的列的值。所以首先我们应该编写程序并从触发器中调用它。 过程:
create procedure c(cnt int(10))
begin
DECLARE rating_temp int (20);
DECLARE cur CURSOR FOR SELECT cnt;
OPEN cur;
FETCH cur INTO rating_temp;
IF rating_temp=5 then
update count1 SET counter=(counter+1) where scale="five";
ELSEIF rating_temp=4 then
update count1 SET counter=(counter+1) where scale="four";
ELSEIF rating_temp=3 then
update count1 SET counter=(counter+1) where scale="three";
ELSEIF rating_temp=2 then
update count1 SET counter=(counter+1) where scale="two";
ELSEIF rating_temp=1 then
update count1 SET counter=(counter+1) where scale="one";
END IF;
CLOSE cur;
END$$
2)触发 -
CREATE TRIGGER t1
AFTER INSERT
ON feedback
FOR EACH ROW
BEGIN
Declare cnt2 int(10);
select new.rating into cnt2;
call c(cnt2);
END$$