2012-04-09 22 views
3

私はデータベース内のトリガを使用して予約の変更を追跡することを検討しています。予約が追加されるたびに、「テニュア」のスコアを保持するポイントをテーブルに追加します。mysqlがアップデート時に問題を引き起こす

このコマンドを実行すると、トリガーを追加する前に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でコード化するだけですか?ありがとう!

答えて

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; 

// 
+0

ありがとう、本当に感謝しています。これはうまくいった。 – igl2000

+0

心配なし - 幸せなコーディング –

0

更新プログラムは、更新するprovider_scoreテーブルのbookitテーブルに参加する必要があります。今はちょうどゆるやかなぶら下がりのbookitへの参照があります。

+0

ありがとうございます。私は、 "provider_score.provider_id"に参加しても、トリガーを無制限に作成できます。 – igl2000

+0

UPDATEブックで更新できません。SET prov_id = 3 where book_id = 2; と同じエラーが発生する – igl2000

+0

新しいコードで質問を更新できますか? – Jordan

関連する問題