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;

当我运行它时,我在第 3 行得到一个语法错误。有解决办法吗?或者任何其他方式来实现这个功能?

4

2 回答 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
于 2013-03-22T09:59:10.553 回答
0

OLD只能在BEFORE-trigger 处访问,请参阅 MySQL 文档。而且您不需要UPDATE ... SET ...查询,您可以创建BEFORE UPDATE触发器并NEW就地修改字段。

于 2013-03-22T10:07:43.433 回答