3

予約の変更を追跡するために、データベース内でトリガーを使用することを検討しています。予約が追加されるたびに、スコアを「保有期間」に保つテーブルにポイントを追加します。

このコマンドを実行すると、トリガーを追加する前にIDを変更できます。

UPDATE bookit SET prov_id = 32 where book_id=2;

次のトリガーを追加した後、prov_idを更新できず、このエラーが発生します

1054-'where句'の不明な列'bookit.prov_id'

引き金:

  delimiter //

 CREATE TRIGGER update_tenure_it BEFORE
 
 UPDATE ON bookit FOR EACH ROW

 BEGIN


 if(new.prov_id<>old.prov_id) THEN

 UPDATE provider_score set tenure=(tenure+1) where bookit.prov_id=provider_id;

 END IF;

 END;

 //

私が間違っていることと、問題の原因を知っていますか?そのような操作にトリガーを使用することを検討する必要がありますか、それともPHPでコーディングするだけですか?ありがとう!

4

2 に答える 2

1

TABLENAME.FIELDトリガーでは、 ;を介してテーブルに直接アクセスすることはできません。代わりに、更新トリガーは、更新が実行される前と後の行のエイリアスとして、それぞれ。old*と。*を提供します。newこの場合、以下が機能するはずです。

 delimiter //

 CREATE TRIGGER update_tenure_it BEFORE

 UPDATE ON bookit FOR EACH ROW

 BEGIN


 if(new.prov_id<>old.prov_id) THEN

 UPDATE provider_score set tenure=(tenure+1) where new.prov_id=provider_id;

 END IF;

 END;

 //
于 2012-04-09T21:31:15.497 に答える
0

更新は、bookitテーブルで更新しているprovider_scoreテーブルに結合する必要があります。今のところ、それはゆるくぶら下がっているbookitへの参照を持っています。

于 2012-04-09T20:23:28.637 に答える