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

-triggerでOLDのみアクセスできます。MySQLのドキュメントを参照してください。また、クエリは必要ありません。トリガーを作成し、フィールドを適切に変更できます。BEFOREUPDATE ... SET ...BEFORE UPDATENEW

于 2013-03-22T10:07:43.433 に答える