触发根据第一个表的输入更新另一个表的值

时间:2017-11-02 05:48:46

标签: mysql

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
//

table feedback

table count

我想根据反馈中的新插入值编写更新表计数中的count值的触发器。 例如如果我在'反馈'表中插入等级值为3,那么它将自动将'计数表'中'三'的计数值更新为1.并且假设我在'反馈'表中插入等级值为5然后它将自动将“计数表”中“五”的计数值更新为1。

上述代码

语法错误

2 个答案:

答案 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$$