Mysql中对表属性更新的触发器

3

有一个名为“Coach”的MySQL表,具有以下属性。

coach_ID int
mileage_of_last_service_date double
mileage double
isAvailable boolean

所有行的isAvailable初始设置为1。我想设置一个触发器,触发器执行以下操作: 当里程表属性更新且里程数大于100000时,触发器必须将同一表格的该特定行的属性设置如下。

isAvailable = 0
mileage_of_last_service_date = mileage_of_last_service_date + mileage
mileage = 0

这是我写的查询语句。
create trigger set_availability_coach after update on coach 
for each row
when old.mileage > 10000 
begin 
update coach
set isAvailable = 0, mileage_of_last_service_date = mileage_of_last_service_date + old.mileage, mileage = 0
where coach.coach_ID = old.coach_ID;
end;

当我运行这个程序时,在第三行出现了语法错误。 有没有修复的方法? 或者其他实现此功能的方式?

2个回答

1
我已经改过了,现在应该没问题了。
CREATE TRIGGER set_availability_coach BEFORE UPDATE ON coach 
FOR EACH ROW BEGIN
  IF OLD.mileage > 10000 THEN
    SET NEW.isAvailable = 0,
        NEW.mileage_of_last_service_date = OLD.mileage_of_last_service_date + NEW.mileage,
        NEW.mileage = 0;
  END IF;
END

#1064 - 在第7行附近您的SQL语法存在错误,请查阅与您的MySQL服务器版本相对应的手册以了解正确的语法使用,该错误可能与“END IF”有关。 - maheshakya
#1064 - 您的SQL语法有误,请检查与您的MySQL服务器版本相对应的手册,以获取正确的语法使用方法,在第6行附近。 - maheshakya
@maheshakya 我已经进行了编辑,但是代码是手写的,所以我不能保证它能编译。 - Steve
这是MySQL的语法,对吧? 我正在使用MySQL。 有一些东西在MySQL中不起作用,据我所知。 这可能是类似那样的东西吗? 虽然我找不到你代码中的语法错误,但它仍然会给出相同的错误。 - maheshakya
1
如果 OLD.mileage > 10000,那么应该改为 IF NEW.mileage > 10000。 - maheshakya

0
你只能在 BEFORE 触发器中访问 OLD请参阅 MySQL 文档。 而且你不需要 UPDATE ... SET ... 查询,你可以创建 BEFORE UPDATE 触发器,并直接修改 NEW 字段。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接